diff options
author | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-28 20:26:05 +0000 |
---|---|---|
committer | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-28 20:26:05 +0000 |
commit | 86c008e8a7da9c00c5a676eb201ba5d0c976748e (patch) | |
tree | 8e58aeeab8564a396ccf67807d5bddfcdaa05807 /chrome/browser/extensions/extensions_service.cc | |
parent | 5ec8d59c7e79d1a7aae4137051ffc184ec51096c (diff) | |
download | chromium_src-86c008e8a7da9c00c5a676eb201ba5d0c976748e.zip chromium_src-86c008e8a7da9c00c5a676eb201ba5d0c976748e.tar.gz chromium_src-86c008e8a7da9c00c5a676eb201ba5d0c976748e.tar.bz2 |
override chrome:// URLs via extensions.
Overrides are declared in an extension's manifest. The last one installed
wins. However, we keep a list of those installed per page so that priority
is preserved and so that uninstall will revert to a previous state.
Review URL: http://codereview.chromium.org/174277
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24791 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extensions_service.cc')
-rw-r--r-- | chrome/browser/extensions/extensions_service.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc index acb74cd..b53f243 100644 --- a/chrome/browser/extensions/extensions_service.cc +++ b/chrome/browser/extensions/extensions_service.cc @@ -11,6 +11,7 @@ #include "chrome/browser/chrome_thread.h" #include "chrome/browser/extensions/crx_installer.h" #include "chrome/browser/extensions/extension_browser_event_router.h" +#include "chrome/browser/extensions/extension_dom_ui.h" #include "chrome/browser/extensions/extension_file_util.h" #include "chrome/browser/extensions/extension_updater.h" #include "chrome/browser/extensions/external_extension_provider.h" @@ -195,6 +196,9 @@ void ExtensionsService::UninstallExtension(const std::string& extension_id, install_directory_)); } + ExtensionDOMUI::UnregisterChromeURLOverrides(profile_, + extension->GetChromeURLOverrides()); + UnloadExtension(extension_id); } @@ -213,6 +217,9 @@ void ExtensionsService::EnableExtension(const std::string& extension_id) { extension); disabled_extensions_.erase(iter); + ExtensionDOMUI::RegisterChromeURLOverrides(profile_, + extension->GetChromeURLOverrides()); + NotificationService::current()->Notify( NotificationType::EXTENSION_LOADED, Source<ExtensionsService>(this), @@ -314,6 +321,9 @@ void ExtensionsService::UnloadExtension(const std::string& extension_id) { // Callers should not send us nonexistant extensions. CHECK(extension.get()); + ExtensionDOMUI::UnregisterChromeURLOverrides(profile_, + extension->GetChromeURLOverrides()); + ExtensionList::iterator iter = std::find(disabled_extensions_.begin(), disabled_extensions_.end(), extension.get()); @@ -426,6 +436,9 @@ void ExtensionsService::OnExtensionLoaded(Extension* extension, NotificationType::THEME_INSTALLED, Source<ExtensionsService>(this), Details<Extension>(extension)); + } else { + ExtensionDOMUI::RegisterChromeURLOverrides(profile_, + extension->GetChromeURLOverrides()); } break; case Extension::DISABLED: |