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