| Index: extensions/browser/api/runtime/runtime_api.cc
|
| diff --git a/extensions/browser/api/runtime/runtime_api.cc b/extensions/browser/api/runtime/runtime_api.cc
|
| index 09ffef2c864b5d6d902beb76f8d51d6eba2fc33e..443f93682b6d46cb3e054fa930516c7ebe2e2eac 100644
|
| --- a/extensions/browser/api/runtime/runtime_api.cc
|
| +++ b/extensions/browser/api/runtime/runtime_api.cc
|
| @@ -54,7 +54,7 @@ const char kInstallReasonUpdate[] = "update";
|
| const char kInstallReasonInstall[] = "install";
|
| const char kInstallReasonSharedModuleUpdate[] = "shared_module_update";
|
| const char kInstallPreviousVersion[] = "previousVersion";
|
| -const char kInvalidUrlError[] = "Invalid URL.";
|
| +const char kInvalidUrlError[] = "Invalid URL: \"*\".";
|
| const char kPlatformInfoUnavailable[] = "Platform information unavailable.";
|
|
|
| const char kUpdatesDisabledError[] = "Autoupdate is not enabled.";
|
| @@ -405,8 +405,11 @@ void RuntimeEventRouter::OnExtensionUninstalled(
|
| GURL uninstall_url(
|
| GetUninstallURL(ExtensionPrefs::Get(context), extension_id));
|
|
|
| - if (uninstall_url.is_empty())
|
| + if (!uninstall_url.SchemeIsHTTPOrHTTPS()) {
|
| + // Previous versions of Chrome allowed non-http(s) URLs to be stored in the
|
| + // prefs. Now they're disallowed, but the old data may still exist.
|
| return;
|
| + }
|
|
|
| RuntimeAPI::GetFactoryInstance()->Get(context)->OpenURL(uninstall_url);
|
| }
|
| @@ -448,10 +451,8 @@ ExtensionFunction::ResponseAction RuntimeSetUninstallURLFunction::Run() {
|
| std::string url_string;
|
| EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &url_string));
|
|
|
| - GURL url(url_string);
|
| - if (!url.is_valid()) {
|
| - return RespondNow(
|
| - Error(ErrorUtils::FormatErrorMessage(kInvalidUrlError, url_string)));
|
| + if (!url_string.empty() && !GURL(url_string).SchemeIsHTTPOrHTTPS()) {
|
| + return RespondNow(Error(kInvalidUrlError, url_string));
|
| }
|
| SetUninstallURL(
|
| ExtensionPrefs::Get(browser_context()), extension_id(), url_string);
|
|
|