diff options
author | cem.kocagil@gmail.com <cem.kocagil@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-16 08:48:20 +0000 |
---|---|---|
committer | cem.kocagil@gmail.com <cem.kocagil@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-16 08:48:20 +0000 |
commit | 887ab009d96dcb370776ada63c188ff8b31b830d (patch) | |
tree | d5e34a50b08791a0d38294c18bd6b0edd8ed070c /chrome/browser | |
parent | 8d2f148e025c7ed9265561151a6f3a17a1fa197c (diff) | |
download | chromium_src-887ab009d96dcb370776ada63c188ff8b31b830d.zip chromium_src-887ab009d96dcb370776ada63c188ff8b31b830d.tar.gz chromium_src-887ab009d96dcb370776ada63c188ff8b31b830d.tar.bz2 |
Rewrite URL before checking host for IsURLAllowedInIncognito
BUG=153598
TEST=Open an incognito window, enter "chrome://history". The history tab should be opened in a normal window, not the incognito window.
Review URL: https://chromiumcodereview.appspot.com/11051015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162104 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/extensions/api/tabs/tabs.cc | 2 | ||||
-rw-r--r-- | chrome/browser/ui/browser_navigator.cc | 22 | ||||
-rw-r--r-- | chrome/browser/ui/browser_navigator.h | 4 |
3 files changed, 21 insertions, 7 deletions
diff --git a/chrome/browser/extensions/api/tabs/tabs.cc b/chrome/browser/extensions/api/tabs/tabs.cc index 28fce21..f063d5d 100644 --- a/chrome/browser/extensions/api/tabs/tabs.cc +++ b/chrome/browser/extensions/api/tabs/tabs.cc @@ -368,7 +368,7 @@ bool CreateWindowFunction::ShouldOpenIncognitoWindow( if (incognito && !Profile::IsGuestSession()) { std::string first_url_erased; for (size_t i = 0; i < urls->size();) { - if (chrome::IsURLAllowedInIncognito((*urls)[i])) { + if (chrome::IsURLAllowedInIncognito((*urls)[i], profile())) { i++; } else { if (first_url_erased.empty()) diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc index 0aa7a51..287e905 100644 --- a/chrome/browser/ui/browser_navigator.cc +++ b/chrome/browser/ui/browser_navigator.cc @@ -68,7 +68,8 @@ Browser* GetOrCreateBrowser(Profile* profile, // an erroneous state, returns false. bool AdjustNavigateParamsForURL(chrome::NavigateParams* params) { if (params->target_contents != NULL || - chrome::IsURLAllowedInIncognito(params->url) || + chrome::IsURLAllowedInIncognito(params->url, + params->initiating_profile) || Profile::IsGuestSession()) { return true; } @@ -561,18 +562,29 @@ void Navigate(NavigateParams* params) { } } -bool IsURLAllowedInIncognito(const GURL& url) { +bool IsURLAllowedInIncognito(const GURL& url, + content::BrowserContext* browser_context) { // Most URLs are allowed in incognito; the following are exceptions. // chrome://extensions is on the list because it redirects to // chrome://settings. - - return !(url.scheme() == chrome::kChromeUIScheme && + if (url.scheme() == chrome::kChromeUIScheme && (url.host() == chrome::kChromeUISettingsHost || url.host() == chrome::kChromeUISettingsFrameHost || url.host() == chrome::kChromeUIExtensionsHost || url.host() == chrome::kChromeUIBookmarksHost || url.host() == chrome::kChromeUISyncPromoHost || - url.host() == chrome::kChromeUIUberHost)); + url.host() == chrome::kChromeUIUberHost)) { + return false; + } + + GURL rewritten_url = url; + bool reverse_on_redirect = false; + content::BrowserURLHandler::GetInstance()->RewriteURLIfNecessary( + &rewritten_url, browser_context, &reverse_on_redirect); + + // Some URLs are mapped to uber subpages. Do not allow them in incognito. + return !(rewritten_url.scheme() == chrome::kChromeUIScheme && + rewritten_url.host() == chrome::kChromeUIUberHost); } } // namespace chrome diff --git a/chrome/browser/ui/browser_navigator.h b/chrome/browser/ui/browser_navigator.h index a91457c..5df4136 100644 --- a/chrome/browser/ui/browser_navigator.h +++ b/chrome/browser/ui/browser_navigator.h @@ -8,6 +8,7 @@ #include <string> #include "chrome/browser/ui/host_desktop.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/global_request_id.h" #include "content/public/common/page_transition_types.h" #include "content/public/common/referrer.h" @@ -210,7 +211,8 @@ struct NavigateParams { void Navigate(NavigateParams* params); // Returns true if the url is allowed to open in incognito window. -bool IsURLAllowedInIncognito(const GURL& url); +bool IsURLAllowedInIncognito(const GURL& url, + content::BrowserContext* browser_context); } // namespace chrome |