| Index: chrome/browser/extensions/extension_system.h
|
| diff --git a/chrome/browser/extensions/extension_system.h b/chrome/browser/extensions/extension_system.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3ed50028e19f6d21577371d6ed8678d61097ec06
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/extension_system.h
|
| @@ -0,0 +1,174 @@
|
| +// Copyright (c) 2012 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_SYSTEM_H_
|
| +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_H_
|
| +#pragma once
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "chrome/browser/profiles/profile_keyed_service.h"
|
| +#include "chrome/common/extensions/extension_constants.h"
|
| +
|
| +class Extension;
|
| +class ExtensionDevToolsManager;
|
| +class ExtensionEventRouter;
|
| +class ExtensionInfoMap;
|
| +class ExtensionMessageService;
|
| +class ExtensionNavigationObserver;
|
| +class ExtensionPrefs;
|
| +class ExtensionPrefValueMap;
|
| +class ExtensionProcessManager;
|
| +class ExtensionService;
|
| +class LazyBackgroundTaskQueue;
|
| +class Profile;
|
| +class UserScriptMaster;
|
| +
|
| +// The ExtensionSystem manages the creation and destruction of services
|
| +// related to extensions. Most objects are shared between normal
|
| +// and incognito Profiles, except as called out in comments.
|
| +// This interface supports using TestExtensionSystem for TestingProfiles
|
| +// that don't want all of the extensions baggage in their tests.
|
| +class ExtensionSystem : public ProfileKeyedService {
|
| + public:
|
| + ExtensionSystem();
|
| + virtual ~ExtensionSystem();
|
| +
|
| + // ProfileKeyedService implementation.
|
| + virtual void Shutdown() OVERRIDE {}
|
| +
|
| + // Initializes extensions machinery.
|
| + // Component extensions are always enabled, external and user extensions
|
| + // are controlled by |extensions_enabled|.
|
| + virtual void Init(bool extensions_enabled) = 0;
|
| +
|
| + // The ExtensionService is created at startup.
|
| + virtual ExtensionService* extension_service() = 0;
|
| +
|
| + // The ExtensionDevToolsManager is created at startup.
|
| + virtual ExtensionDevToolsManager* devtools_manager() = 0;
|
| +
|
| + // The UserScriptMaster is created at startup.
|
| + virtual UserScriptMaster* user_script_master() = 0;
|
| +
|
| + // The ExtensionProcessManager is created at startup.
|
| + virtual ExtensionProcessManager* process_manager() = 0;
|
| +
|
| + // Returns the IO-thread-accessible extension data.
|
| + virtual ExtensionInfoMap* info_map() = 0;
|
| +
|
| + // The LazyBackgroundTaskQueue is created at startup.
|
| + virtual LazyBackgroundTaskQueue* lazy_background_task_queue() = 0;
|
| +
|
| + // The ExtensionMessageService is created at startup.
|
| + virtual ExtensionMessageService* message_service() = 0;
|
| +
|
| + // The ExtensionEventRouter is created at startup.
|
| + virtual ExtensionEventRouter* event_router() = 0;
|
| +
|
| + // Called by the ExtensionService that lives in this system. Gives the
|
| + // info map a chance to react to the load event before the EXTENSION_LOADED
|
| + // notification has fired. The purpose for handling this event first is to
|
| + // avoid race conditions by making sure URLRequestContexts learn about new
|
| + // extensions before anything else needs them to know.
|
| + virtual void RegisterExtensionWithRequestContexts(
|
| + const Extension* extension) {}
|
| +
|
| + // Called by the ExtensionService that lives in this system. Lets the
|
| + // info map clean up its RequestContexts once all the listeners to the
|
| + // EXTENSION_UNLOADED notification have finished running.
|
| + virtual void UnregisterExtensionWithRequestContexts(
|
| + const std::string& extension_id,
|
| + const extension_misc::UnloadedExtensionReason reason) {}
|
| +};
|
| +
|
| +// The ExtensionSystem for ProfileImpl and OffTheRecordProfileImpl.
|
| +// Implementation details: non-shared services are owned by
|
| +// ExtensionSystemImpl, a ProfileKeyedService with separate incognito
|
| +// instances. A private Shared class (also a ProfileKeyedService,
|
| +// but with a shared instance for incognito) keeps the common services.
|
| +class ExtensionSystemImpl : public ExtensionSystem {
|
| + public:
|
| + explicit ExtensionSystemImpl(Profile* profile);
|
| + virtual ~ExtensionSystemImpl();
|
| +
|
| + // ProfileKeyedService implementation.
|
| + virtual void Shutdown() OVERRIDE;
|
| +
|
| + virtual void Init(bool extensions_enabled) OVERRIDE;
|
| +
|
| + virtual ExtensionService* extension_service() OVERRIDE; // shared
|
| + virtual UserScriptMaster* user_script_master() OVERRIDE; // shared
|
| + virtual ExtensionDevToolsManager* devtools_manager() OVERRIDE;
|
| + virtual ExtensionProcessManager* process_manager() OVERRIDE;
|
| + virtual LazyBackgroundTaskQueue* lazy_background_task_queue()
|
| + OVERRIDE; // shared
|
| + virtual ExtensionInfoMap* info_map() OVERRIDE; // shared
|
| + virtual ExtensionMessageService* message_service() OVERRIDE; // shared
|
| + virtual ExtensionEventRouter* event_router() OVERRIDE; // shared
|
| +
|
| + virtual void RegisterExtensionWithRequestContexts(
|
| + const Extension* extension) OVERRIDE;
|
| +
|
| + virtual void UnregisterExtensionWithRequestContexts(
|
| + const std::string& extension_id,
|
| + const extension_misc::UnloadedExtensionReason reason) OVERRIDE;
|
| +
|
| + private:
|
| + friend class ExtensionSystemSharedFactory;
|
| +
|
| + // Owns the Extension-related systems that have a single instance
|
| + // shared between normal and incognito profiles.
|
| + class Shared : public ProfileKeyedService {
|
| + public:
|
| + explicit Shared(Profile* profile);
|
| + virtual ~Shared();
|
| +
|
| + // Initialization takes place in phases.
|
| + virtual void InitPrefs();
|
| + void InitInfoMap();
|
| + void Init(bool extensions_enabled);
|
| +
|
| + ExtensionService* extension_service();
|
| + UserScriptMaster* user_script_master();
|
| + ExtensionInfoMap* info_map();
|
| + LazyBackgroundTaskQueue* lazy_background_task_queue();
|
| + ExtensionMessageService* message_service();
|
| + ExtensionEventRouter* event_router();
|
| +
|
| + private:
|
| + Profile* profile_;
|
| +
|
| + // The services that are shared between normal and incognito profiles.
|
| +
|
| + // Keep extension_prefs_ on top of extension_service_ because the latter
|
| + // maintains a pointer to the first and shall be destructed first.
|
| + scoped_ptr<ExtensionPrefs> extension_prefs_;
|
| + scoped_ptr<ExtensionService> extension_service_;
|
| + scoped_refptr<UserScriptMaster> user_script_master_;
|
| + // extension_info_map_ needs to outlive extension_process_manager_.
|
| + scoped_refptr<ExtensionInfoMap> extension_info_map_;
|
| + // This is a dependency of ExtensionMessageService and ExtensionEventRouter.
|
| + scoped_ptr<LazyBackgroundTaskQueue> lazy_background_task_queue_;
|
| + scoped_ptr<ExtensionMessageService> extension_message_service_;
|
| + scoped_ptr<ExtensionEventRouter> extension_event_router_;
|
| + scoped_ptr<ExtensionNavigationObserver> extension_navigation_observer_;
|
| + };
|
| +
|
| + Profile* profile_;
|
| +
|
| + Shared* shared_;
|
| +
|
| + // The services that have their own instances in incognito.
|
| + scoped_refptr<ExtensionDevToolsManager> extension_devtools_manager_;
|
| + // |extension_process_manager_| must be destroyed before the Profile's
|
| + // |io_data_|. While |extension_process_manager_| still lives, we handle
|
| + // incoming resource requests from extension processes and those require
|
| + // access to the ResourceContext owned by |io_data_|.
|
| + scoped_ptr<ExtensionProcessManager> extension_process_manager_;
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_H_
|
|
|