1010#include " base/files/file_path.h"
1111#include " base/path_service.h"
1212#include " base/strings/string_util.h"
13+ #include " base/task/post_task.h"
1314#include " base/threading/sequenced_task_runner_handle.h"
1415#include " base/threading/thread_restrictions.h"
1516#include " chrome/common/chrome_paths.h"
4344#include " shell/common/application_info.h"
4445#include " shell/common/options_switches.h"
4546
47+ #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
48+ #include " components/pref_registry/pref_registry_syncable.h"
49+ #include " components/user_prefs/user_prefs.h"
50+ #include " extensions/browser/browser_context_keyed_service_factories.h"
51+ #include " extensions/browser/extension_pref_store.h"
52+ #include " extensions/browser/extension_pref_value_map_factory.h"
53+ #include " extensions/browser/extension_prefs.h"
54+ #include " extensions/browser/pref_names.h"
55+ #include " extensions/common/extension_api.h"
56+ #include " shell/browser/extensions/atom_browser_context_keyed_service_factories.h"
57+ #include " shell/browser/extensions/atom_extension_system.h"
58+ #include " shell/browser/extensions/atom_extension_system_factory.h"
59+ #include " shell/browser/extensions/atom_extensions_browser_client.h"
60+ #include " shell/common/extensions/atom_extensions_client.h"
61+ #endif // BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
62+
4663using content::BrowserThread;
4764
4865namespace electron {
@@ -91,6 +108,8 @@ AtomBrowserContext::AtomBrowserContext(const std::string& partition,
91108
92109 content::BrowserContext::Initialize (this , path_);
93110
111+ BrowserContextDependencyManager::GetInstance ()->MarkBrowserContextLive (this );
112+
94113 // Initialize Pref Registry.
95114 InitPrefs ();
96115
@@ -102,7 +121,15 @@ AtomBrowserContext::AtomBrowserContext(const std::string& partition,
102121
103122 cookie_change_notifier_ = std::make_unique<CookieChangeNotifier>(this );
104123
105- BrowserContextDependencyManager::GetInstance ()->MarkBrowserContextLive (this );
124+ #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
125+ BrowserContextDependencyManager::GetInstance ()->CreateBrowserContextServices (
126+ this );
127+
128+ extension_system_ = static_cast <extensions::AtomExtensionSystem*>(
129+ extensions::ExtensionSystem::Get (this ));
130+ extension_system_->InitForRegularProfile (true /* extensions_enabled */ );
131+ extension_system_->FinishInitialization ();
132+ #endif
106133}
107134
108135AtomBrowserContext::~AtomBrowserContext () {
@@ -131,7 +158,16 @@ void AtomBrowserContext::InitPrefs() {
131158 pref_store->ReadPrefs (); // Synchronous.
132159 prefs_factory.set_user_prefs (pref_store);
133160
161+ #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
162+ auto * ext_pref_store = new ExtensionPrefStore (
163+ ExtensionPrefValueMapFactory::GetForBrowserContext (this ),
164+ IsOffTheRecord ());
165+ prefs_factory.set_extension_prefs (ext_pref_store);
166+
167+ auto registry = WrapRefCounted (new user_prefs::PrefRegistrySyncable);
168+ #else
134169 auto registry = WrapRefCounted (new PrefRegistrySimple);
170+ #endif
135171
136172 registry->RegisterFilePathPref (prefs::kSelectFileLastDirectory ,
137173 base::FilePath ());
@@ -144,11 +180,17 @@ void AtomBrowserContext::InitPrefs() {
144180 MediaDeviceIDSalt::RegisterPrefs (registry.get ());
145181 ZoomLevelDelegate::RegisterPrefs (registry.get ());
146182 PrefProxyConfigTrackerImpl::RegisterPrefs (registry.get ());
183+ #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
184+ extensions::ExtensionPrefs::RegisterProfilePrefs (registry.get ());
185+ #endif
147186
148187 prefs_ = prefs_factory.Create (
149188 registry.get (),
150189 std::make_unique<PrefStoreDelegate>(weak_factory_.GetWeakPtr ()));
151190 prefs_->UpdateCommandLinePrefStore (new ValueMapPrefStore);
191+ #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
192+ user_prefs::UserPrefs::Set (this , prefs_.get ());
193+ #endif
152194}
153195
154196void AtomBrowserContext::SetUserAgent (const std::string& user_agent) {
@@ -305,6 +347,16 @@ AtomBrowserContext::GetClientHintsControllerDelegate() {
305347 return nullptr ;
306348}
307349
350+ void AtomBrowserContext::SetCorsOriginAccessListForOrigin (
351+ const url::Origin& source_origin,
352+ std::vector<network::mojom::CorsOriginPatternPtr> allow_patterns,
353+ std::vector<network::mojom::CorsOriginPatternPtr> block_patterns,
354+ base::OnceClosure closure) {
355+ // TODO(nornagon): actually set the CORS access lists. This is called from
356+ // extensions/browser/renderer_startup_helper.cc.
357+ base::ThreadTaskRunnerHandle::Get ()->PostTask (FROM_HERE, std::move (closure));
358+ }
359+
308360ResolveProxyHelper* AtomBrowserContext::GetResolveProxyHelper () {
309361 if (!resolve_proxy_helper_) {
310362 resolve_proxy_helper_ = base::MakeRefCounted<ResolveProxyHelper>(this );
0 commit comments