From 86c008e8a7da9c00c5a676eb201ba5d0c976748e Mon Sep 17 00:00:00 2001 From: "erikkay@chromium.org" Date: Fri, 28 Aug 2009 20:26:05 +0000 Subject: 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 --- chrome/common/extensions/extension.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'chrome/common/extensions/extension.cc') diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index c826c07..3f3c8539 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -998,6 +998,37 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_id, set_default_locale(default_locale); } + // Chrome URL overrides (optional) + if (source.HasKey(keys::kChromeURLOverrides)) { + DictionaryValue* overrides; + if (!source.GetDictionary(keys::kChromeURLOverrides, &overrides)) { + *error = errors::kInvalidChromeURLOverrides; + return false; + } + // Validate that the overrides are all strings + DictionaryValue::key_iterator iter = overrides->begin_keys(); + while (iter != overrides->end_keys()) { + // For now, only allow the new tab page. Others will work when we remove + // this check, but let's keep it simple for now. + // TODO(erikkay) enable other pages as well + if (WideToUTF8(*iter) != chrome::kChromeUINewTabHost) { + *error = errors::kInvalidChromeURLOverrides; + return false; + } + std::string val; + if (!overrides->GetString(*iter, &val)) { + *error = errors::kInvalidChromeURLOverrides; + return false; + } + // Replace the entry with a fully qualified chrome-extension:// URL. + GURL url = GetResourceURL(val); + overrides->SetString(*iter, url.spec()); + ++iter; + } + chrome_url_overrides_.reset( + static_cast(overrides->DeepCopy())); + } + return true; } -- cgit v1.1