// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_DEVTOOLS_MANAGER_H_ #define CHROME_BROWSER_EXTENSIONS_EXTENSION_DEVTOOLS_MANAGER_H_ #pragma once #include <map> #include <set> #include <string> #include "base/memory/linked_ptr.h" #include "base/memory/ref_counted.h" class ExtensionDevToolsBridge; class MessageLoop; class Profile; // This class manages the lifetimes of ExtensionDevToolsBridge objects. // The manager is owned by the Profile. // // The lifetime of an ExtensionDevToolsBridge object is determined by: // * the existence of registered event handlers for the bridge's tab // * the lifetime of the inspected tab // // The manager is alerted whenever an event listener is added or removed and // keeps track of the set of renderers with event listeners registered for each // tab. A new bridge object is created for a tab when the first event listener // is registered on that tab. A bridge object is destroyed when all event // listeners are removed, the inspected tab closes, or when the manager itself // is destroyed. class ExtensionDevToolsManager : public base::RefCountedThreadSafe<ExtensionDevToolsManager> { public: // UI thread only: explicit ExtensionDevToolsManager(Profile* profile); void AddEventListener(const std::string& event_name, int render_process_id); void RemoveEventListener(const std::string& event_name, int render_process_id); void BridgeClosingForTab(int tab_id); private: friend class base::RefCountedThreadSafe<ExtensionDevToolsManager>; ~ExtensionDevToolsManager(); // Map of tab IDs to the ExtensionDevToolsBridge connected to the tab std::map<int, linked_ptr<ExtensionDevToolsBridge> > tab_id_to_bridge_; // Map of tab IDs to the set of render_process_ids that have registered // event handlers for the tab. std::map<int, std::set<int> > tab_id_to_render_process_ids_; Profile* profile_; MessageLoop* ui_loop_; DISALLOW_COPY_AND_ASSIGN(ExtensionDevToolsManager); }; #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_DEVTOOLS_MANAGER_H_