15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef EXTENSIONS_BROWSER_EXTENSION_SYSTEM_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define EXTENSIONS_BROWSER_EXTENSION_SYSTEM_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/ref_counted.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ExtensionService; 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS) 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace chromeos { 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class DeviceLocalAccountManagementPolicyProvider; 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content { 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BrowserContext; 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions { 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Blacklist; 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class ContentVerifier; 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DeclarativeUserScriptMaster; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ErrorConsole; 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class EventRouter; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Extension; 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ExtensionSet; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class InfoMap; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class InstallVerifier; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class LazyBackgroundTaskQueue; 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ManagementPolicy; 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class OneShotEvent; 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ProcessManager; 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class QuotaService; 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RuntimeData; 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SharedUserScriptMaster; 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class StateStore; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WarningService; 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// ExtensionSystem manages the lifetime of many of the services used by the 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// extensions and apps system, and it handles startup and shutdown as needed. 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Eventually, we'd like to make more of these services into KeyedServices in 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// their own right. 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ExtensionSystem : public KeyedService { 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionSystem(); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~ExtensionSystem(); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the instance for the given browser context, or NULL if none. 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static ExtensionSystem* Get(content::BrowserContext* context); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Initializes extensions machinery. 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Component extensions are always enabled, external and user extensions are 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // controlled by |extensions_enabled|. 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void InitForRegularProfile(bool extensions_enabled) = 0; 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The ExtensionService is created at startup. 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ExtensionService* extension_service() = 0; 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Per-extension data that can change during the life of the process but 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // does not persist across restarts. Lives on UI thread. Created at startup. 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual RuntimeData* runtime_data() = 0; 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The class controlling whether users are permitted to perform certain 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // actions on extensions (install, uninstall, disable, etc.). 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The ManagementPolicy is created at startup. 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ManagementPolicy* management_policy() = 0; 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // The SharedUserScriptMaster is created at startup. 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual SharedUserScriptMaster* shared_user_script_master() = 0; 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The ProcessManager is created at startup. 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ProcessManager* process_manager() = 0; 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The StateStore is created at startup. 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual StateStore* state_store() = 0; 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The rules store is created at startup. 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual StateStore* rules_store() = 0; 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the IO-thread-accessible extension data. 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual InfoMap* info_map() = 0; 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The LazyBackgroundTaskQueue is created at startup. 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual LazyBackgroundTaskQueue* lazy_background_task_queue() = 0; 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The EventRouter is created at startup. 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual EventRouter* event_router() = 0; 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The WarningService is created at startup. 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual WarningService* warning_service() = 0; 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blacklist is created at startup. 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual Blacklist* blacklist() = 0; 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The ErrorConsole is created at startup. 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ErrorConsole* error_console() = 0; 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The InstallVerifier is created at startup. 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual InstallVerifier* install_verifier() = 0; 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the QuotaService that limits calls to certain extension functions. 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Lives on the UI thread. Created at startup. 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual QuotaService* quota_service() = 0; 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Called by the ExtensionService that lives in this system. Gives the 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // info map a chance to react to the load event before the EXTENSION_LOADED 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // notification has fired. The purpose for handling this event first is to 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // avoid race conditions by making sure URLRequestContexts learn about new 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // extensions before anything else needs them to know. 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void RegisterExtensionWithRequestContexts( 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const Extension* extension) {} 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Called by the ExtensionService that lives in this system. Lets the 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // info map clean up its RequestContexts once all the listeners to the 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // EXTENSION_UNLOADED notification have finished running. 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void UnregisterExtensionWithRequestContexts( 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& extension_id, 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UnloadedExtensionInfo::Reason reason) {} 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Signaled when the extension system has completed its startup tasks. 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual const OneShotEvent& ready() const = 0; 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Returns the content verifier, if any. 132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ContentVerifier* content_verifier() = 0; 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Get a set of extensions that depend on the given extension. 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(elijahtaylor): Move SharedModuleService out of chrome/browser 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // so it can be retrieved from ExtensionSystem directly. 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual scoped_ptr<ExtensionSet> GetDependentExtensions( 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* extension) = 0; 1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Get the user script master for declarative scripts, if any. 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual DeclarativeUserScriptMaster* 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetDeclarativeUserScriptMasterByExtension( 1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const ExtensionId& extension_id) = 0; 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace extensions 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // EXTENSIONS_BROWSER_EXTENSION_SYSTEM_H_ 149