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-19 21:47:11 +0000
committercreis@google.com <creis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-19 21:47:11 +0000
commit8a661f84e6e4ab569de30228b717f0c2b26a1d57 (patch)
tree8e4eed99ddb033b7cdc8489b2264659775f7b0cc /chrome/browser/extensions/extension_processes_api.h
parent293309b27926f9ab2d2567b7e0f2fd04e568a50c (diff)
downloadchromium_src-8a661f84e6e4ab569de30228b717f0c2b26a1d57.zip
chromium_src-8a661f84e6e4ab569de30228b717f0c2b26a1d57.tar.gz
chromium_src-8a661f84e6e4ab569de30228b717f0c2b26a1d57.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/3801008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@63116 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_processes_api.h')
-rw-r--r--chrome/browser/extensions/extension_processes_api.h58
1 files changed, 55 insertions, 3 deletions
diff --git a/chrome/browser/extensions/extension_processes_api.h b/chrome/browser/extensions/extension_processes_api.h
index b58cb56..5eb54a1 100644
--- a/chrome/browser/extensions/extension_processes_api.h
+++ b/chrome/browser/extensions/extension_processes_api.h
@@ -6,14 +6,66 @@
#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 methods.
+ virtual void OnModelChanged() {}
+ virtual void OnItemsChanged(int start, int length);
+ virtual void OnItemsAdded(int start, int length) {}
+ 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() {}
+class GetProcessIdForTabFunction : public SyncExtensionFunction {
+ virtual ~GetProcessIdForTabFunction() {}
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__