Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5564)

Unified Diff: chrome/browser/task_manager/task_manager_resource_providers.cc

Issue 12212089: content: convert child process notifications to observer usage (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: private Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/task_manager/task_manager_resource_providers.cc
diff --git a/chrome/browser/task_manager/task_manager_resource_providers.cc b/chrome/browser/task_manager/task_manager_resource_providers.cc
index 63f92e12e9a2ebcf8c437f83f8270e76efd39b0c..89c193a1e4b4fd966b46649e1a382d1b3e5a6c57 100644
--- a/chrome/browser/task_manager/task_manager_resource_providers.cc
+++ b/chrome/browser/task_manager/task_manager_resource_providers.cc
@@ -1211,83 +1211,53 @@ void TaskManagerChildProcessResourceProvider::StartUpdating() {
DCHECK(!updating_);
updating_ = true;
- // Register for notifications to get new child processes.
- registrar_.Add(this, content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED,
- content::NotificationService::AllBrowserContextsAndSources());
- registrar_.Add(this, content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED,
- content::NotificationService::AllBrowserContextsAndSources());
-
// Get the existing child processes.
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(
&TaskManagerChildProcessResourceProvider::RetrieveChildProcessData,
this));
+
+ BrowserChildProcessObserver::Add(this);
}
void TaskManagerChildProcessResourceProvider::StopUpdating() {
DCHECK(updating_);
updating_ = false;
- // Unregister for notifications to get new plugin processes.
- registrar_.Remove(
- this, content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED,
- content::NotificationService::AllBrowserContextsAndSources());
- registrar_.Remove(
- this,
- content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED,
- content::NotificationService::AllBrowserContextsAndSources());
-
// Delete all the resources.
STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end());
resources_.clear();
pid_to_resources_.clear();
-}
-void TaskManagerChildProcessResourceProvider::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- content::ChildProcessData data =
- *content::Details<content::ChildProcessData>(details).ptr();
- switch (type) {
- case content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED:
- Add(data);
- break;
- case content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED:
- Remove(data);
- break;
- default:
- NOTREACHED() << "Unexpected notification.";
- return;
- }
+ BrowserChildProcessObserver::Remove(this);
}
-void TaskManagerChildProcessResourceProvider::Add(
- const content::ChildProcessData& child_process_data) {
- if (!updating_)
- return;
+void TaskManagerChildProcessResourceProvider::BrowserChildProcessHostConnected(
+ const content::ChildProcessData& data) {
+ DCHECK(updating_);
+
// Workers are handled by TaskManagerWorkerResourceProvider.
- if (child_process_data.type == content::PROCESS_TYPE_WORKER)
+ if (data.type == content::PROCESS_TYPE_WORKER)
return;
- if (resources_.count(child_process_data.handle)) {
+ if (resources_.count(data.handle)) {
// The case may happen that we have added a child_process_info as part of
// the iteration performed during StartUpdating() call but the notification
// that it has connected was not fired yet. So when the notification
// happens, we already know about this plugin and just ignore it.
return;
}
- AddToTaskManager(child_process_data);
+ AddToTaskManager(data);
}
-void TaskManagerChildProcessResourceProvider::Remove(
- const content::ChildProcessData& child_process_data) {
- if (!updating_)
- return;
- if (child_process_data.type == content::PROCESS_TYPE_WORKER)
+void TaskManagerChildProcessResourceProvider::
+BrowserChildProcessHostDisconnected(const content::ChildProcessData& data) {
+ DCHECK(updating_);
+
+ if (data.type == content::PROCESS_TYPE_WORKER)
return;
- ChildProcessMap::iterator iter = resources_.find(child_process_data.handle);
+ ChildProcessMap::iterator iter = resources_.find(data.handle);
if (iter == resources_.end()) {
// ChildProcessData disconnection notifications are asynchronous, so we
// might be notified for a plugin we don't know anything about (if it was
@@ -1330,6 +1300,8 @@ void TaskManagerChildProcessResourceProvider::RetrieveChildProcessData() {
// Only add processes which are already started, since we need their handle.
if (iter.GetData().handle == base::kNullProcessHandle)
continue;
+ if (iter.GetData().type == content::PROCESS_TYPE_WORKER)
+ continue;
child_processes.push_back(iter.GetData());
}
// Now notify the UI thread that we have retrieved information about child
@@ -1345,7 +1317,7 @@ void TaskManagerChildProcessResourceProvider::RetrieveChildProcessData() {
void TaskManagerChildProcessResourceProvider::ChildProcessDataRetreived(
const std::vector<content::ChildProcessData>& child_processes) {
for (size_t i = 0; i < child_processes.size(); ++i)
- Add(child_processes[i]);
+ AddToTaskManager(child_processes[i]);
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_TASK_MANAGER_CHILD_PROCESSES_DATA_READY,

Powered by Google App Engine
This is Rietveld 408576698