blob: 6965932dc70503e8c85e7fb205c29a74d22cd77b [file] [log] [blame]
// 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