| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/processes/processes_api.h" | 5 #include "chrome/browser/extensions/api/processes/processes_api.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/json/json_writer.h" | 8 #include "base/json/json_writer.h" |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
| 12 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "base/values.h" | 14 #include "base/values.h" |
| 15 #include "chrome/browser/chrome_notification_types.h" | 15 #include "chrome/browser/chrome_notification_types.h" |
| 16 #include "chrome/browser/extensions/api/processes/processes_api_constants.h" | 16 #include "chrome/browser/extensions/api/processes/processes_api_constants.h" |
| 17 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" | 17 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" |
| 18 #include "chrome/browser/extensions/extension_function_registry.h" | 18 #include "chrome/browser/extensions/extension_function_registry.h" |
| 19 #include "chrome/browser/extensions/extension_function_util.h" | 19 #include "chrome/browser/extensions/extension_function_util.h" |
| 20 #include "chrome/browser/extensions/extension_service.h" | 20 #include "chrome/browser/extensions/extension_service.h" |
| 21 #include "chrome/browser/extensions/extension_tab_util.h" | 21 #include "chrome/browser/extensions/extension_tab_util.h" |
| 22 #include "chrome/browser/profiles/profile.h" | |
| 23 #include "chrome/browser/task_manager/resource_provider.h" | 22 #include "chrome/browser/task_manager/resource_provider.h" |
| 24 #include "chrome/browser/task_manager/task_manager.h" | 23 #include "chrome/browser/task_manager/task_manager.h" |
| 24 #include "content/public/browser/browser_context.h" |
| 25 #include "content/public/browser/notification_details.h" | 25 #include "content/public/browser/notification_details.h" |
| 26 #include "content/public/browser/notification_service.h" | 26 #include "content/public/browser/notification_service.h" |
| 27 #include "content/public/browser/notification_source.h" | 27 #include "content/public/browser/notification_source.h" |
| 28 #include "content/public/browser/notification_types.h" | 28 #include "content/public/browser/notification_types.h" |
| 29 #include "content/public/browser/render_process_host.h" | 29 #include "content/public/browser/render_process_host.h" |
| 30 #include "content/public/browser/render_view_host.h" | 30 #include "content/public/browser/render_view_host.h" |
| 31 #include "content/public/browser/render_widget_host.h" | 31 #include "content/public/browser/render_widget_host.h" |
| 32 #include "content/public/browser/render_widget_host_iterator.h" | 32 #include "content/public/browser/render_widget_host_iterator.h" |
| 33 #include "content/public/browser/web_contents.h" | 33 #include "content/public/browser/web_contents.h" |
| 34 #include "content/public/common/result_codes.h" | 34 #include "content/public/common/result_codes.h" |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 size_t mem; | 205 size_t mem; |
| 206 int64 pr_mem = model->GetPrivateMemory(index, &mem) ? | 206 int64 pr_mem = model->GetPrivateMemory(index, &mem) ? |
| 207 static_cast<int64>(mem) : -1; | 207 static_cast<int64>(mem) : -1; |
| 208 result->SetDouble(keys::kPrivateMemoryKey, static_cast<double>(pr_mem)); | 208 result->SetDouble(keys::kPrivateMemoryKey, static_cast<double>(pr_mem)); |
| 209 } | 209 } |
| 210 | 210 |
| 211 #endif // defined(ENABLE_TASK_MANAGER) | 211 #endif // defined(ENABLE_TASK_MANAGER) |
| 212 | 212 |
| 213 } // namespace | 213 } // namespace |
| 214 | 214 |
| 215 ProcessesEventRouter::ProcessesEventRouter(Profile* profile) | 215 ProcessesEventRouter::ProcessesEventRouter(content::BrowserContext* context) |
| 216 : profile_(profile), | 216 : browser_context_(context), listeners_(0), task_manager_listening_(false) { |
| 217 listeners_(0), | |
| 218 task_manager_listening_(false) { | |
| 219 #if defined(ENABLE_TASK_MANAGER) | 217 #if defined(ENABLE_TASK_MANAGER) |
| 220 model_ = TaskManager::GetInstance()->model(); | 218 model_ = TaskManager::GetInstance()->model(); |
| 221 model_->AddObserver(this); | 219 model_->AddObserver(this); |
| 222 | 220 |
| 223 registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG, | 221 registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG, |
| 224 content::NotificationService::AllSources()); | 222 content::NotificationService::AllSources()); |
| 225 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 223 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 226 content::NotificationService::AllSources()); | 224 content::NotificationService::AllSources()); |
| 227 #endif // defined(ENABLE_TASK_MANAGER) | 225 #endif // defined(ENABLE_TASK_MANAGER) |
| 228 } | 226 } |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 // Third arg: The exit code for the process. | 460 // Third arg: The exit code for the process. |
| 463 args->Append(new base::FundamentalValue(details->exit_code)); | 461 args->Append(new base::FundamentalValue(details->exit_code)); |
| 464 | 462 |
| 465 DispatchEvent(keys::kOnExited, args.Pass()); | 463 DispatchEvent(keys::kOnExited, args.Pass()); |
| 466 #endif // defined(ENABLE_TASK_MANAGER) | 464 #endif // defined(ENABLE_TASK_MANAGER) |
| 467 } | 465 } |
| 468 | 466 |
| 469 void ProcessesEventRouter::DispatchEvent( | 467 void ProcessesEventRouter::DispatchEvent( |
| 470 const std::string& event_name, | 468 const std::string& event_name, |
| 471 scoped_ptr<base::ListValue> event_args) { | 469 scoped_ptr<base::ListValue> event_args) { |
| 472 if (extensions::ExtensionSystem::Get(profile_)->event_router()) { | 470 if (extensions::ExtensionSystem::Get(browser_context_)->event_router()) { |
| 473 scoped_ptr<extensions::Event> event(new extensions::Event( | 471 scoped_ptr<extensions::Event> event(new extensions::Event( |
| 474 event_name, event_args.Pass())); | 472 event_name, event_args.Pass())); |
| 475 extensions::ExtensionSystem::Get(profile_)->event_router()-> | 473 extensions::ExtensionSystem::Get(browser_context_) |
| 476 BroadcastEvent(event.Pass()); | 474 ->event_router() |
| 475 ->BroadcastEvent(event.Pass()); |
| 477 } | 476 } |
| 478 } | 477 } |
| 479 | 478 |
| 480 bool ProcessesEventRouter::HasEventListeners(const std::string& event_name) { | 479 bool ProcessesEventRouter::HasEventListeners(const std::string& event_name) { |
| 481 extensions::EventRouter* router = | 480 extensions::EventRouter* router = |
| 482 extensions::ExtensionSystem::Get(profile_)->event_router(); | 481 extensions::ExtensionSystem::Get(browser_context_)->event_router(); |
| 483 if (router && router->HasEventListener(event_name)) | 482 if (router && router->HasEventListener(event_name)) |
| 484 return true; | 483 return true; |
| 485 return false; | 484 return false; |
| 486 } | 485 } |
| 487 | 486 |
| 488 ProcessesAPI::ProcessesAPI(Profile* profile) : profile_(profile) { | 487 ProcessesAPI::ProcessesAPI(content::BrowserContext* context) |
| 489 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( | 488 : browser_context_(context) { |
| 489 ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver( |
| 490 this, processes_api_constants::kOnUpdated); | 490 this, processes_api_constants::kOnUpdated); |
| 491 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( | 491 ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver( |
| 492 this, processes_api_constants::kOnUpdatedWithMemory); | 492 this, processes_api_constants::kOnUpdatedWithMemory); |
| 493 ExtensionFunctionRegistry* registry = | 493 ExtensionFunctionRegistry* registry = |
| 494 ExtensionFunctionRegistry::GetInstance(); | 494 ExtensionFunctionRegistry::GetInstance(); |
| 495 registry->RegisterFunction<extensions::GetProcessIdForTabFunction>(); | 495 registry->RegisterFunction<extensions::GetProcessIdForTabFunction>(); |
| 496 registry->RegisterFunction<extensions::TerminateFunction>(); | 496 registry->RegisterFunction<extensions::TerminateFunction>(); |
| 497 registry->RegisterFunction<extensions::GetProcessInfoFunction>(); | 497 registry->RegisterFunction<extensions::GetProcessInfoFunction>(); |
| 498 } | 498 } |
| 499 | 499 |
| 500 ProcessesAPI::~ProcessesAPI() { | 500 ProcessesAPI::~ProcessesAPI() { |
| 501 } | 501 } |
| 502 | 502 |
| 503 void ProcessesAPI::Shutdown() { | 503 void ProcessesAPI::Shutdown() { |
| 504 ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this); | 504 ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver( |
| 505 this); |
| 505 } | 506 } |
| 506 | 507 |
| 507 static base::LazyInstance<ProfileKeyedAPIFactory<ProcessesAPI> > | 508 static base::LazyInstance<ProfileKeyedAPIFactory<ProcessesAPI> > |
| 508 g_factory = LAZY_INSTANCE_INITIALIZER; | 509 g_factory = LAZY_INSTANCE_INITIALIZER; |
| 509 | 510 |
| 510 // static | 511 // static |
| 511 ProfileKeyedAPIFactory<ProcessesAPI>* ProcessesAPI::GetFactoryInstance() { | 512 ProfileKeyedAPIFactory<ProcessesAPI>* ProcessesAPI::GetFactoryInstance() { |
| 512 return g_factory.Pointer(); | 513 return g_factory.Pointer(); |
| 513 } | 514 } |
| 514 | 515 |
| 515 // static | 516 // static |
| 516 ProcessesAPI* ProcessesAPI::Get(Profile* profile) { | 517 ProcessesAPI* ProcessesAPI::Get(content::BrowserContext* context) { |
| 517 return ProfileKeyedAPIFactory<ProcessesAPI>::GetForProfile(profile); | 518 return ProfileKeyedAPIFactory<ProcessesAPI>::GetForProfile(context); |
| 518 } | 519 } |
| 519 | 520 |
| 520 ProcessesEventRouter* ProcessesAPI::processes_event_router() { | 521 ProcessesEventRouter* ProcessesAPI::processes_event_router() { |
| 521 if (!processes_event_router_) | 522 if (!processes_event_router_) |
| 522 processes_event_router_.reset(new ProcessesEventRouter(profile_)); | 523 processes_event_router_.reset(new ProcessesEventRouter(browser_context_)); |
| 523 return processes_event_router_.get(); | 524 return processes_event_router_.get(); |
| 524 } | 525 } |
| 525 | 526 |
| 526 void ProcessesAPI::OnListenerAdded(const EventListenerInfo& details) { | 527 void ProcessesAPI::OnListenerAdded(const EventListenerInfo& details) { |
| 527 // We lazily tell the TaskManager to start updating when listeners to the | 528 // We lazily tell the TaskManager to start updating when listeners to the |
| 528 // processes.onUpdated or processes.onUpdatedWithMemory events arrive. | 529 // processes.onUpdated or processes.onUpdatedWithMemory events arrive. |
| 529 processes_event_router()->ListenerAdded(); | 530 processes_event_router()->ListenerAdded(); |
| 530 } | 531 } |
| 531 | 532 |
| 532 void ProcessesAPI::OnListenerRemoved(const EventListenerInfo& details) { | 533 void ProcessesAPI::OnListenerRemoved(const EventListenerInfo& details) { |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 758 | 759 |
| 759 SetResult(processes); | 760 SetResult(processes); |
| 760 SendResponse(true); | 761 SendResponse(true); |
| 761 | 762 |
| 762 // Balance the AddRef in the RunImpl. | 763 // Balance the AddRef in the RunImpl. |
| 763 Release(); | 764 Release(); |
| 764 #endif // defined(ENABLE_TASK_MANAGER) | 765 #endif // defined(ENABLE_TASK_MANAGER) |
| 765 } | 766 } |
| 766 | 767 |
| 767 } // namespace extensions | 768 } // namespace extensions |
| OLD | NEW |