summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorcem.kocagil@gmail.com <cem.kocagil@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-16 08:48:20 +0000
committercem.kocagil@gmail.com <cem.kocagil@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-16 08:48:20 +0000
commit887ab009d96dcb370776ada63c188ff8b31b830d (patch)
treed5e34a50b08791a0d38294c18bd6b0edd8ed070c /chrome/browser
parent8d2f148e025c7ed9265561151a6f3a17a1fa197c (diff)
downloadchromium_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.cc2
-rw-r--r--chrome/browser/ui/browser_navigator.cc22
-rw-r--r--chrome/browser/ui/browser_navigator.h4
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