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

Side by Side Diff: chrome/browser/ui/browser_navigator.cc

Issue 7178002: Open Options page on top of NTP. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Refactor settings API methods together. Switch test order. Created 9 years, 6 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/browser_navigator.h" 5 #include "chrome/browser/ui/browser_navigator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "chrome/browser/browser_about_handler.h" 10 #include "chrome/browser/browser_about_handler.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 const GURL& other, 76 const GURL& other,
77 const url_canon::Replacements<char>& replacements) { 77 const url_canon::Replacements<char>& replacements) {
78 if (url == other) 78 if (url == other)
79 return true; 79 return true;
80 80
81 GURL url_replaced = url.ReplaceComponents(replacements); 81 GURL url_replaced = url.ReplaceComponents(replacements);
82 GURL other_replaced = other.ReplaceComponents(replacements); 82 GURL other_replaced = other.ReplaceComponents(replacements);
83 return url_replaced == other_replaced; 83 return url_replaced == other_replaced;
84 } 84 }
85 85
86 // Returns the index of an existing singleton tab in |params->browser| matching
87 // the URL specified in |params|.
88 int GetIndexOfSingletonTab(browser::NavigateParams* params) {
89 if (params->disposition != SINGLETON_TAB)
90 return -1;
91
92 // In case the URL was rewritten by the BrowserURLHandler we need to ensure
93 // that we do not open another URL that will get redirected to the rewritten
94 // URL.
95 GURL rewritten_url(params->url);
96 bool reverse_on_redirect = false;
97 BrowserURLHandler::GetInstance()->RewriteURLIfNecessary(
98 &rewritten_url,
99 params->browser->profile(),
100 &reverse_on_redirect);
101
102 // If there are several matches: prefer the active tab by starting there.
103 int start_index = std::max(0, params->browser->active_index());
104 int tab_count = params->browser->tab_count();
105 for (int i = 0; i < tab_count; ++i) {
106 int tab_index = (start_index + i) % tab_count;
107 TabContentsWrapper* tab =
108 params->browser->GetTabContentsWrapperAt(tab_index);
109
110 url_canon::Replacements<char> replacements;
111 replacements.ClearRef();
112 if (params->path_behavior == browser::NavigateParams::IGNORE_AND_NAVIGATE ||
113 params->path_behavior == browser::NavigateParams::IGNORE_AND_STAY_PUT) {
114 replacements.ClearPath();
115 replacements.ClearQuery();
116 }
117
118 if (CompareURLsWithReplacements(tab->tab_contents()->GetURL(),
119 params->url, replacements) ||
120 CompareURLsWithReplacements(tab->tab_contents()->GetURL(),
121 rewritten_url, replacements)) {
122 params->target_contents = tab;
123 return tab_index;
124 }
125 }
126
127 return -1;
128 }
129
130 // Change some of the navigation parameters based on the particular URL. 86 // Change some of the navigation parameters based on the particular URL.
131 // Currently this applies to chrome://settings and the bookmark manager, 87 // Currently this applies to chrome://settings and the bookmark manager,
132 // which we always want to open in a normal (not incognito) window. Guest 88 // which we always want to open in a normal (not incognito) window. Guest
133 // session is an exception. 89 // session is an exception.
134 void AdjustNavigateParamsForURL(browser::NavigateParams* params) { 90 void AdjustNavigateParamsForURL(browser::NavigateParams* params) {
135 if (!params->target_contents && 91 if (!params->target_contents &&
136 params->url.scheme() == chrome::kChromeUIScheme && 92 params->url.scheme() == chrome::kChromeUIScheme &&
137 (params->url.host() == chrome::kChromeUISettingsHost || 93 (params->url.host() == chrome::kChromeUISettingsHost ||
138 params->url.host() == chrome::kChromeUIBookmarksHost)) { 94 params->url.host() == chrome::kChromeUIBookmarksHost)) {
139 Profile* profile = 95 Profile* profile =
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 target->controller().LoadURL( 483 target->controller().LoadURL(
528 params->url, params->referrer, params->transition); 484 params->url, params->referrer, params->transition);
529 } 485 }
530 486
531 // If the singleton tab isn't already selected, select it. 487 // If the singleton tab isn't already selected, select it.
532 if (params->source_contents != params->target_contents) 488 if (params->source_contents != params->target_contents)
533 params->browser->ActivateTabAt(singleton_index, user_initiated); 489 params->browser->ActivateTabAt(singleton_index, user_initiated);
534 } 490 }
535 } 491 }
536 492
493 // Returns the index of an existing singleton tab in |params->browser| matching
494 // the URL specified in |params|.
495 int GetIndexOfSingletonTab(browser::NavigateParams* params) {
496 if (params->disposition != SINGLETON_TAB)
497 return -1;
498
499 // In case the URL was rewritten by the BrowserURLHandler we need to ensure
500 // that we do not open another URL that will get redirected to the rewritten
501 // URL.
502 GURL rewritten_url(params->url);
503 bool reverse_on_redirect = false;
504 BrowserURLHandler::GetInstance()->RewriteURLIfNecessary(
505 &rewritten_url,
506 params->browser->profile(),
507 &reverse_on_redirect);
508
509 // If there are several matches: prefer the active tab by starting there.
510 int start_index = std::max(0, params->browser->active_index());
511 int tab_count = params->browser->tab_count();
512 for (int i = 0; i < tab_count; ++i) {
513 int tab_index = (start_index + i) % tab_count;
514 TabContentsWrapper* tab =
515 params->browser->GetTabContentsWrapperAt(tab_index);
516
517 url_canon::Replacements<char> replacements;
518 replacements.ClearRef();
519 if (params->path_behavior == browser::NavigateParams::IGNORE_AND_NAVIGATE ||
520 params->path_behavior == browser::NavigateParams::IGNORE_AND_STAY_PUT) {
521 replacements.ClearPath();
522 replacements.ClearQuery();
523 }
524
525 if (CompareURLsWithReplacements(tab->tab_contents()->GetURL(),
526 params->url, replacements) ||
527 CompareURLsWithReplacements(tab->tab_contents()->GetURL(),
528 rewritten_url, replacements)) {
529 params->target_contents = tab;
530 return tab_index;
531 }
532 }
533
534 return -1;
535 }
536
537 } // namespace browser 537 } // namespace browser
OLDNEW
« 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