diff options
author | creis@google.com <creis@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-13 21:19:31 +0000 |
---|---|---|
committer | creis@google.com <creis@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-13 21:19:31 +0000 |
commit | 75e16bcd60ff7e60a375bbe0efd27f8ac919a756 (patch) | |
tree | 6a3aca93dc9e64ad58f1cef258bf3e9dc896af92 /chrome/browser/extensions/extension_processes_api.h | |
parent | eefb9b4e064b484a1490abbaddeb92dffbc5e1ff (diff) | |
download | chromium_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.h | 60 |
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__ |