OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/api/log_private/log_private_api.h" | 5 #include "chrome/browser/extensions/api/log_private/log_private_api.h" |
6 | 6 |
| 7 #include <memory> |
7 #include <string> | 8 #include <string> |
8 #include <utility> | 9 #include <utility> |
9 #include <vector> | 10 #include <vector> |
10 | 11 |
11 #include "base/command_line.h" | 12 #include "base/command_line.h" |
12 #include "base/files/file_util.h" | 13 #include "base/files/file_util.h" |
13 #include "base/json/json_writer.h" | 14 #include "base/json/json_writer.h" |
14 #include "base/lazy_instance.h" | 15 #include "base/lazy_instance.h" |
15 #include "base/logging.h" | 16 #include "base/logging.h" |
16 #include "base/memory/scoped_ptr.h" | |
17 #include "build/build_config.h" | 17 #include "build/build_config.h" |
18 #include "chrome/browser/browser_process.h" | 18 #include "chrome/browser/browser_process.h" |
19 #include "chrome/browser/download/download_prefs.h" | 19 #include "chrome/browser/download/download_prefs.h" |
20 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" | 20 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" |
21 #include "chrome/browser/extensions/api/log_private/filter_handler.h" | 21 #include "chrome/browser/extensions/api/log_private/filter_handler.h" |
22 #include "chrome/browser/extensions/api/log_private/log_parser.h" | 22 #include "chrome/browser/extensions/api/log_private/log_parser.h" |
23 #include "chrome/browser/extensions/api/log_private/syslog_parser.h" | 23 #include "chrome/browser/extensions/api/log_private/syslog_parser.h" |
24 #include "chrome/browser/feedback/system_logs/scrubbed_system_logs_fetcher.h" | 24 #include "chrome/browser/feedback/system_logs/scrubbed_system_logs_fetcher.h" |
25 #include "chrome/browser/io_thread.h" | 25 #include "chrome/browser/io_thread.h" |
26 #include "chrome/browser/profiles/profile.h" | 26 #include "chrome/browser/profiles/profile.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 base::SequencedWorkerPool::BLOCK_SHUTDOWN); | 61 base::SequencedWorkerPool::BLOCK_SHUTDOWN); |
62 } | 62 } |
63 | 63 |
64 // Checks if we are running on sequenced task runner thread. | 64 // Checks if we are running on sequenced task runner thread. |
65 bool IsRunningOnSequenceThread() { | 65 bool IsRunningOnSequenceThread() { |
66 base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); | 66 base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); |
67 return pool->IsRunningSequenceOnCurrentThread( | 67 return pool->IsRunningSequenceOnCurrentThread( |
68 pool->GetNamedSequenceToken(FileResource::kSequenceToken)); | 68 pool->GetNamedSequenceToken(FileResource::kSequenceToken)); |
69 } | 69 } |
70 | 70 |
71 scoped_ptr<LogParser> CreateLogParser(const std::string& log_type) { | 71 std::unique_ptr<LogParser> CreateLogParser(const std::string& log_type) { |
72 if (log_type == "syslog") | 72 if (log_type == "syslog") |
73 return scoped_ptr<LogParser>(new SyslogParser()); | 73 return std::unique_ptr<LogParser>(new SyslogParser()); |
74 // TODO(shinfan): Add more parser here | 74 // TODO(shinfan): Add more parser here |
75 | 75 |
76 NOTREACHED() << "Invalid log type: " << log_type; | 76 NOTREACHED() << "Invalid log type: " << log_type; |
77 return scoped_ptr<LogParser>(); | 77 return std::unique_ptr<LogParser>(); |
78 } | 78 } |
79 | 79 |
80 void CollectLogInfo(FilterHandler* filter_handler, | 80 void CollectLogInfo(FilterHandler* filter_handler, |
81 system_logs::SystemLogsResponse* logs, | 81 system_logs::SystemLogsResponse* logs, |
82 std::vector<api::log_private::LogEntry>* output) { | 82 std::vector<api::log_private::LogEntry>* output) { |
83 for (system_logs::SystemLogsResponse::const_iterator | 83 for (system_logs::SystemLogsResponse::const_iterator |
84 request_it = logs->begin(); request_it != logs->end(); ++request_it) { | 84 request_it = logs->begin(); request_it != logs->end(); ++request_it) { |
85 if (!filter_handler->IsValidSource(request_it->first)) { | 85 if (!filter_handler->IsValidSource(request_it->first)) { |
86 continue; | 86 continue; |
87 } | 87 } |
88 scoped_ptr<LogParser> parser(CreateLogParser(request_it->first)); | 88 std::unique_ptr<LogParser> parser(CreateLogParser(request_it->first)); |
89 if (parser) { | 89 if (parser) { |
90 parser->Parse(request_it->second, output, filter_handler); | 90 parser->Parse(request_it->second, output, filter_handler); |
91 } | 91 } |
92 } | 92 } |
93 } | 93 } |
94 | 94 |
95 // Returns directory location of app-specific logs that are initiated with | 95 // Returns directory location of app-specific logs that are initiated with |
96 // logPrivate.startEventRecorder() calls - /home/chronos/user/log/apps | 96 // logPrivate.startEventRecorder() calls - /home/chronos/user/log/apps |
97 base::FilePath GetAppLogDirectory() { | 97 base::FilePath GetAppLogDirectory() { |
98 return logging::GetSessionLogDir(*base::CommandLine::ForCurrentProcess()) | 98 return logging::GetSessionLogDir(*base::CommandLine::ForCurrentProcess()) |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 } | 234 } |
235 | 235 |
236 void LogPrivateAPI::PostPendingEntries() { | 236 void LogPrivateAPI::PostPendingEntries() { |
237 BrowserThread::PostTask( | 237 BrowserThread::PostTask( |
238 BrowserThread::UI, FROM_HERE, | 238 BrowserThread::UI, FROM_HERE, |
239 base::Bind(&LogPrivateAPI:: AddEntriesOnUI, | 239 base::Bind(&LogPrivateAPI:: AddEntriesOnUI, |
240 base::Unretained(this), | 240 base::Unretained(this), |
241 base::Passed(&pending_entries_))); | 241 base::Passed(&pending_entries_))); |
242 } | 242 } |
243 | 243 |
244 void LogPrivateAPI::AddEntriesOnUI(scoped_ptr<base::ListValue> value) { | 244 void LogPrivateAPI::AddEntriesOnUI(std::unique_ptr<base::ListValue> value) { |
245 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 245 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
246 | 246 |
247 for (std::set<std::string>::iterator ix = net_internal_watches_.begin(); | 247 for (std::set<std::string>::iterator ix = net_internal_watches_.begin(); |
248 ix != net_internal_watches_.end(); ++ix) { | 248 ix != net_internal_watches_.end(); ++ix) { |
249 // Create the event's arguments value. | 249 // Create the event's arguments value. |
250 scoped_ptr<base::ListValue> event_args(new base::ListValue()); | 250 std::unique_ptr<base::ListValue> event_args(new base::ListValue()); |
251 event_args->Append(value->DeepCopy()); | 251 event_args->Append(value->DeepCopy()); |
252 scoped_ptr<Event> event( | 252 std::unique_ptr<Event> event( |
253 new Event(::extensions::events::LOG_PRIVATE_ON_CAPTURED_EVENTS, | 253 new Event(::extensions::events::LOG_PRIVATE_ON_CAPTURED_EVENTS, |
254 ::events::kOnCapturedEvents, std::move(event_args))); | 254 ::events::kOnCapturedEvents, std::move(event_args))); |
255 EventRouter::Get(browser_context_) | 255 EventRouter::Get(browser_context_) |
256 ->DispatchEventToExtension(*ix, std::move(event)); | 256 ->DispatchEventToExtension(*ix, std::move(event)); |
257 } | 257 } |
258 } | 258 } |
259 | 259 |
260 void LogPrivateAPI::CreateTempNetLogFile(const std::string& owner_extension_id, | 260 void LogPrivateAPI::CreateTempNetLogFile(const std::string& owner_extension_id, |
261 base::ScopedFILE* file) { | 261 base::ScopedFILE* file) { |
262 DCHECK(IsRunningOnSequenceThread()); | 262 DCHECK(IsRunningOnSequenceThread()); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 } | 396 } |
397 | 397 |
398 LogPrivateGetHistoricalFunction::LogPrivateGetHistoricalFunction() { | 398 LogPrivateGetHistoricalFunction::LogPrivateGetHistoricalFunction() { |
399 } | 399 } |
400 | 400 |
401 LogPrivateGetHistoricalFunction::~LogPrivateGetHistoricalFunction() { | 401 LogPrivateGetHistoricalFunction::~LogPrivateGetHistoricalFunction() { |
402 } | 402 } |
403 | 403 |
404 bool LogPrivateGetHistoricalFunction::RunAsync() { | 404 bool LogPrivateGetHistoricalFunction::RunAsync() { |
405 // Get parameters | 405 // Get parameters |
406 scoped_ptr<api::log_private::GetHistorical::Params> params( | 406 std::unique_ptr<api::log_private::GetHistorical::Params> params( |
407 api::log_private::GetHistorical::Params::Create(*args_)); | 407 api::log_private::GetHistorical::Params::Create(*args_)); |
408 EXTENSION_FUNCTION_VALIDATE(params.get()); | 408 EXTENSION_FUNCTION_VALIDATE(params.get()); |
409 filter_handler_.reset(new FilterHandler(params->filter)); | 409 filter_handler_.reset(new FilterHandler(params->filter)); |
410 | 410 |
411 system_logs::SystemLogsFetcherBase* fetcher; | 411 system_logs::SystemLogsFetcherBase* fetcher; |
412 if ((params->filter).scrub) { | 412 if ((params->filter).scrub) { |
413 fetcher = new system_logs::ScrubbedSystemLogsFetcher(); | 413 fetcher = new system_logs::ScrubbedSystemLogsFetcher(); |
414 } else { | 414 } else { |
415 fetcher = new system_logs::AboutSystemLogsFetcher(); | 415 fetcher = new system_logs::AboutSystemLogsFetcher(); |
416 } | 416 } |
417 fetcher->Fetch( | 417 fetcher->Fetch( |
418 base::Bind(&LogPrivateGetHistoricalFunction::OnSystemLogsLoaded, this)); | 418 base::Bind(&LogPrivateGetHistoricalFunction::OnSystemLogsLoaded, this)); |
419 | 419 |
420 return true; | 420 return true; |
421 } | 421 } |
422 | 422 |
423 void LogPrivateGetHistoricalFunction::OnSystemLogsLoaded( | 423 void LogPrivateGetHistoricalFunction::OnSystemLogsLoaded( |
424 scoped_ptr<system_logs::SystemLogsResponse> sys_info) { | 424 std::unique_ptr<system_logs::SystemLogsResponse> sys_info) { |
425 | |
426 // Prepare result | 425 // Prepare result |
427 api::log_private::Result result; | 426 api::log_private::Result result; |
428 CollectLogInfo(filter_handler_.get(), sys_info.get(), &result.data); | 427 CollectLogInfo(filter_handler_.get(), sys_info.get(), &result.data); |
429 api::log_private::Filter::Populate( | 428 api::log_private::Filter::Populate( |
430 *((filter_handler_->GetFilter())->ToValue()), &result.filter); | 429 *((filter_handler_->GetFilter())->ToValue()), &result.filter); |
431 SetResult(result.ToValue().release()); | 430 SetResult(result.ToValue().release()); |
432 SendResponse(true); | 431 SendResponse(true); |
433 } | 432 } |
434 | 433 |
435 LogPrivateStartEventRecorderFunction::LogPrivateStartEventRecorderFunction() { | 434 LogPrivateStartEventRecorderFunction::LogPrivateStartEventRecorderFunction() { |
436 } | 435 } |
437 | 436 |
438 LogPrivateStartEventRecorderFunction::~LogPrivateStartEventRecorderFunction() { | 437 LogPrivateStartEventRecorderFunction::~LogPrivateStartEventRecorderFunction() { |
439 } | 438 } |
440 | 439 |
441 bool LogPrivateStartEventRecorderFunction::RunAsync() { | 440 bool LogPrivateStartEventRecorderFunction::RunAsync() { |
442 scoped_ptr<api::log_private::StartEventRecorder::Params> params( | 441 std::unique_ptr<api::log_private::StartEventRecorder::Params> params( |
443 api::log_private::StartEventRecorder::Params::Create(*args_)); | 442 api::log_private::StartEventRecorder::Params::Create(*args_)); |
444 EXTENSION_FUNCTION_VALIDATE(params.get()); | 443 EXTENSION_FUNCTION_VALIDATE(params.get()); |
445 switch (params->event_type) { | 444 switch (params->event_type) { |
446 case api::log_private::EVENT_TYPE_NETWORK: | 445 case api::log_private::EVENT_TYPE_NETWORK: |
447 LogPrivateAPI::Get(Profile::FromBrowserContext(browser_context())) | 446 LogPrivateAPI::Get(Profile::FromBrowserContext(browser_context())) |
448 ->StartNetInternalsWatch( | 447 ->StartNetInternalsWatch( |
449 extension_id(), | 448 extension_id(), |
450 params->sink, | 449 params->sink, |
451 base::Bind( | 450 base::Bind( |
452 &LogPrivateStartEventRecorderFunction::OnEventRecorderStarted, | 451 &LogPrivateStartEventRecorderFunction::OnEventRecorderStarted, |
(...skipping 11 matching lines...) Expand all Loading... |
464 SendResponse(true); | 463 SendResponse(true); |
465 } | 464 } |
466 | 465 |
467 LogPrivateStopEventRecorderFunction::LogPrivateStopEventRecorderFunction() { | 466 LogPrivateStopEventRecorderFunction::LogPrivateStopEventRecorderFunction() { |
468 } | 467 } |
469 | 468 |
470 LogPrivateStopEventRecorderFunction::~LogPrivateStopEventRecorderFunction() { | 469 LogPrivateStopEventRecorderFunction::~LogPrivateStopEventRecorderFunction() { |
471 } | 470 } |
472 | 471 |
473 bool LogPrivateStopEventRecorderFunction::RunAsync() { | 472 bool LogPrivateStopEventRecorderFunction::RunAsync() { |
474 scoped_ptr<api::log_private::StopEventRecorder::Params> params( | 473 std::unique_ptr<api::log_private::StopEventRecorder::Params> params( |
475 api::log_private::StopEventRecorder::Params::Create(*args_)); | 474 api::log_private::StopEventRecorder::Params::Create(*args_)); |
476 EXTENSION_FUNCTION_VALIDATE(params.get()); | 475 EXTENSION_FUNCTION_VALIDATE(params.get()); |
477 switch (params->event_type) { | 476 switch (params->event_type) { |
478 case api::log_private::EVENT_TYPE_NETWORK: | 477 case api::log_private::EVENT_TYPE_NETWORK: |
479 LogPrivateAPI::Get(Profile::FromBrowserContext(browser_context())) | 478 LogPrivateAPI::Get(Profile::FromBrowserContext(browser_context())) |
480 ->StopNetInternalsWatch( | 479 ->StopNetInternalsWatch( |
481 extension_id(), | 480 extension_id(), |
482 base::Bind( | 481 base::Bind( |
483 &LogPrivateStopEventRecorderFunction::OnEventRecorderStopped, | 482 &LogPrivateStopEventRecorderFunction::OnEventRecorderStopped, |
484 this)); | 483 this)); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 } | 515 } |
517 | 516 |
518 void LogPrivateDumpLogsFunction::OnStoreLogsCompleted( | 517 void LogPrivateDumpLogsFunction::OnStoreLogsCompleted( |
519 const base::FilePath& log_path, | 518 const base::FilePath& log_path, |
520 bool succeeded) { | 519 bool succeeded) { |
521 if (succeeded) { | 520 if (succeeded) { |
522 LogPrivateAPI::Get(Profile::FromBrowserContext(browser_context())) | 521 LogPrivateAPI::Get(Profile::FromBrowserContext(browser_context())) |
523 ->RegisterTempFile(extension_id(), log_path); | 522 ->RegisterTempFile(extension_id(), log_path); |
524 } | 523 } |
525 | 524 |
526 scoped_ptr<base::DictionaryValue> response(new base::DictionaryValue()); | 525 std::unique_ptr<base::DictionaryValue> response(new base::DictionaryValue()); |
527 extensions::GrantedFileEntry file_entry = | 526 extensions::GrantedFileEntry file_entry = |
528 extensions::app_file_handler_util::CreateFileEntry( | 527 extensions::app_file_handler_util::CreateFileEntry( |
529 Profile::FromBrowserContext(browser_context()), | 528 Profile::FromBrowserContext(browser_context()), |
530 extension(), | 529 extension(), |
531 render_frame_host()->GetProcess()->GetID(), | 530 render_frame_host()->GetProcess()->GetID(), |
532 log_path, | 531 log_path, |
533 false); | 532 false); |
534 | 533 |
535 base::DictionaryValue* entry = new base::DictionaryValue(); | 534 base::DictionaryValue* entry = new base::DictionaryValue(); |
536 entry->SetString("fileSystemId", file_entry.filesystem_id); | 535 entry->SetString("fileSystemId", file_entry.filesystem_id); |
537 entry->SetString("baseName", file_entry.registered_name); | 536 entry->SetString("baseName", file_entry.registered_name); |
538 entry->SetString("id", file_entry.id); | 537 entry->SetString("id", file_entry.id); |
539 entry->SetBoolean("isDirectory", false); | 538 entry->SetBoolean("isDirectory", false); |
540 base::ListValue* entry_list = new base::ListValue(); | 539 base::ListValue* entry_list = new base::ListValue(); |
541 entry_list->Append(entry); | 540 entry_list->Append(entry); |
542 response->Set("entries", entry_list); | 541 response->Set("entries", entry_list); |
543 response->SetBoolean("multiple", false); | 542 response->SetBoolean("multiple", false); |
544 SetResult(response.release()); | 543 SetResult(response.release()); |
545 SendResponse(succeeded); | 544 SendResponse(succeeded); |
546 } | 545 } |
547 | 546 |
548 } // namespace extensions | 547 } // namespace extensions |
OLD | NEW |