1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_IMPL_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_IMPL_H_
8 #include "extensions/browser/extension_system.h"
9 #include "extensions/common/one_shot_event.h"
13 namespace extensions
{
15 class ExtensionSystemSharedFactory
;
16 class NavigationObserver
;
17 class StateStoreNotificationObserver
;
19 // The ExtensionSystem for ProfileImpl and OffTheRecordProfileImpl.
20 // Implementation details: non-shared services are owned by
21 // ExtensionSystemImpl, a KeyedService with separate incognito
22 // instances. A private Shared class (also a KeyedService,
23 // but with a shared instance for incognito) keeps the common services.
24 class ExtensionSystemImpl
: public ExtensionSystem
{
26 explicit ExtensionSystemImpl(Profile
* profile
);
27 ~ExtensionSystemImpl() override
;
29 // KeyedService implementation.
30 void Shutdown() override
;
32 void InitForRegularProfile(bool extensions_enabled
) override
;
34 ExtensionService
* extension_service() override
; // shared
35 RuntimeData
* runtime_data() override
; // shared
36 ManagementPolicy
* management_policy() override
; // shared
37 ServiceWorkerManager
* service_worker_manager() override
; // shared
38 SharedUserScriptMaster
* shared_user_script_master() override
; // shared
39 StateStore
* state_store() override
; // shared
40 StateStore
* rules_store() override
; // shared
41 InfoMap
* info_map() override
; // shared
42 QuotaService
* quota_service() override
; // shared
43 AppSorting
* app_sorting() override
; // shared
45 void RegisterExtensionWithRequestContexts(
46 const Extension
* extension
,
47 const base::Closure
& callback
) override
;
49 void UnregisterExtensionWithRequestContexts(
50 const std::string
& extension_id
,
51 const UnloadedExtensionInfo::Reason reason
) override
;
53 const OneShotEvent
& ready() const override
;
54 ContentVerifier
* content_verifier() override
; // shared
55 scoped_ptr
<ExtensionSet
> GetDependentExtensions(
56 const Extension
* extension
) override
;
59 friend class ExtensionSystemSharedFactory
;
61 // Owns the Extension-related systems that have a single instance
62 // shared between normal and incognito profiles.
63 class Shared
: public KeyedService
{
65 explicit Shared(Profile
* profile
);
68 // Initialization takes place in phases.
69 virtual void InitPrefs();
70 // This must not be called until all the providers have been created.
71 void RegisterManagementPolicyProviders();
72 void Init(bool extensions_enabled
);
74 // KeyedService implementation.
75 void Shutdown() override
;
77 StateStore
* state_store();
78 StateStore
* rules_store();
79 ExtensionService
* extension_service();
80 RuntimeData
* runtime_data();
81 ManagementPolicy
* management_policy();
82 ServiceWorkerManager
* service_worker_manager();
83 SharedUserScriptMaster
* shared_user_script_master();
85 QuotaService
* quota_service();
86 AppSorting
* app_sorting();
87 const OneShotEvent
& ready() const { return ready_
; }
88 ContentVerifier
* content_verifier();
93 // The services that are shared between normal and incognito profiles.
95 scoped_ptr
<StateStore
> state_store_
;
96 scoped_ptr
<StateStoreNotificationObserver
>
97 state_store_notification_observer_
;
98 scoped_ptr
<StateStore
> rules_store_
;
99 scoped_ptr
<NavigationObserver
> navigation_observer_
;
100 scoped_ptr
<ServiceWorkerManager
> service_worker_manager_
;
101 // Shared memory region manager for scripts statically declared in extension
102 // manifests. This region is shared between all extensions.
103 scoped_ptr
<SharedUserScriptMaster
> shared_user_script_master_
;
104 scoped_ptr
<RuntimeData
> runtime_data_
;
105 // ExtensionService depends on StateStore, Blacklist and RuntimeData.
106 scoped_ptr
<ExtensionService
> extension_service_
;
107 scoped_ptr
<ManagementPolicy
> management_policy_
;
108 // extension_info_map_ needs to outlive process_manager_.
109 scoped_refptr
<InfoMap
> extension_info_map_
;
110 scoped_ptr
<QuotaService
> quota_service_
;
111 scoped_ptr
<AppSorting
> app_sorting_
;
113 // For verifying the contents of extensions read from disk.
114 scoped_refptr
<ContentVerifier
> content_verifier_
;
116 #if defined(OS_CHROMEOS)
117 scoped_ptr
<chromeos::DeviceLocalAccountManagementPolicyProvider
>
118 device_local_account_management_policy_provider_
;
128 DISALLOW_COPY_AND_ASSIGN(ExtensionSystemImpl
);
131 } // namespace extensions
133 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_IMPL_H_