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

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, 7 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 DCHECK(extension_service_.get());
92 management_policy_->RegisterProvider(extension_service_.get());
Aaron Boodman 2012/05/22 15:56:11 This circular dependency between ManagementPolicy
Pam (message me for reviews) 2012/05/23 15:00:58 I'm not sure I follow. Moving the ManagementPolicy
93 }
94
87 void ExtensionSystemImpl::Shared::InitInfoMap() { 95 void ExtensionSystemImpl::Shared::InitInfoMap() {
88 // The ExtensionInfoMap needs to be created before the 96 // The ExtensionInfoMap needs to be created before the
89 // ExtensionProcessManager. 97 // ExtensionProcessManager.
90 extension_info_map_ = new ExtensionInfoMap(); 98 extension_info_map_ = new ExtensionInfoMap();
91 } 99 }
92 100
93 void ExtensionSystemImpl::Shared::Init(bool extensions_enabled) { 101 void ExtensionSystemImpl::Shared::Init(bool extensions_enabled) {
94 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 102 const CommandLine* command_line = CommandLine::ForCurrentProcess();
95 103
96 lazy_background_task_queue_.reset(new extensions::LazyBackgroundTaskQueue( 104 lazy_background_task_queue_.reset(new extensions::LazyBackgroundTaskQueue(
(...skipping 16 matching lines...) Expand all
113 autoupdate_enabled = !command_line->HasSwitch(switches::kGuestSession); 121 autoupdate_enabled = !command_line->HasSwitch(switches::kGuestSession);
114 #endif 122 #endif
115 extension_service_.reset(new ExtensionService( 123 extension_service_.reset(new ExtensionService(
116 profile_, 124 profile_,
117 CommandLine::ForCurrentProcess(), 125 CommandLine::ForCurrentProcess(),
118 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName), 126 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName),
119 extension_prefs_.get(), 127 extension_prefs_.get(),
120 autoupdate_enabled, 128 autoupdate_enabled,
121 extensions_enabled)); 129 extensions_enabled));
122 130
131 // The ManagementPolicy must be created and its providers registered before
132 // the ExtensionService tries to load any extensions.
133 management_policy_.reset(new extensions::ManagementPolicy);
Aaron Boodman 2012/05/22 15:56:11 You could just create the management policy in the
Pam (message me for reviews) 2012/05/23 15:00:58 Because we don't care about leaks on shutdown? Or
Aaron Boodman 2012/05/24 08:11:23 I meant that it could be a plain old member. I don
134 RegisterManagementPolicyProviders();
135
123 extension_service_->component_loader()->AddDefaultComponentExtensions(); 136 extension_service_->component_loader()->AddDefaultComponentExtensions();
124 if (command_line->HasSwitch(switches::kLoadComponentExtension)) { 137 if (command_line->HasSwitch(switches::kLoadComponentExtension)) {
125 CommandLine::StringType path_list = command_line->GetSwitchValueNative( 138 CommandLine::StringType path_list = command_line->GetSwitchValueNative(
126 switches::kLoadComponentExtension); 139 switches::kLoadComponentExtension);
127 StringTokenizerT<CommandLine::StringType, 140 StringTokenizerT<CommandLine::StringType,
128 CommandLine::StringType::const_iterator> t(path_list, 141 CommandLine::StringType::const_iterator> t(path_list,
129 FILE_PATH_LITERAL(",")); 142 FILE_PATH_LITERAL(","));
130 while (t.GetNext()) { 143 while (t.GetNext()) {
131 // Load the component extension manifest synchronously. 144 // Load the component extension manifest synchronously.
132 // Blocking the UI thread is acceptable here since 145 // Blocking the UI thread is acceptable here since
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 } 195 }
183 196
184 rules_registry_service_.reset(new extensions::RulesRegistryService(profile_)); 197 rules_registry_service_.reset(new extensions::RulesRegistryService(profile_));
185 rules_registry_service_->RegisterDefaultRulesRegistries(); 198 rules_registry_service_->RegisterDefaultRulesRegistries();
186 } 199 }
187 200
188 ExtensionService* ExtensionSystemImpl::Shared::extension_service() { 201 ExtensionService* ExtensionSystemImpl::Shared::extension_service() {
189 return extension_service_.get(); 202 return extension_service_.get();
190 } 203 }
191 204
205 extensions::ManagementPolicy* ExtensionSystemImpl::Shared::management_policy() {
206 return management_policy_.get();
207 }
208
192 UserScriptMaster* ExtensionSystemImpl::Shared::user_script_master() { 209 UserScriptMaster* ExtensionSystemImpl::Shared::user_script_master() {
193 return user_script_master_.get(); 210 return user_script_master_.get();
194 } 211 }
195 212
196 ExtensionInfoMap* ExtensionSystemImpl::Shared::info_map() { 213 ExtensionInfoMap* ExtensionSystemImpl::Shared::info_map() {
197 return extension_info_map_.get(); 214 return extension_info_map_.get();
198 } 215 }
199 216
200 extensions::LazyBackgroundTaskQueue* 217 extensions::LazyBackgroundTaskQueue*
201 ExtensionSystemImpl::Shared::lazy_background_task_queue() { 218 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_)); 271 extension_process_manager_.reset(ExtensionProcessManager::Create(profile_));
255 alarm_manager_.reset(new extensions::AlarmManager(profile_)); 272 alarm_manager_.reset(new extensions::AlarmManager(profile_));
256 273
257 shared_->Init(extensions_enabled); 274 shared_->Init(extensions_enabled);
258 } 275 }
259 276
260 ExtensionService* ExtensionSystemImpl::extension_service() { 277 ExtensionService* ExtensionSystemImpl::extension_service() {
261 return shared_->extension_service(); 278 return shared_->extension_service();
262 } 279 }
263 280
281 extensions::ManagementPolicy* ExtensionSystemImpl::management_policy() {
282 return shared_->management_policy();
283 }
284
264 UserScriptMaster* ExtensionSystemImpl::user_script_master() { 285 UserScriptMaster* ExtensionSystemImpl::user_script_master() {
265 return shared_->user_script_master(); 286 return shared_->user_script_master();
266 } 287 }
267 288
268 ExtensionDevToolsManager* ExtensionSystemImpl::devtools_manager() { 289 ExtensionDevToolsManager* ExtensionSystemImpl::devtools_manager() {
269 // TODO(mpcomplete): in incognito, figure out whether we should 290 // TODO(mpcomplete): in incognito, figure out whether we should
270 // return the original profile's version. 291 // return the original profile's version.
271 return extension_devtools_manager_.get(); 292 return extension_devtools_manager_.get();
272 } 293 }
273 294
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 } 339 }
319 340
320 void ExtensionSystemImpl::UnregisterExtensionWithRequestContexts( 341 void ExtensionSystemImpl::UnregisterExtensionWithRequestContexts(
321 const std::string& extension_id, 342 const std::string& extension_id,
322 const extension_misc::UnloadedExtensionReason reason) { 343 const extension_misc::UnloadedExtensionReason reason) {
323 BrowserThread::PostTask( 344 BrowserThread::PostTask(
324 BrowserThread::IO, FROM_HERE, 345 BrowserThread::IO, FROM_HERE,
325 base::Bind(&ExtensionInfoMap::RemoveExtension, info_map(), 346 base::Bind(&ExtensionInfoMap::RemoveExtension, info_map(),
326 extension_id, reason)); 347 extension_id, reason));
327 } 348 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698