Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Side by Side Diff: chrome/browser/extensions/extension_system.cc

Issue 10382149: Refactor the various ways to control what users can do to extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_system.h" 5 #include "chrome/browser/extensions/extension_system.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/string_tokenizer.h" 10 #include "base/string_tokenizer.h"
11 #include "chrome/browser/browser_process.h" 11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/extensions/component_loader.h" 12 #include "chrome/browser/extensions/component_loader.h"
13 #include "chrome/browser/content_settings/cookie_settings.h" 13 #include "chrome/browser/content_settings/cookie_settings.h"
14 #include "chrome/browser/extensions/api/alarms/alarm_manager.h" 14 #include "chrome/browser/extensions/api/alarms/alarm_manager.h"
15 #include "chrome/browser/extensions/api/declarative/rules_registry_service.h" 15 #include "chrome/browser/extensions/api/declarative/rules_registry_service.h"
16 #include "chrome/browser/extensions/extension_devtools_manager.h" 16 #include "chrome/browser/extensions/extension_devtools_manager.h"
17 #include "chrome/browser/extensions/extension_error_reporter.h" 17 #include "chrome/browser/extensions/extension_error_reporter.h"
18 #include "chrome/browser/extensions/extension_event_router.h" 18 #include "chrome/browser/extensions/extension_event_router.h"
19 #include "chrome/browser/extensions/extension_info_map.h" 19 #include "chrome/browser/extensions/extension_info_map.h"
20 #include "chrome/browser/extensions/extension_message_service.h" 20 #include "chrome/browser/extensions/extension_message_service.h"
21 #include "chrome/browser/extensions/extension_navigation_observer.h" 21 #include "chrome/browser/extensions/extension_navigation_observer.h"
22 #include "chrome/browser/extensions/extension_pref_store.h" 22 #include "chrome/browser/extensions/extension_pref_store.h"
23 #include "chrome/browser/extensions/extension_pref_value_map.h" 23 #include "chrome/browser/extensions/extension_pref_value_map.h"
24 #include "chrome/browser/extensions/extension_pref_value_map_factory.h" 24 #include "chrome/browser/extensions/extension_pref_value_map_factory.h"
25 #include "chrome/browser/extensions/extension_process_manager.h" 25 #include "chrome/browser/extensions/extension_process_manager.h"
26 #include "chrome/browser/extensions/extension_service.h" 26 #include "chrome/browser/extensions/extension_service.h"
27 #include "chrome/browser/extensions/extension_system_factory.h" 27 #include "chrome/browser/extensions/extension_system_factory.h"
28 #include "chrome/browser/extensions/lazy_background_task_queue.h" 28 #include "chrome/browser/extensions/lazy_background_task_queue.h"
29 #include "chrome/browser/extensions/management_policy.h"
29 #include "chrome/browser/extensions/unpacked_installer.h" 30 #include "chrome/browser/extensions/unpacked_installer.h"
30 #include "chrome/browser/extensions/user_script_master.h" 31 #include "chrome/browser/extensions/user_script_master.h"
31 #include "chrome/browser/prefs/pref_service.h" 32 #include "chrome/browser/prefs/pref_service.h"
32 #include "chrome/browser/profiles/profile.h" 33 #include "chrome/browser/profiles/profile.h"
33 #include "chrome/browser/profiles/profile_manager.h" 34 #include "chrome/browser/profiles/profile_manager.h"
34 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" 35 #include "chrome/browser/ui/webui/chrome_url_data_manager.h"
35 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" 36 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
36 #include "chrome/common/chrome_switches.h" 37 #include "chrome/common/chrome_switches.h"
37 #include "chrome/common/extensions/extension.h" 38 #include "chrome/common/extensions/extension.h"
38 #include "chrome/common/extensions/feature.h" 39 #include "chrome/common/extensions/feature.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 bool extensions_disabled = 78 bool extensions_disabled =
78 profile_->GetPrefs()->GetBoolean(prefs::kDisableExtensions) || 79 profile_->GetPrefs()->GetBoolean(prefs::kDisableExtensions) ||
79 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableExtensions); 80 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableExtensions);
80 extension_prefs_.reset(new ExtensionPrefs( 81 extension_prefs_.reset(new ExtensionPrefs(
81 profile_->GetPrefs(), 82 profile_->GetPrefs(),
82 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName), 83 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName),
83 ExtensionPrefValueMapFactory::GetForProfile(profile_))); 84 ExtensionPrefValueMapFactory::GetForProfile(profile_)));
84 extension_prefs_->Init(extensions_disabled); 85 extension_prefs_->Init(extensions_disabled);
85 } 86 }
86 87
88 void ExtensionSystemImpl::Shared::RegisterManagementPolicyProviders() {
89 DCHECK(extension_prefs_.get());
90 management_policy_->RegisterProvider(extension_prefs_.get());
91 }
92
87 void ExtensionSystemImpl::Shared::InitInfoMap() { 93 void ExtensionSystemImpl::Shared::InitInfoMap() {
88 // The ExtensionInfoMap needs to be created before the 94 // The ExtensionInfoMap needs to be created before the
89 // ExtensionProcessManager. 95 // ExtensionProcessManager.
90 extension_info_map_ = new ExtensionInfoMap(); 96 extension_info_map_ = new ExtensionInfoMap();
91 } 97 }
92 98
93 void ExtensionSystemImpl::Shared::Init(bool extensions_enabled) { 99 void ExtensionSystemImpl::Shared::Init(bool extensions_enabled) {
94 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 100 const CommandLine* command_line = CommandLine::ForCurrentProcess();
95 101
96 lazy_background_task_queue_.reset(new extensions::LazyBackgroundTaskQueue( 102 lazy_background_task_queue_.reset(new extensions::LazyBackgroundTaskQueue(
(...skipping 16 matching lines...) Expand all
113 autoupdate_enabled = !command_line->HasSwitch(switches::kGuestSession); 119 autoupdate_enabled = !command_line->HasSwitch(switches::kGuestSession);
114 #endif 120 #endif
115 extension_service_.reset(new ExtensionService( 121 extension_service_.reset(new ExtensionService(
116 profile_, 122 profile_,
117 CommandLine::ForCurrentProcess(), 123 CommandLine::ForCurrentProcess(),
118 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName), 124 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName),
119 extension_prefs_.get(), 125 extension_prefs_.get(),
120 autoupdate_enabled, 126 autoupdate_enabled,
121 extensions_enabled)); 127 extensions_enabled));
122 128
129 // The ManagementPolicy providers msut be registered before the
130 // ExtensionService tries to load any extensions.
131 management_policy_.reset(new extensions::ManagementPolicy);
132 RegisterManagementPolicyProviders();
133
123 extension_service_->component_loader()->AddDefaultComponentExtensions(); 134 extension_service_->component_loader()->AddDefaultComponentExtensions();
124 if (command_line->HasSwitch(switches::kLoadComponentExtension)) { 135 if (command_line->HasSwitch(switches::kLoadComponentExtension)) {
125 CommandLine::StringType path_list = command_line->GetSwitchValueNative( 136 CommandLine::StringType path_list = command_line->GetSwitchValueNative(
126 switches::kLoadComponentExtension); 137 switches::kLoadComponentExtension);
127 StringTokenizerT<CommandLine::StringType, 138 StringTokenizerT<CommandLine::StringType,
128 CommandLine::StringType::const_iterator> t(path_list, 139 CommandLine::StringType::const_iterator> t(path_list,
129 FILE_PATH_LITERAL(",")); 140 FILE_PATH_LITERAL(","));
130 while (t.GetNext()) { 141 while (t.GetNext()) {
131 // Load the component extension manifest synchronously. 142 // Load the component extension manifest synchronously.
132 // Blocking the UI thread is acceptable here since 143 // Blocking the UI thread is acceptable here since
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 } 193 }
183 194
184 rules_registry_service_.reset(new extensions::RulesRegistryService(profile_)); 195 rules_registry_service_.reset(new extensions::RulesRegistryService(profile_));
185 rules_registry_service_->RegisterDefaultRulesRegistries(); 196 rules_registry_service_->RegisterDefaultRulesRegistries();
186 } 197 }
187 198
188 ExtensionService* ExtensionSystemImpl::Shared::extension_service() { 199 ExtensionService* ExtensionSystemImpl::Shared::extension_service() {
189 return extension_service_.get(); 200 return extension_service_.get();
190 } 201 }
191 202
203 extensions::ManagementPolicy* ExtensionSystemImpl::Shared::management_policy() {
204 return management_policy_.get();
205 }
206
192 UserScriptMaster* ExtensionSystemImpl::Shared::user_script_master() { 207 UserScriptMaster* ExtensionSystemImpl::Shared::user_script_master() {
193 return user_script_master_.get(); 208 return user_script_master_.get();
194 } 209 }
195 210
196 ExtensionInfoMap* ExtensionSystemImpl::Shared::info_map() { 211 ExtensionInfoMap* ExtensionSystemImpl::Shared::info_map() {
197 return extension_info_map_.get(); 212 return extension_info_map_.get();
198 } 213 }
199 214
200 extensions::LazyBackgroundTaskQueue* 215 extensions::LazyBackgroundTaskQueue*
201 ExtensionSystemImpl::Shared::lazy_background_task_queue() { 216 ExtensionSystemImpl::Shared::lazy_background_task_queue() {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 extension_process_manager_.reset(ExtensionProcessManager::Create(profile_)); 269 extension_process_manager_.reset(ExtensionProcessManager::Create(profile_));
255 alarm_manager_.reset(new extensions::AlarmManager(profile_)); 270 alarm_manager_.reset(new extensions::AlarmManager(profile_));
256 271
257 shared_->Init(extensions_enabled); 272 shared_->Init(extensions_enabled);
258 } 273 }
259 274
260 ExtensionService* ExtensionSystemImpl::extension_service() { 275 ExtensionService* ExtensionSystemImpl::extension_service() {
261 return shared_->extension_service(); 276 return shared_->extension_service();
262 } 277 }
263 278
279 extensions::ManagementPolicy* ExtensionSystemImpl::management_policy() {
280 return shared_->management_policy();
281 }
282
264 UserScriptMaster* ExtensionSystemImpl::user_script_master() { 283 UserScriptMaster* ExtensionSystemImpl::user_script_master() {
265 return shared_->user_script_master(); 284 return shared_->user_script_master();
266 } 285 }
267 286
268 ExtensionDevToolsManager* ExtensionSystemImpl::devtools_manager() { 287 ExtensionDevToolsManager* ExtensionSystemImpl::devtools_manager() {
269 // TODO(mpcomplete): in incognito, figure out whether we should 288 // TODO(mpcomplete): in incognito, figure out whether we should
270 // return the original profile's version. 289 // return the original profile's version.
271 return extension_devtools_manager_.get(); 290 return extension_devtools_manager_.get();
272 } 291 }
273 292
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 } 337 }
319 338
320 void ExtensionSystemImpl::UnregisterExtensionWithRequestContexts( 339 void ExtensionSystemImpl::UnregisterExtensionWithRequestContexts(
321 const std::string& extension_id, 340 const std::string& extension_id,
322 const extension_misc::UnloadedExtensionReason reason) { 341 const extension_misc::UnloadedExtensionReason reason) {
323 BrowserThread::PostTask( 342 BrowserThread::PostTask(
324 BrowserThread::IO, FROM_HERE, 343 BrowserThread::IO, FROM_HERE,
325 base::Bind(&ExtensionInfoMap::RemoveExtension, info_map(), 344 base::Bind(&ExtensionInfoMap::RemoveExtension, info_map(),
326 extension_id, reason)); 345 extension_id, reason));
327 } 346 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_system.h ('k') | chrome/browser/extensions/installed_loader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698