blob: 6965932dc70503e8c85e7fb205c29a74d22cd77b [file] [log] [blame]
Ben Murdochbb1529c2013-08-08 10:24:53 +01001// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/extensions/api/log_private/filter_handler.h"
6
7#include <string>
8#include <vector>
9
10#include "chrome/common/extensions/api/log_private.h"
11
12namespace extensions {
13
14namespace {
15
16template <typename T>
17bool IsValidField(const std::vector<T>& filter, const T& field) {
18 return (!filter.size() ||
19 std::find(filter.begin(), filter.end(), field) != filter.end());
20}
21
22} // namespace
23
24FilterHandler::FilterHandler(const api::log_private::Filter& filter) {
25 scoped_ptr<base::DictionaryValue> filter_value = filter.ToValue();
26 api::log_private::Filter::Populate(*filter_value, &filter_);
27}
28
29FilterHandler::~FilterHandler() {}
30
31bool FilterHandler::IsValidLogEntry(
32 const api::log_private::LogEntry& entry) const {
33 return (IsValidProcess(entry.process) && IsValidLevel(entry.level) &&
34 IsValidTime(entry.timestamp));
35}
36
37bool FilterHandler::IsValidTime(double time) const {
38 const double kInvalidTime = 0;
39 if (filter_.start_timestamp != kInvalidTime &&
40 (filter_.start_timestamp > time || filter_.end_timestamp < time)) {
41 return false;
42 }
43 return true;
44}
45
46bool FilterHandler::IsValidSource(const std::string& source) const {
47 return IsValidField(filter_.sources, source);
48}
49
50bool FilterHandler::IsValidLevel(const std::string& level) const {
51 return IsValidField(filter_.level, level);
52}
53
54bool FilterHandler::IsValidProcess(const std::string& process) const {
55 return IsValidField(filter_.process, process);
56}
57
58} // namespace extensions