OLD | NEW |
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" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 | 66 |
67 // | 67 // |
68 // ExtensionSystemImpl::Shared | 68 // ExtensionSystemImpl::Shared |
69 // | 69 // |
70 | 70 |
71 ExtensionSystemImpl::Shared::Shared(Profile* profile) | 71 ExtensionSystemImpl::Shared::Shared(Profile* profile) |
72 : profile_(profile) { | 72 : profile_(profile) { |
73 } | 73 } |
74 | 74 |
75 ExtensionSystemImpl::Shared::~Shared() { | 75 ExtensionSystemImpl::Shared::~Shared() { |
76 if (rules_registry_service_.get()) | |
77 rules_registry_service_->Shutdown(); | |
78 } | 76 } |
79 | 77 |
80 void ExtensionSystemImpl::Shared::InitPrefs() { | 78 void ExtensionSystemImpl::Shared::InitPrefs() { |
81 bool extensions_disabled = | 79 bool extensions_disabled = |
82 profile_->GetPrefs()->GetBoolean(prefs::kDisableExtensions) || | 80 profile_->GetPrefs()->GetBoolean(prefs::kDisableExtensions) || |
83 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableExtensions); | 81 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableExtensions); |
84 extension_prefs_.reset(new ExtensionPrefs( | 82 extension_prefs_.reset(new ExtensionPrefs( |
85 profile_->GetPrefs(), | 83 profile_->GetPrefs(), |
86 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName), | 84 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName), |
87 ExtensionPrefValueMapFactory::GetForProfile(profile_))); | 85 ExtensionPrefValueMapFactory::GetForProfile(profile_))); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 profile_, | 125 profile_, |
128 CommandLine::ForCurrentProcess(), | 126 CommandLine::ForCurrentProcess(), |
129 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName), | 127 profile_->GetPath().AppendASCII(ExtensionService::kInstallDirectoryName), |
130 extension_prefs_.get(), | 128 extension_prefs_.get(), |
131 autoupdate_enabled, | 129 autoupdate_enabled, |
132 extensions_enabled)); | 130 extensions_enabled)); |
133 | 131 |
134 // These services must be registered before the ExtensionService tries to | 132 // These services must be registered before the ExtensionService tries to |
135 // load any extensions. | 133 // load any extensions. |
136 { | 134 { |
137 rules_registry_service_.reset(new RulesRegistryService(profile_)); | |
138 rules_registry_service_->RegisterDefaultRulesRegistries(); | |
139 | |
140 management_policy_.reset(new ManagementPolicy); | 135 management_policy_.reset(new ManagementPolicy); |
141 RegisterManagementPolicyProviders(); | 136 RegisterManagementPolicyProviders(); |
142 } | 137 } |
143 | 138 |
144 extension_service_->component_loader()->AddDefaultComponentExtensions(); | 139 extension_service_->component_loader()->AddDefaultComponentExtensions(); |
145 if (command_line->HasSwitch(switches::kLoadComponentExtension)) { | 140 if (command_line->HasSwitch(switches::kLoadComponentExtension)) { |
146 CommandLine::StringType path_list = command_line->GetSwitchValueNative( | 141 CommandLine::StringType path_list = command_line->GetSwitchValueNative( |
147 switches::kLoadComponentExtension); | 142 switches::kLoadComponentExtension); |
148 StringTokenizerT<CommandLine::StringType, | 143 StringTokenizerT<CommandLine::StringType, |
149 CommandLine::StringType::const_iterator> t(path_list, | 144 CommandLine::StringType::const_iterator> t(path_list, |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 } | 224 } |
230 | 225 |
231 MessageService* ExtensionSystemImpl::Shared::message_service() { | 226 MessageService* ExtensionSystemImpl::Shared::message_service() { |
232 return message_service_.get(); | 227 return message_service_.get(); |
233 } | 228 } |
234 | 229 |
235 EventRouter* ExtensionSystemImpl::Shared::event_router() { | 230 EventRouter* ExtensionSystemImpl::Shared::event_router() { |
236 return extension_event_router_.get(); | 231 return extension_event_router_.get(); |
237 } | 232 } |
238 | 233 |
239 RulesRegistryService* ExtensionSystemImpl::Shared::rules_registry_service() { | |
240 return rules_registry_service_.get(); | |
241 } | |
242 | |
243 // | 234 // |
244 // ExtensionSystemImpl | 235 // ExtensionSystemImpl |
245 // | 236 // |
246 | 237 |
247 ExtensionSystemImpl::ExtensionSystemImpl(Profile* profile) | 238 ExtensionSystemImpl::ExtensionSystemImpl(Profile* profile) |
248 : profile_(profile), | 239 : profile_(profile), |
249 extension_devtools_manager_(NULL) { | 240 extension_devtools_manager_(NULL) { |
250 shared_ = ExtensionSystemSharedFactory::GetForProfile(profile); | 241 shared_ = ExtensionSystemSharedFactory::GetForProfile(profile); |
251 | 242 |
252 if (profile->IsOffTheRecord()) { | 243 if (profile->IsOffTheRecord()) { |
253 extension_process_manager_.reset(ExtensionProcessManager::Create(profile)); | 244 extension_process_manager_.reset(ExtensionProcessManager::Create(profile)); |
254 } else { | 245 } else { |
255 shared_->InitPrefs(); | 246 shared_->InitPrefs(); |
256 } | 247 } |
257 } | 248 } |
258 | 249 |
259 ExtensionSystemImpl::~ExtensionSystemImpl() { | 250 ExtensionSystemImpl::~ExtensionSystemImpl() { |
| 251 if (rules_registry_service_.get()) |
| 252 rules_registry_service_->Shutdown(); |
260 } | 253 } |
261 | 254 |
262 void ExtensionSystemImpl::Shutdown() { | 255 void ExtensionSystemImpl::Shutdown() { |
263 extension_process_manager_.reset(); | 256 extension_process_manager_.reset(); |
264 } | 257 } |
265 | 258 |
266 void ExtensionSystemImpl::Init(bool extensions_enabled) { | 259 void ExtensionSystemImpl::InitForRegularProfile(bool extensions_enabled) { |
267 DCHECK(!profile_->IsOffTheRecord()); | 260 DCHECK(!profile_->IsOffTheRecord()); |
268 if (user_script_master() || extension_service()) | 261 if (user_script_master() || extension_service()) |
269 return; // Already initialized. | 262 return; // Already initialized. |
270 | 263 |
271 const CommandLine* command_line = CommandLine::ForCurrentProcess(); | 264 const CommandLine* command_line = CommandLine::ForCurrentProcess(); |
272 if (command_line->HasSwitch( | 265 if (command_line->HasSwitch( |
273 switches::kEnableExtensionTimelineApi)) { | 266 switches::kEnableExtensionTimelineApi)) { |
274 extension_devtools_manager_ = new ExtensionDevToolsManager(profile_); | 267 extension_devtools_manager_ = new ExtensionDevToolsManager(profile_); |
275 } | 268 } |
276 | 269 |
277 shared_->InitInfoMap(); | 270 shared_->InitInfoMap(); |
278 | 271 |
279 extension_process_manager_.reset(ExtensionProcessManager::Create(profile_)); | 272 extension_process_manager_.reset(ExtensionProcessManager::Create(profile_)); |
280 alarm_manager_.reset(new AlarmManager(profile_, &base::Time::Now)); | 273 alarm_manager_.reset(new AlarmManager(profile_, &base::Time::Now)); |
281 | 274 |
282 serial_connection_manager_.reset(new ApiResourceManager<SerialConnection>( | 275 serial_connection_manager_.reset(new ApiResourceManager<SerialConnection>( |
283 BrowserThread::FILE)); | 276 BrowserThread::FILE)); |
284 socket_manager_.reset(new ApiResourceManager<Socket>(BrowserThread::IO)); | 277 socket_manager_.reset(new ApiResourceManager<Socket>(BrowserThread::IO)); |
285 usb_device_resource_manager_.reset( | 278 usb_device_resource_manager_.reset( |
286 new ApiResourceManager<UsbDeviceResource>(BrowserThread::IO)); | 279 new ApiResourceManager<UsbDeviceResource>(BrowserThread::IO)); |
287 | 280 |
| 281 rules_registry_service_.reset(new RulesRegistryService(profile_)); |
| 282 rules_registry_service_->RegisterDefaultRulesRegistries(); |
| 283 |
288 shared_->Init(extensions_enabled); | 284 shared_->Init(extensions_enabled); |
289 } | 285 } |
290 | 286 |
| 287 void ExtensionSystemImpl::InitForOTRProfile() { |
| 288 // Only initialize the RulesRegistryService of the OTR ExtensionSystem if the |
| 289 // regular ExtensionSystem has been initialized properly, as we depend on it. |
| 290 // Some ChromeOS browser tests don't initialize the regular ExtensionSystem |
| 291 // in login-tests. |
| 292 if (extension_service()) { |
| 293 rules_registry_service_.reset(new RulesRegistryService(profile_)); |
| 294 rules_registry_service_->RegisterDefaultRulesRegistries(); |
| 295 } |
| 296 } |
| 297 |
291 ExtensionService* ExtensionSystemImpl::extension_service() { | 298 ExtensionService* ExtensionSystemImpl::extension_service() { |
292 return shared_->extension_service(); | 299 return shared_->extension_service(); |
293 } | 300 } |
294 | 301 |
295 ManagementPolicy* ExtensionSystemImpl::management_policy() { | 302 ManagementPolicy* ExtensionSystemImpl::management_policy() { |
296 return shared_->management_policy(); | 303 return shared_->management_policy(); |
297 } | 304 } |
298 | 305 |
299 UserScriptMaster* ExtensionSystemImpl::user_script_master() { | 306 UserScriptMaster* ExtensionSystemImpl::user_script_master() { |
300 return shared_->user_script_master(); | 307 return shared_->user_script_master(); |
(...skipping 27 matching lines...) Expand all Loading... |
328 | 335 |
329 MessageService* ExtensionSystemImpl::message_service() { | 336 MessageService* ExtensionSystemImpl::message_service() { |
330 return shared_->message_service(); | 337 return shared_->message_service(); |
331 } | 338 } |
332 | 339 |
333 EventRouter* ExtensionSystemImpl::event_router() { | 340 EventRouter* ExtensionSystemImpl::event_router() { |
334 return shared_->event_router(); | 341 return shared_->event_router(); |
335 } | 342 } |
336 | 343 |
337 RulesRegistryService* ExtensionSystemImpl::rules_registry_service() { | 344 RulesRegistryService* ExtensionSystemImpl::rules_registry_service() { |
338 return shared_->rules_registry_service(); | 345 return rules_registry_service_.get(); |
339 } | 346 } |
340 | 347 |
341 ApiResourceManager<SerialConnection>* | 348 ApiResourceManager<SerialConnection>* |
342 ExtensionSystemImpl::serial_connection_manager() { | 349 ExtensionSystemImpl::serial_connection_manager() { |
343 return serial_connection_manager_.get(); | 350 return serial_connection_manager_.get(); |
344 } | 351 } |
345 | 352 |
346 ApiResourceManager<Socket>*ExtensionSystemImpl::socket_manager() { | 353 ApiResourceManager<Socket>* ExtensionSystemImpl::socket_manager() { |
347 return socket_manager_.get(); | 354 return socket_manager_.get(); |
348 } | 355 } |
349 | 356 |
350 ApiResourceManager<UsbDeviceResource>* | 357 ApiResourceManager<UsbDeviceResource>* |
351 ExtensionSystemImpl::usb_device_resource_manager() { | 358 ExtensionSystemImpl::usb_device_resource_manager() { |
352 return usb_device_resource_manager_.get(); | 359 return usb_device_resource_manager_.get(); |
353 } | 360 } |
354 | 361 |
355 void ExtensionSystemImpl::RegisterExtensionWithRequestContexts( | 362 void ExtensionSystemImpl::RegisterExtensionWithRequestContexts( |
356 const Extension* extension) { | 363 const Extension* extension) { |
(...skipping 14 matching lines...) Expand all Loading... |
371 void ExtensionSystemImpl::UnregisterExtensionWithRequestContexts( | 378 void ExtensionSystemImpl::UnregisterExtensionWithRequestContexts( |
372 const std::string& extension_id, | 379 const std::string& extension_id, |
373 const extension_misc::UnloadedExtensionReason reason) { | 380 const extension_misc::UnloadedExtensionReason reason) { |
374 BrowserThread::PostTask( | 381 BrowserThread::PostTask( |
375 BrowserThread::IO, FROM_HERE, | 382 BrowserThread::IO, FROM_HERE, |
376 base::Bind(&ExtensionInfoMap::RemoveExtension, info_map(), | 383 base::Bind(&ExtensionInfoMap::RemoveExtension, info_map(), |
377 extension_id, reason)); | 384 extension_id, reason)); |
378 } | 385 } |
379 | 386 |
380 } // namespace extensions | 387 } // namespace extensions |
OLD | NEW |