1 // 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.
5 #include "chrome/browser/extensions/api/log_private/log_private_api.h"
10 #include "base/json/json_writer.h"
11 #include "base/logging.h"
12 #include "base/memory/linked_ptr.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "chrome/browser/chromeos/system_logs/about_system_logs_fetcher.h"
15 #include "chrome/browser/chromeos/system_logs/scrubbed_system_logs_fetcher.h"
16 #include "chrome/browser/extensions/api/log_private/filter_handler.h"
17 #include "chrome/browser/extensions/api/log_private/log_parser.h"
18 #include "chrome/browser/extensions/api/log_private/syslog_parser.h"
19 #include "chrome/browser/extensions/extension_function.h"
20 #include "chrome/common/extensions/api/log_private.h"
22 namespace extensions {
25 scoped_ptr<LogParser> CreateLogParser(const std::string& log_type) {
26 if (log_type == "syslog")
27 return scoped_ptr<LogParser>(new SyslogParser());
28 // TODO(shinfan): Add more parser here
30 NOTREACHED() << "Invalid log type: " << log_type;
31 return scoped_ptr<LogParser>();
35 FilterHandler* filter_handler,
36 chromeos::SystemLogsResponse* logs,
37 std::vector<linked_ptr<api::log_private::LogEntry> >* output) {
38 for (chromeos::SystemLogsResponse::const_iterator request_it = logs->begin();
39 request_it != logs->end();
41 if (!filter_handler->IsValidSource(request_it->first)) {
44 scoped_ptr<LogParser> parser(CreateLogParser(request_it->first));
46 parser->Parse(request_it->second, output, filter_handler);
53 LogPrivateGetHistoricalFunction::LogPrivateGetHistoricalFunction() {
56 LogPrivateGetHistoricalFunction::~LogPrivateGetHistoricalFunction() {
59 bool LogPrivateGetHistoricalFunction::RunImpl() {
61 scoped_ptr<api::log_private::GetHistorical::Params> params(
62 api::log_private::GetHistorical::Params::Create(*args_));
63 EXTENSION_FUNCTION_VALIDATE(params.get());
64 filter_handler_.reset(new FilterHandler(params->filter));
66 chromeos::SystemLogsFetcherBase* fetcher;
67 if ((params->filter).scrub) {
68 fetcher = new chromeos::ScrubbedSystemLogsFetcher();
70 fetcher = new chromeos::AboutSystemLogsFetcher();
73 base::Bind(&LogPrivateGetHistoricalFunction::OnSystemLogsLoaded, this));
78 void LogPrivateGetHistoricalFunction::OnSystemLogsLoaded(
79 scoped_ptr<chromeos::SystemLogsResponse> sys_info) {
80 std::vector<linked_ptr<api::log_private::LogEntry> > data;
82 CollectLogInfo(filter_handler_.get(), sys_info.get(), &data);
85 api::log_private::Result result;
87 api::log_private::Filter::Populate(
88 *((filter_handler_->GetFilter())->ToValue()), &result.filter);
89 SetResult(result.ToValue().release());
93 } // namespace extensions