| 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 |