| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/api/log_private/filter_handler.h" |
| |
| #include <string> |
| #include <vector> |
| |
| #include "chrome/common/extensions/api/log_private.h" |
| |
| namespace extensions { |
| |
| namespace { |
| |
| template <typename T> |
| bool IsValidField(const std::vector<T>& filter, const T& field) { |
| return (!filter.size() || |
| std::find(filter.begin(), filter.end(), field) != filter.end()); |
| } |
| |
| } // namespace |
| |
| FilterHandler::FilterHandler(const api::log_private::Filter& filter) { |
| scoped_ptr<base::DictionaryValue> filter_value = filter.ToValue(); |
| api::log_private::Filter::Populate(*filter_value, &filter_); |
| } |
| |
| FilterHandler::~FilterHandler() {} |
| |
| bool FilterHandler::IsValidLogEntry( |
| const api::log_private::LogEntry& entry) const { |
| return (IsValidProcess(entry.process) && IsValidLevel(entry.level) && |
| IsValidTime(entry.timestamp)); |
| } |
| |
| bool FilterHandler::IsValidTime(double time) const { |
| const double kInvalidTime = 0; |
| if (filter_.start_timestamp != kInvalidTime && |
| (filter_.start_timestamp > time || filter_.end_timestamp < time)) { |
| return false; |
| } |
| return true; |
| } |
| |
| bool FilterHandler::IsValidSource(const std::string& source) const { |
| return IsValidField(filter_.sources, source); |
| } |
| |
| bool FilterHandler::IsValidLevel(const std::string& level) const { |
| return IsValidField(filter_.level, level); |
| } |
| |
| bool FilterHandler::IsValidProcess(const std::string& process) const { |
| return IsValidField(filter_.process, process); |
| } |
| |
| } // namespace extensions |