| Index: chrome/browser/extensions/extension_tabs_module.cc
|
| diff --git a/chrome/browser/extensions/extension_tabs_module.cc b/chrome/browser/extensions/extension_tabs_module.cc
|
| index 44765bafd4468d99a4bf53f5e2ceef195b725176..1c185e2776f77e0149b4d271a82b9f4cfa2bdbfb 100644
|
| --- a/chrome/browser/extensions/extension_tabs_module.cc
|
| +++ b/chrome/browser/extensions/extension_tabs_module.cc
|
| @@ -123,6 +123,19 @@ std::string GetWindowTypeText(const Browser* browser) {
|
| return keys::kWindowTypeValueNormal;
|
| }
|
|
|
| +bool IsCrashURL(const GURL& url) {
|
| + // GURL does not parse about: URL hosts, so compare against these entire URLs.
|
| + if (url == GURL(chrome::kAboutBrowserCrash) ||
|
| + url == GURL(chrome::kAboutCrashURL))
|
| + return true;
|
| +
|
| + // Catch any crash-like URL here.
|
| + return ((url.SchemeIs(chrome::kAboutScheme) ||
|
| + url.SchemeIs(chrome::kChromeUIScheme)) &&
|
| + (url.host() == chrome::kChromeUIBrowserCrashHost ||
|
| + url.host() == chrome::kChromeUICrashHost));
|
| +}
|
| +
|
| } // namespace
|
|
|
| int ExtensionTabUtil::GetWindowId(const Browser* browser) {
|
| @@ -402,20 +415,16 @@ bool CreateWindowFunction::RunImpl() {
|
| keys::kInvalidUrlError, *i);
|
| return false;
|
| }
|
| + // Don't let the extension crash the browser or renderers.
|
| + if (IsCrashURL(url)) {
|
| + error_ = keys::kNoCrashBrowserError;
|
| + return false;
|
| + }
|
| urls.push_back(url);
|
| }
|
| }
|
| }
|
|
|
| - // Don't let the extension crash the browser or renderers.
|
| - GURL browser_crash(chrome::kAboutBrowserCrash);
|
| - GURL renderer_crash(chrome::kAboutCrashURL);
|
| - if (std::find(urls.begin(), urls.end(), browser_crash) != urls.end() ||
|
| - std::find(urls.begin(), urls.end(), renderer_crash) != urls.end()) {
|
| - error_ = keys::kNoCrashBrowserError;
|
| - return false;
|
| - }
|
| -
|
| // Look for optional tab id.
|
| if (args) {
|
| int tab_id;
|
| @@ -746,8 +755,7 @@ bool CreateTabFunction::RunImpl() {
|
| }
|
|
|
| // Don't let extensions crash the browser or renderers.
|
| - if (url == GURL(chrome::kAboutBrowserCrash) ||
|
| - url == GURL(chrome::kAboutCrashURL)) {
|
| + if (IsCrashURL(url)) {
|
| error_ = keys::kNoCrashBrowserError;
|
| return false;
|
| }
|
| @@ -863,7 +871,7 @@ bool UpdateTabFunction::RunImpl() {
|
| // -title
|
| // -favIconUrl
|
|
|
| - // Navigate the tab to a new location if the url different.
|
| + // Navigate the tab to a new location if the url is different.
|
| std::string url_string;
|
| if (update_props->HasKey(keys::kUrlKey)) {
|
| EXTENSION_FUNCTION_VALIDATE(update_props->GetString(
|
| @@ -877,8 +885,7 @@ bool UpdateTabFunction::RunImpl() {
|
| }
|
|
|
| // Don't let the extension crash the browser or renderers.
|
| - if (url == GURL(chrome::kAboutBrowserCrash) ||
|
| - url == GURL(chrome::kAboutCrashURL)) {
|
| + if (IsCrashURL(url)) {
|
| error_ = keys::kNoCrashBrowserError;
|
| return false;
|
| }
|
|
|