summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_processes_api.h
diff options
context:
space:
mode:
authorcreis@google.com <creis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-13 21:19:31 +0000
committercreis@google.com <creis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-13 21:19:31 +0000
commit75e16bcd60ff7e60a375bbe0efd27f8ac919a756 (patch)
tree6a3aca93dc9e64ad58f1cef258bf3e9dc896af92 /chrome/browser/extensions/extension_processes_api.h
parenteefb9b4e064b484a1490abbaddeb92dffbc5e1ff (diff)
downloadchromium_src-75e16bcd60ff7e60a375bbe0efd27f8ac919a756.zip
chromium_src-75e16bcd60ff7e60a375bbe0efd27f8ac919a756.tar.gz
chromium_src-75e16bcd60ff7e60a375bbe0efd27f8ac919a756.tar.bz2
Expands the chrome.experimental.processes extension API.
Adds an onUpdated event that reports process metrics from the TaskManager, and modifies the TaskManager to support multiple independent observers. BUG=32302 TEST=ExtensionApiTest.Processes browsertest TEST=process_monitor sample extension Review URL: http://codereview.chromium.org/3597016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62458 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_processes_api.h')
-rw-r--r--chrome/browser/extensions/extension_processes_api.h60
1 files changed, 59 insertions, 1 deletions
diff --git a/chrome/browser/extensions/extension_processes_api.h b/chrome/browser/extensions/extension_processes_api.h
index b58cb56..497e0f6 100644
--- a/chrome/browser/extensions/extension_processes_api.h
+++ b/chrome/browser/extensions/extension_processes_api.h
@@ -6,14 +6,72 @@
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_PROCESSES_API_H__
#pragma once
+#include <set>
+#include <string>
+
#include "chrome/browser/extensions/extension_function.h"
+#include "chrome/browser/task_manager/task_manager.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
+
+// Observes the Task Manager and routes the notifications as events to the
+// extension system.
+class ExtensionProcessesEventRouter : public TaskManagerModelObserver {
+ public:
+ // Single instance of the event router.
+ static ExtensionProcessesEventRouter* GetInstance();
+
+ // Safe to call multiple times.
+ void ObserveProfile(Profile* profile);
+
+ // Called when an extension process wants to listen to process events.
+ void ListenerAdded();
+
+ // Called when an extension process with a listener exits or removes it.
+ void ListenerRemoved();
+
+ private:
+ friend struct DefaultSingletonTraits<ExtensionProcessesEventRouter>;
+
+ ExtensionProcessesEventRouter();
+ virtual ~ExtensionProcessesEventRouter();
+
+ // TaskManagerModelObserver::OnModelChanged.
+ virtual void OnModelChanged() {}
+
+ // TaskManagerModelObserver::OnItemsChanged.
+ virtual void OnItemsChanged(int start, int length);
+
+ // TaskManagerModelObserver::OnItemsAdded.
+ virtual void OnItemsAdded(int start, int length) {}
+
+ // TaskManagerModelObserver::OnItemsRemoved.
+ virtual void OnItemsRemoved(int start, int length) {}
+
+ void DispatchEvent(Profile* profile,
+ const char* event_name,
+ const std::string& json_args);
+
+ // Used for tracking registrations to process related notifications.
+ NotificationRegistrar registrar_;
+
+ // Registered profiles.
+ typedef std::set<Profile*> ProfileSet;
+ ProfileSet profiles_;
+
+ // TaskManager to observe for updates.
+ TaskManagerModel* model_;
+
+ DISALLOW_COPY_AND_ASSIGN(ExtensionProcessesEventRouter);
+};
+
// This extension function returns the Process object for the renderer process
// currently in use by the specified Tab.
class GetProcessForTabFunction : public SyncExtensionFunction {
virtual ~GetProcessForTabFunction() {}
virtual bool RunImpl();
- DECLARE_EXTENSION_FUNCTION_NAME("experimental.processes.getProcessForTab")
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.processes.getProcessIdForTab")
};
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PROCESSES_API_H__