| 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 <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 // Create the event's arguments value. | 247 // Create the event's arguments value. |
| 248 scoped_ptr<base::ListValue> event_args(new base::ListValue()); | 248 scoped_ptr<base::ListValue> event_args(new base::ListValue()); |
| 249 event_args->Append(value->DeepCopy()); | 249 event_args->Append(value->DeepCopy()); |
| 250 scoped_ptr<Event> event( | 250 scoped_ptr<Event> event( |
| 251 new Event(events::kOnCapturedEvents, event_args.Pass())); | 251 new Event(events::kOnCapturedEvents, event_args.Pass())); |
| 252 EventRouter::Get(browser_context_) | 252 EventRouter::Get(browser_context_) |
| 253 ->DispatchEventToExtension(*ix, event.Pass()); | 253 ->DispatchEventToExtension(*ix, event.Pass()); |
| 254 } | 254 } |
| 255 } | 255 } |
| 256 | 256 |
| 257 void LogPrivateAPI::InitializeNetLogger(const std::string& owner_extension_id, | 257 void LogPrivateAPI::CreateFileForNetLogger( |
| 258 net::NetLogLogger** net_log_logger) { | 258 const std::string& owner_extension_id, |
| 259 base::ScopedFILE* file) { |
| 259 DCHECK(IsRunningOnSequenceThread()); | 260 DCHECK(IsRunningOnSequenceThread()); |
| 260 (*net_log_logger) = NULL; | |
| 261 | 261 |
| 262 // Create app-specific subdirectory in session logs folder. | 262 // Create app-specific subdirectory in session logs folder. |
| 263 base::FilePath app_log_dir = GetAppLogDirectory().Append(owner_extension_id); | 263 base::FilePath app_log_dir = GetAppLogDirectory().Append(owner_extension_id); |
| 264 if (!base::DirectoryExists(app_log_dir)) { | 264 if (!base::DirectoryExists(app_log_dir)) { |
| 265 if (!base::CreateDirectory(app_log_dir)) { | 265 if (!base::CreateDirectory(app_log_dir)) { |
| 266 LOG(ERROR) << "Could not create dir " << app_log_dir.value(); | 266 LOG(ERROR) << "Could not create dir " << app_log_dir.value(); |
| 267 return; | 267 return; |
| 268 } | 268 } |
| 269 } | 269 } |
| 270 | 270 |
| 271 base::FilePath file_path = app_log_dir.Append(kLogFileNameBase); | 271 base::FilePath file_path = app_log_dir.Append(kLogFileNameBase); |
| 272 file_path = logging::GenerateTimestampedName(file_path, base::Time::Now()); | 272 file_path = logging::GenerateTimestampedName(file_path, base::Time::Now()); |
| 273 FILE* file = NULL; | 273 FILE* file_ptr = fopen(file_path.value().c_str(), "w"); |
| 274 file = fopen(file_path.value().c_str(), "w"); | 274 if (file_ptr == nullptr) { |
| 275 if (file == NULL) { | |
| 276 LOG(ERROR) << "Could not open " << file_path.value(); | 275 LOG(ERROR) << "Could not open " << file_path.value(); |
| 277 return; | 276 return; |
| 278 } | 277 } |
| 279 | 278 |
| 280 RegisterTempFile(owner_extension_id, file_path); | 279 RegisterTempFile(owner_extension_id, file_path); |
| 281 scoped_ptr<base::Value> constants(net::NetLogLogger::GetConstants()); | 280 return file->reset(file_ptr); |
| 282 *net_log_logger = new net::NetLogLogger(file, *constants); | |
| 283 (*net_log_logger)->set_log_level(net::NetLog::LOG_ALL_BUT_BYTES); | |
| 284 } | 281 } |
| 285 | 282 |
| 286 void LogPrivateAPI::StartObservingNetEvents( | 283 void LogPrivateAPI::StartObservingNetEvents( |
| 287 IOThread* io_thread, | 284 IOThread* io_thread, |
| 288 net::NetLogLogger** net_log_logger) { | 285 base::ScopedFILE* file) { |
| 289 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 286 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 290 if (!(*net_log_logger)) | 287 if (!file->get()) |
| 291 return; | 288 return; |
| 292 | 289 |
| 293 net_log_logger_.reset(*net_log_logger); | 290 net_log_logger_.reset(new net::NetLogLogger()); |
| 294 net_log_logger_->StartObserving(io_thread->net_log()); | 291 net_log_logger_->set_log_level(net::NetLog::LOG_ALL_BUT_BYTES); |
| 292 net_log_logger_->StartObserving(io_thread->net_log(), file->Pass(), nullptr, |
| 293 nullptr); |
| 295 } | 294 } |
| 296 | 295 |
| 297 void LogPrivateAPI::MaybeStartNetInternalLogging( | 296 void LogPrivateAPI::MaybeStartNetInternalLogging( |
| 298 const std::string& caller_extension_id, | 297 const std::string& caller_extension_id, |
| 299 IOThread* io_thread, | 298 IOThread* io_thread, |
| 300 api::log_private::EventSink event_sink) { | 299 api::log_private::EventSink event_sink) { |
| 301 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 300 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 302 if (!logging_net_internals_) { | 301 if (!logging_net_internals_) { |
| 303 logging_net_internals_ = true; | 302 logging_net_internals_ = true; |
| 304 event_sink_ = event_sink; | 303 event_sink_ = event_sink; |
| 305 switch (event_sink_) { | 304 switch (event_sink_) { |
| 306 case api::log_private::EVENT_SINK_CAPTURE: { | 305 case api::log_private::EVENT_SINK_CAPTURE: { |
| 307 io_thread->net_log()->AddThreadSafeObserver( | 306 io_thread->net_log()->AddThreadSafeObserver( |
| 308 this, net::NetLog::LOG_ALL_BUT_BYTES); | 307 this, net::NetLog::LOG_ALL_BUT_BYTES); |
| 309 break; | 308 break; |
| 310 } | 309 } |
| 311 case api::log_private::EVENT_SINK_FILE: { | 310 case api::log_private::EVENT_SINK_FILE: { |
| 312 net::NetLogLogger** net_logger_ptr = new net::NetLogLogger* [1]; | 311 base::ScopedFILE* file = new base::ScopedFILE(); |
| 313 // Initialize net logger on the blocking pool and start observing event | 312 // Initialize a FILE on the blocking pool and start observing event |
| 314 // with in on IO thread. | 313 // on IO thread. |
| 315 GetSequencedTaskRunner()->PostTaskAndReply( | 314 GetSequencedTaskRunner()->PostTaskAndReply( |
| 316 FROM_HERE, | 315 FROM_HERE, |
| 317 base::Bind(&LogPrivateAPI::InitializeNetLogger, | 316 base::Bind(&LogPrivateAPI::CreateFileForNetLogger, |
| 318 base::Unretained(this), | 317 base::Unretained(this), |
| 319 caller_extension_id, | 318 caller_extension_id, |
| 320 net_logger_ptr), | 319 file), |
| 321 base::Bind(&LogPrivateAPI::StartObservingNetEvents, | 320 base::Bind(&LogPrivateAPI::StartObservingNetEvents, |
| 322 base::Unretained(this), | 321 base::Unretained(this), |
| 323 io_thread, | 322 io_thread, |
| 324 base::Owned(net_logger_ptr))); | 323 base::Owned(file))); |
| 325 break; | 324 break; |
| 326 } | 325 } |
| 327 case api::log_private::EVENT_SINK_NONE: { | 326 case api::log_private::EVENT_SINK_NONE: { |
| 328 NOTREACHED(); | 327 NOTREACHED(); |
| 329 break; | 328 break; |
| 330 } | 329 } |
| 331 } | 330 } |
| 332 } | 331 } |
| 333 } | 332 } |
| 334 | 333 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 353 | 352 |
| 354 void LogPrivateAPI::StopNetInternalLogging() { | 353 void LogPrivateAPI::StopNetInternalLogging() { |
| 355 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 354 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 356 if (net_log() && logging_net_internals_) { | 355 if (net_log() && logging_net_internals_) { |
| 357 logging_net_internals_ = false; | 356 logging_net_internals_ = false; |
| 358 switch (event_sink_) { | 357 switch (event_sink_) { |
| 359 case api::log_private::EVENT_SINK_CAPTURE: | 358 case api::log_private::EVENT_SINK_CAPTURE: |
| 360 net_log()->RemoveThreadSafeObserver(this); | 359 net_log()->RemoveThreadSafeObserver(this); |
| 361 break; | 360 break; |
| 362 case api::log_private::EVENT_SINK_FILE: | 361 case api::log_private::EVENT_SINK_FILE: |
| 363 net_log_logger_->StopObserving(); | 362 net_log_logger_->StopObserving(nullptr); |
| 364 net_log_logger_.reset(); | 363 net_log_logger_.reset(); |
| 365 break; | 364 break; |
| 366 case api::log_private::EVENT_SINK_NONE: | 365 case api::log_private::EVENT_SINK_NONE: |
| 367 NOTREACHED(); | 366 NOTREACHED(); |
| 368 break; | 367 break; |
| 369 } | 368 } |
| 370 } | 369 } |
| 371 } | 370 } |
| 372 | 371 |
| 373 void LogPrivateAPI::Initialize() { | 372 void LogPrivateAPI::Initialize() { |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 540 entry->SetBoolean("isDirectory", false); | 539 entry->SetBoolean("isDirectory", false); |
| 541 base::ListValue* entry_list = new base::ListValue(); | 540 base::ListValue* entry_list = new base::ListValue(); |
| 542 entry_list->Append(entry); | 541 entry_list->Append(entry); |
| 543 response->Set("entries", entry_list); | 542 response->Set("entries", entry_list); |
| 544 response->SetBoolean("multiple", false); | 543 response->SetBoolean("multiple", false); |
| 545 SetResult(response.release()); | 544 SetResult(response.release()); |
| 546 SendResponse(succeeded); | 545 SendResponse(succeeded); |
| 547 } | 546 } |
| 548 | 547 |
| 549 } // namespace extensions | 548 } // namespace extensions |
| OLD | NEW |