| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/extensions_service.h" | 5 #include "chrome/browser/extensions/extensions_service.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| 11 #include "chrome/browser/chrome_thread.h" | 11 #include "chrome/browser/chrome_thread.h" |
| 12 #include "chrome/browser/extensions/crx_installer.h" | 12 #include "chrome/browser/extensions/crx_installer.h" |
| 13 #include "chrome/browser/extensions/extension_browser_event_router.h" | 13 #include "chrome/browser/extensions/extension_browser_event_router.h" |
| 14 #include "chrome/browser/extensions/extension_dom_ui.h" |
| 14 #include "chrome/browser/extensions/extension_file_util.h" | 15 #include "chrome/browser/extensions/extension_file_util.h" |
| 15 #include "chrome/browser/extensions/extension_updater.h" | 16 #include "chrome/browser/extensions/extension_updater.h" |
| 16 #include "chrome/browser/extensions/external_extension_provider.h" | 17 #include "chrome/browser/extensions/external_extension_provider.h" |
| 17 #include "chrome/browser/extensions/external_pref_extension_provider.h" | 18 #include "chrome/browser/extensions/external_pref_extension_provider.h" |
| 18 #include "chrome/browser/profile.h" | 19 #include "chrome/browser/profile.h" |
| 19 #include "chrome/common/chrome_switches.h" | 20 #include "chrome/common/chrome_switches.h" |
| 20 #include "chrome/common/extensions/extension.h" | 21 #include "chrome/common/extensions/extension.h" |
| 21 #include "chrome/common/extensions/extension_error_reporter.h" | 22 #include "chrome/common/extensions/extension_error_reporter.h" |
| 22 #include "chrome/common/notification_service.h" | 23 #include "chrome/common/notification_service.h" |
| 23 #include "chrome/common/pref_names.h" | 24 #include "chrome/common/pref_names.h" |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 | 187 |
| 187 extension_prefs_->OnExtensionUninstalled(extension, external_uninstall); | 188 extension_prefs_->OnExtensionUninstalled(extension, external_uninstall); |
| 188 | 189 |
| 189 // Tell the backend to start deleting installed extensions on the file thread. | 190 // Tell the backend to start deleting installed extensions on the file thread. |
| 190 if (Extension::LOAD != extension->location()) { | 191 if (Extension::LOAD != extension->location()) { |
| 191 backend_loop_->PostTask(FROM_HERE, NewRunnableFunction( | 192 backend_loop_->PostTask(FROM_HERE, NewRunnableFunction( |
| 192 &extension_file_util::UninstallExtension, extension_id, | 193 &extension_file_util::UninstallExtension, extension_id, |
| 193 install_directory_)); | 194 install_directory_)); |
| 194 } | 195 } |
| 195 | 196 |
| 197 ExtensionDOMUI::UnregisterChromeURLOverrides(profile_, |
| 198 extension->GetChromeURLOverrides()); |
| 199 |
| 196 UnloadExtension(extension_id); | 200 UnloadExtension(extension_id); |
| 197 } | 201 } |
| 198 | 202 |
| 199 void ExtensionsService::EnableExtension(const std::string& extension_id) { | 203 void ExtensionsService::EnableExtension(const std::string& extension_id) { |
| 200 Extension* extension = GetExtensionByIdInternal(extension_id, false, true); | 204 Extension* extension = GetExtensionByIdInternal(extension_id, false, true); |
| 201 if (!extension) { | 205 if (!extension) { |
| 202 NOTREACHED() << "Trying to enable an extension that isn't disabled."; | 206 NOTREACHED() << "Trying to enable an extension that isn't disabled."; |
| 203 return; | 207 return; |
| 204 } | 208 } |
| 205 | 209 |
| 206 // Move it over to the enabled list. | 210 // Move it over to the enabled list. |
| 207 extension_prefs_->SetExtensionState(extension, Extension::ENABLED); | 211 extension_prefs_->SetExtensionState(extension, Extension::ENABLED); |
| 208 extensions_.push_back(extension); | 212 extensions_.push_back(extension); |
| 209 ExtensionList::iterator iter = std::find(disabled_extensions_.begin(), | 213 ExtensionList::iterator iter = std::find(disabled_extensions_.begin(), |
| 210 disabled_extensions_.end(), | 214 disabled_extensions_.end(), |
| 211 extension); | 215 extension); |
| 212 disabled_extensions_.erase(iter); | 216 disabled_extensions_.erase(iter); |
| 213 | 217 |
| 218 ExtensionDOMUI::RegisterChromeURLOverrides(profile_, |
| 219 extension->GetChromeURLOverrides()); |
| 220 |
| 214 NotificationService::current()->Notify( | 221 NotificationService::current()->Notify( |
| 215 NotificationType::EXTENSION_LOADED, | 222 NotificationType::EXTENSION_LOADED, |
| 216 Source<ExtensionsService>(this), | 223 Source<ExtensionsService>(this), |
| 217 Details<Extension>(extension)); | 224 Details<Extension>(extension)); |
| 218 } | 225 } |
| 219 | 226 |
| 220 void ExtensionsService::LoadExtension(const FilePath& extension_path) { | 227 void ExtensionsService::LoadExtension(const FilePath& extension_path) { |
| 221 backend_loop_->PostTask(FROM_HERE, NewRunnableMethod(backend_.get(), | 228 backend_loop_->PostTask(FROM_HERE, NewRunnableMethod(backend_.get(), |
| 222 &ExtensionsServiceBackend::LoadSingleExtension, | 229 &ExtensionsServiceBackend::LoadSingleExtension, |
| 223 extension_path, scoped_refptr<ExtensionsService>(this))); | 230 extension_path, scoped_refptr<ExtensionsService>(this))); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 scoped_refptr<ExtensionsService>(this))); | 312 scoped_refptr<ExtensionsService>(this))); |
| 306 } | 313 } |
| 307 | 314 |
| 308 void ExtensionsService::UnloadExtension(const std::string& extension_id) { | 315 void ExtensionsService::UnloadExtension(const std::string& extension_id) { |
| 309 scoped_ptr<Extension> extension( | 316 scoped_ptr<Extension> extension( |
| 310 GetExtensionByIdInternal(extension_id, true, true)); | 317 GetExtensionByIdInternal(extension_id, true, true)); |
| 311 | 318 |
| 312 // Callers should not send us nonexistant extensions. | 319 // Callers should not send us nonexistant extensions. |
| 313 CHECK(extension.get()); | 320 CHECK(extension.get()); |
| 314 | 321 |
| 322 ExtensionDOMUI::UnregisterChromeURLOverrides(profile_, |
| 323 extension->GetChromeURLOverrides()); |
| 324 |
| 315 ExtensionList::iterator iter = std::find(disabled_extensions_.begin(), | 325 ExtensionList::iterator iter = std::find(disabled_extensions_.begin(), |
| 316 disabled_extensions_.end(), | 326 disabled_extensions_.end(), |
| 317 extension.get()); | 327 extension.get()); |
| 318 if (iter != disabled_extensions_.end()) { | 328 if (iter != disabled_extensions_.end()) { |
| 319 disabled_extensions_.erase(iter); | 329 disabled_extensions_.erase(iter); |
| 320 NotificationService::current()->Notify( | 330 NotificationService::current()->Notify( |
| 321 NotificationType::EXTENSION_UNLOADED_DISABLED, | 331 NotificationType::EXTENSION_UNLOADED_DISABLED, |
| 322 Source<ExtensionsService>(this), | 332 Source<ExtensionsService>(this), |
| 323 Details<Extension>(extension.get())); | 333 Details<Extension>(extension.get())); |
| 324 return; | 334 return; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 NotificationService::current()->Notify( | 425 NotificationService::current()->Notify( |
| 416 NotificationType::EXTENSION_LOADED, | 426 NotificationType::EXTENSION_LOADED, |
| 417 Source<ExtensionsService>(this), | 427 Source<ExtensionsService>(this), |
| 418 Details<Extension>(extension)); | 428 Details<Extension>(extension)); |
| 419 | 429 |
| 420 if (extension->IsTheme() && extension->location() == Extension::LOAD) { | 430 if (extension->IsTheme() && extension->location() == Extension::LOAD) { |
| 421 NotificationService::current()->Notify( | 431 NotificationService::current()->Notify( |
| 422 NotificationType::THEME_INSTALLED, | 432 NotificationType::THEME_INSTALLED, |
| 423 Source<ExtensionsService>(this), | 433 Source<ExtensionsService>(this), |
| 424 Details<Extension>(extension)); | 434 Details<Extension>(extension)); |
| 435 } else { |
| 436 ExtensionDOMUI::RegisterChromeURLOverrides(profile_, |
| 437 extension->GetChromeURLOverrides()); |
| 425 } | 438 } |
| 426 break; | 439 break; |
| 427 case Extension::DISABLED: | 440 case Extension::DISABLED: |
| 428 disabled_extensions_.push_back(scoped_extension.release()); | 441 disabled_extensions_.push_back(scoped_extension.release()); |
| 429 break; | 442 break; |
| 430 default: | 443 default: |
| 431 break; | 444 break; |
| 432 } | 445 } |
| 433 } | 446 } |
| 434 } | 447 } |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 671 linked_ptr<ExternalExtensionProvider>(test_provider); | 684 linked_ptr<ExternalExtensionProvider>(test_provider); |
| 672 } | 685 } |
| 673 | 686 |
| 674 void ExtensionsServiceBackend::OnExternalExtensionFound( | 687 void ExtensionsServiceBackend::OnExternalExtensionFound( |
| 675 const std::string& id, const Version* version, const FilePath& path, | 688 const std::string& id, const Version* version, const FilePath& path, |
| 676 Extension::Location location) { | 689 Extension::Location location) { |
| 677 frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(frontend_, | 690 frontend_loop_->PostTask(FROM_HERE, NewRunnableMethod(frontend_, |
| 678 &ExtensionsService::OnExternalExtensionFound, id, version->GetString(), | 691 &ExtensionsService::OnExternalExtensionFound, id, version->GetString(), |
| 679 path, location)); | 692 path, location)); |
| 680 } | 693 } |
| OLD | NEW |