Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2434)

Unified Diff: chrome/browser/ui/browser_navigator.cc

Issue 4145013: DOMUI: Use ShowSingletonTab to open the settings tab. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: csilv review fixes. Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/browser_navigator.h ('k') | chrome/browser/ui/browser_navigator_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser_navigator.cc
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc
index 4a40d0e6537a5c4c8d011a2b17ba4d6e73ed06d1..fadf03f441a67db7e51e785dee53c6ef9185abc6 100644
--- a/chrome/browser/ui/browser_navigator.cc
+++ b/chrome/browser/ui/browser_navigator.cc
@@ -53,20 +53,17 @@ Browser* GetOrCreateBrowser(Profile* profile) {
return browser ? browser : Browser::Create(profile);
}
-// Returns true if two URLs are equal ignoring their ref (hash fragment).
-bool CompareURLsIgnoreRef(const GURL& url, const GURL& other) {
+// Returns true if two URLs are equal after taking |replacements| into account.
+bool CompareURLsWithReplacements(
+ const GURL& url,
+ const GURL& other,
+ const url_canon::Replacements<char>& replacements) {
if (url == other)
return true;
- // If neither has a ref than there is no point in stripping the refs and
- // the URLs are different since the comparison failed in the previous if
- // statement.
- if (!url.has_ref() && !other.has_ref())
- return false;
- url_canon::Replacements<char> replacements;
- replacements.ClearRef();
- GURL url_no_ref = url.ReplaceComponents(replacements);
- GURL other_no_ref = other.ReplaceComponents(replacements);
- return url_no_ref == other_no_ref;
+
+ GURL url_replaced = url.ReplaceComponents(replacements);
+ GURL other_replaced = other.ReplaceComponents(replacements);
+ return url_replaced == other_replaced;
}
// Returns the index of an existing singleton tab in |params->browser| matching
@@ -86,12 +83,20 @@ int GetIndexOfSingletonTab(browser::NavigateParams* params) {
for (int i = 0; i < params->browser->tab_count(); ++i) {
TabContents* tab = params->browser->GetTabContentsAt(i);
- if (CompareURLsIgnoreRef(tab->GetURL(), params->url) ||
- CompareURLsIgnoreRef(tab->GetURL(), rewritten_url)) {
+
+ url_canon::Replacements<char> replacements;
+ replacements.ClearRef();
+ if (params->ignore_path)
+ replacements.ClearPath();
+
+ if (CompareURLsWithReplacements(tab->GetURL(), params->url, replacements) ||
+ CompareURLsWithReplacements(tab->GetURL(), rewritten_url,
+ replacements)) {
params->target_contents = tab;
return i;
}
}
+
return -1;
}
@@ -383,6 +388,15 @@ void Navigate(NavigateParams* params) {
// The navigation occurred in some other tab.
int singleton_index = GetIndexOfSingletonTab(params);
if (params->disposition == SINGLETON_TAB && singleton_index >= 0) {
+ TabContents* target = params->browser->GetTabContentsAt(singleton_index);
+
+ // Load the URL if the target contents URL doesn't match. This can happen
+ // if the URL path is ignored when locating the singleton tab.
+ if (target->GetURL() != params->url) {
+ target->controller().LoadURL(
+ params->url, params->referrer, params->transition);
+ }
+
// The navigation should re-select an existing tab in the target Browser.
params->browser->SelectTabContentsAt(singleton_index, user_initiated);
} else {
« no previous file with comments | « chrome/browser/ui/browser_navigator.h ('k') | chrome/browser/ui/browser_navigator_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698