1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/browser_navigator_browsertest.h"
7 #include "base/command_line.h"
8 #include "base/prefs/pref_service.h"
9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/app/chrome_command_ids.h"
12 #include "chrome/browser/prefs/incognito_mode_prefs.h"
13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/browser_commands.h"
16 #include "chrome/browser/ui/browser_finder.h"
17 #include "chrome/browser/ui/browser_navigator.h"
18 #include "chrome/browser/ui/browser_tabstrip.h"
19 #include "chrome/browser/ui/browser_window.h"
20 #include "chrome/browser/ui/chrome_pages.h"
21 #include "chrome/browser/ui/singleton_tabs.h"
22 #include "chrome/browser/ui/tabs/tab_strip_model.h"
23 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/pref_names.h"
25 #include "chrome/common/url_constants.h"
26 #include "chrome/test/base/ui_test_utils.h"
27 #include "content/public/browser/notification_service.h"
28 #include "content/public/browser/notification_types.h"
29 #include "content/public/browser/web_contents.h"
31 using content::WebContents
;
35 const char kExpectedTitle
[] = "PASSED!";
36 const char kEchoTitleCommand
[] = "echotitle";
39 return GURL("http://www.google.com/");
42 GURL
GetSettingsURL() {
43 return GURL(chrome::kChromeUISettingsURL
);
46 GURL
GetContentSettingsURL() {
47 return GetSettingsURL().Resolve(chrome::kContentSettingsExceptionsSubPage
);
50 GURL
GetClearBrowsingDataURL() {
51 return GetSettingsURL().Resolve(chrome::kClearBrowserDataSubPage
);
54 // Converts long uber URLs ("chrome://chrome/foo/") to short (virtual) URLs
55 // ("chrome://foo/"). This should be used to convert the return value of
56 // WebContentsImpl::GetURL before comparison because it can return either the
57 // real URL or the virtual URL.
58 GURL
ShortenUberURL(const GURL
& url
) {
59 std::string url_string
= url
.spec();
60 const std::string long_prefix
= "chrome://chrome/";
61 const std::string short_prefix
= "chrome://";
62 if (url_string
.find(long_prefix
) != 0)
64 url_string
.replace(0, long_prefix
.length(), short_prefix
);
65 return GURL(url_string
);
70 chrome::NavigateParams
BrowserNavigatorTest::MakeNavigateParams() const {
71 return MakeNavigateParams(browser());
74 chrome::NavigateParams
BrowserNavigatorTest::MakeNavigateParams(
75 Browser
* browser
) const {
76 chrome::NavigateParams
params(browser
, GetGoogleURL(),
77 content::PAGE_TRANSITION_LINK
);
78 params
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
82 bool BrowserNavigatorTest::OpenPOSTURLInNewForegroundTabAndGetTitle(
83 const GURL
& url
, const std::string
& post_data
, bool is_browser_initiated
,
84 base::string16
* title
) {
85 chrome::NavigateParams
param(MakeNavigateParams());
86 param
.disposition
= NEW_FOREGROUND_TAB
;
88 param
.is_renderer_initiated
= !is_browser_initiated
;
89 param
.uses_post
= true;
90 param
.browser_initiated_post_data
= new base::RefCountedStaticMemory(
91 post_data
.data(), post_data
.size());
93 ui_test_utils::NavigateToURL(¶m
);
94 if (!param
.target_contents
)
97 // Navigate() should have opened the contents in new foreground tab in the
99 EXPECT_EQ(browser(), param
.browser
);
100 EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(),
101 param
.target_contents
);
102 // We should have one window, with one tab.
103 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
104 EXPECT_EQ(2, browser()->tab_strip_model()->count());
106 *title
= param
.target_contents
->GetTitle();
110 Browser
* BrowserNavigatorTest::CreateEmptyBrowserForType(Browser::Type type
,
112 Browser
* browser
= new Browser(
113 Browser::CreateParams(type
, profile
, chrome::GetActiveDesktop()));
114 chrome::AddTabAt(browser
, GURL(), -1, true);
118 Browser
* BrowserNavigatorTest::CreateEmptyBrowserForApp(Profile
* profile
) {
119 Browser
* browser
= new Browser(
120 Browser::CreateParams::CreateForApp(
121 "Test", false /* trusted_source */, gfx::Rect(), profile
,
122 chrome::GetActiveDesktop()));
123 chrome::AddTabAt(browser
, GURL(), -1, true);
127 WebContents
* BrowserNavigatorTest::CreateWebContents() {
128 content::WebContents::CreateParams
create_params(browser()->profile());
129 content::WebContents
* base_web_contents
=
130 browser()->tab_strip_model()->GetActiveWebContents();
131 if (base_web_contents
) {
132 create_params
.initial_size
=
133 base_web_contents
->GetContainerBounds().size();
135 return WebContents::Create(create_params
);
138 void BrowserNavigatorTest::RunSuppressTest(WindowOpenDisposition disposition
) {
139 GURL old_url
= browser()->tab_strip_model()->GetActiveWebContents()->GetURL();
140 chrome::NavigateParams
p(MakeNavigateParams());
141 p
.disposition
= disposition
;
142 chrome::Navigate(&p
);
144 // Nothing should have happened as a result of Navigate();
145 EXPECT_EQ(1, browser()->tab_strip_model()->count());
146 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
148 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
151 void BrowserNavigatorTest::RunUseNonIncognitoWindowTest(const GURL
& url
) {
152 Browser
* incognito_browser
= CreateIncognitoBrowser();
154 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
155 EXPECT_EQ(1, browser()->tab_strip_model()->count());
156 EXPECT_EQ(1, incognito_browser
->tab_strip_model()->count());
158 // Navigate to the page.
159 chrome::NavigateParams
p(MakeNavigateParams(incognito_browser
));
160 p
.disposition
= SINGLETON_TAB
;
162 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
163 chrome::Navigate(&p
);
165 // This page should be opened in browser() window.
166 EXPECT_NE(incognito_browser
, p
.browser
);
167 EXPECT_EQ(browser(), p
.browser
);
168 EXPECT_EQ(2, browser()->tab_strip_model()->count());
170 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
173 void BrowserNavigatorTest::RunDoNothingIfIncognitoIsForcedTest(
175 Browser
* browser
= CreateIncognitoBrowser();
177 // Set kIncognitoModeAvailability to FORCED.
178 PrefService
* prefs1
= browser
->profile()->GetPrefs();
179 prefs1
->SetInteger(prefs::kIncognitoModeAvailability
,
180 IncognitoModePrefs::FORCED
);
181 PrefService
* prefs2
= browser
->profile()->GetOriginalProfile()->GetPrefs();
182 prefs2
->SetInteger(prefs::kIncognitoModeAvailability
,
183 IncognitoModePrefs::FORCED
);
185 // Navigate to the page.
186 chrome::NavigateParams
p(MakeNavigateParams(browser
));
187 p
.disposition
= OFF_THE_RECORD
;
189 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
190 chrome::Navigate(&p
);
192 // The page should not be opened.
193 EXPECT_EQ(browser
, p
.browser
);
194 EXPECT_EQ(1, browser
->tab_strip_model()->count());
195 EXPECT_EQ(GURL(url::kAboutBlankURL
),
196 browser
->tab_strip_model()->GetActiveWebContents()->GetURL());
199 void BrowserNavigatorTest::SetUpCommandLine(base::CommandLine
* command_line
) {
200 // Disable settings-in-a-window so that we can use the settings page and
201 // sub-pages to test browser navigation.
202 command_line
->AppendSwitch(::switches::kDisableSettingsWindow
);
205 void BrowserNavigatorTest::Observe(
207 const content::NotificationSource
& source
,
208 const content::NotificationDetails
& details
) {
210 case content::NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED
: {
211 ++this->created_tab_contents_count_
;
222 // This test verifies that when a navigation occurs within a tab, the tab count
223 // of the Browser remains the same and the current tab bears the loaded URL.
224 // Note that network URLs are not actually loaded in tests, so this also tests
225 // that error pages leave the intended URL in the address bar.
226 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_CurrentTab
) {
227 ui_test_utils::NavigateToURL(browser(), GetGoogleURL());
228 EXPECT_EQ(GetGoogleURL(),
229 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
230 // We should have one window with one tab.
231 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
232 EXPECT_EQ(1, browser()->tab_strip_model()->count());
235 // This test verifies that a singleton tab is refocused if one is already opened
236 // in another or an existing window, or added if it is not.
237 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_SingletonTabExisting
) {
238 GURL
singleton_url1("http://maps.google.com/");
240 // Register for a notification if an additional WebContents was instantiated.
241 // Opening a Singleton tab that is already opened should not be opening a new
242 // tab nor be creating a new WebContents object.
243 content::NotificationRegistrar registrar
;
245 // As the registrar object goes out of scope, this will get unregistered
247 content::NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED
,
248 content::NotificationService::AllSources());
250 chrome::AddSelectedTabWithURL(browser(), singleton_url1
,
251 content::PAGE_TRANSITION_LINK
);
252 chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(),
253 content::PAGE_TRANSITION_LINK
);
255 // We should have one browser with 3 tabs, the 3rd selected.
256 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
257 EXPECT_EQ(2, browser()->tab_strip_model()->active_index());
259 unsigned int previous_tab_contents_count
=
260 created_tab_contents_count_
= 0;
262 // Navigate to singleton_url1.
263 chrome::NavigateParams
p(MakeNavigateParams());
264 p
.disposition
= SINGLETON_TAB
;
265 p
.url
= singleton_url1
;
266 chrome::Navigate(&p
);
268 // The middle tab should now be selected.
269 EXPECT_EQ(browser(), p
.browser
);
270 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
272 // No tab contents should have been created
273 EXPECT_EQ(previous_tab_contents_count
,
274 created_tab_contents_count_
);
277 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
278 Disposition_SingletonTabRespectingRef
) {
279 GURL
singleton_ref_url1("http://maps.google.com/#a");
280 GURL
singleton_ref_url2("http://maps.google.com/#b");
281 GURL
singleton_ref_url3("http://maps.google.com/");
283 chrome::AddSelectedTabWithURL(browser(), singleton_ref_url1
,
284 content::PAGE_TRANSITION_LINK
);
286 // We should have one browser with 2 tabs, 2nd selected.
287 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
288 EXPECT_EQ(2, browser()->tab_strip_model()->count());
289 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
291 // Navigate to singleton_url2.
292 chrome::NavigateParams
p(MakeNavigateParams());
293 p
.disposition
= SINGLETON_TAB
;
294 p
.url
= singleton_ref_url2
;
295 chrome::Navigate(&p
);
297 // We should now have 2 tabs, the 2nd one selected.
298 EXPECT_EQ(browser(), p
.browser
);
299 EXPECT_EQ(2, browser()->tab_strip_model()->count());
300 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
302 // Navigate to singleton_url2, but with respect ref set.
303 p
= MakeNavigateParams();
304 p
.disposition
= SINGLETON_TAB
;
305 p
.url
= singleton_ref_url2
;
306 p
.ref_behavior
= chrome::NavigateParams::RESPECT_REF
;
307 chrome::Navigate(&p
);
309 // We should now have 3 tabs, the 3th one selected.
310 EXPECT_EQ(browser(), p
.browser
);
311 EXPECT_EQ(3, browser()->tab_strip_model()->count());
312 EXPECT_EQ(2, browser()->tab_strip_model()->active_index());
314 // Navigate to singleton_url3.
315 p
= MakeNavigateParams();
316 p
.disposition
= SINGLETON_TAB
;
317 p
.url
= singleton_ref_url3
;
318 p
.ref_behavior
= chrome::NavigateParams::RESPECT_REF
;
319 chrome::Navigate(&p
);
321 // We should now have 4 tabs, the 4th one selected.
322 EXPECT_EQ(browser(), p
.browser
);
323 EXPECT_EQ(4, browser()->tab_strip_model()->count());
324 EXPECT_EQ(3, browser()->tab_strip_model()->active_index());
327 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
328 Disposition_SingletonTabNoneExisting
) {
329 GURL
singleton_url1("http://maps.google.com/");
331 // We should have one browser with 1 tab.
332 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
333 EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
335 // Navigate to singleton_url1.
336 chrome::NavigateParams
p(MakeNavigateParams());
337 p
.disposition
= SINGLETON_TAB
;
338 p
.url
= singleton_url1
;
339 chrome::Navigate(&p
);
341 // We should now have 2 tabs, the 2nd one selected.
342 EXPECT_EQ(browser(), p
.browser
);
343 EXPECT_EQ(2, browser()->tab_strip_model()->count());
344 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
347 // This test verifies that when a navigation results in a foreground tab, the
348 // tab count of the Browser increases and the selected tab shifts to the new
350 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_NewForegroundTab
) {
351 WebContents
* old_contents
=
352 browser()->tab_strip_model()->GetActiveWebContents();
353 chrome::NavigateParams
p(MakeNavigateParams());
354 p
.disposition
= NEW_FOREGROUND_TAB
;
355 chrome::Navigate(&p
);
356 EXPECT_NE(old_contents
,
357 browser()->tab_strip_model()->GetActiveWebContents());
358 EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(),
360 EXPECT_EQ(2, browser()->tab_strip_model()->count());
363 // This test verifies that when a navigation results in a background tab, the
364 // tab count of the Browser increases but the selected tab remains the same.
365 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_NewBackgroundTab
) {
366 WebContents
* old_contents
=
367 browser()->tab_strip_model()->GetActiveWebContents();
368 chrome::NavigateParams
p(MakeNavigateParams());
369 p
.disposition
= NEW_BACKGROUND_TAB
;
370 chrome::Navigate(&p
);
371 WebContents
* new_contents
=
372 browser()->tab_strip_model()->GetActiveWebContents();
373 // The selected tab should have remained unchanged, since the new tab was
374 // opened in the background.
375 EXPECT_EQ(old_contents
, new_contents
);
376 EXPECT_EQ(2, browser()->tab_strip_model()->count());
379 // This test verifies that when a navigation requiring a new foreground tab
380 // occurs in a Browser that cannot host multiple tabs, the new foreground tab
381 // is created in an existing compatible Browser.
382 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
383 Disposition_IncompatibleWindow_Existing
) {
384 // Open a foreground tab in a window that cannot open popups when there is an
385 // existing compatible window somewhere else that they can be opened within.
386 Browser
* popup
= CreateEmptyBrowserForType(Browser::TYPE_POPUP
,
387 browser()->profile());
388 chrome::NavigateParams
p(MakeNavigateParams(popup
));
389 p
.disposition
= NEW_FOREGROUND_TAB
;
390 chrome::Navigate(&p
);
392 // Navigate() should have opened the tab in a different browser since the
393 // one we supplied didn't support additional tabs.
394 EXPECT_NE(popup
, p
.browser
);
396 // Since browser() is an existing compatible tabbed browser, it should have
397 // opened the tab there.
398 EXPECT_EQ(browser(), p
.browser
);
400 // We should be left with 2 windows, the popup with one tab and the browser()
401 // provided by the framework with two.
402 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
403 EXPECT_EQ(1, popup
->tab_strip_model()->count());
404 EXPECT_EQ(2, browser()->tab_strip_model()->count());
407 // This test verifies that when a navigation requiring a new foreground tab
408 // occurs in a Browser that cannot host multiple tabs and no compatible Browser
409 // that can is open, a compatible Browser is created.
410 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
411 Disposition_IncompatibleWindow_NoExisting
) {
412 // We want to simulate not being able to find an existing window compatible
413 // with our non-tabbed browser window so Navigate() is forced to create a
414 // new compatible window. Because browser() supplied by the in-process
415 // browser testing framework is compatible with browser()->profile(), we
416 // need a different profile, and creating a popup window with an incognito
417 // profile is a quick and dirty way of achieving this.
418 Browser
* popup
= CreateEmptyBrowserForType(
420 browser()->profile()->GetOffTheRecordProfile());
421 chrome::NavigateParams
p(MakeNavigateParams(popup
));
422 p
.disposition
= NEW_FOREGROUND_TAB
;
423 chrome::Navigate(&p
);
425 // Navigate() should have opened the tab in a different browser since the
426 // one we supplied didn't support additional tabs.
427 EXPECT_NE(popup
, p
.browser
);
429 // This time, browser() is _not_ compatible with popup since it is not an
431 EXPECT_NE(browser(), p
.browser
);
433 // We should have three windows, each with one tab:
434 // 1. the browser() provided by the framework (unchanged in this test)
435 // 2. the incognito popup we created originally
436 // 3. the new incognito tabbed browser that was created by Navigate().
437 EXPECT_EQ(3u, chrome::GetTotalBrowserCount());
438 EXPECT_EQ(1, browser()->tab_strip_model()->count());
439 EXPECT_EQ(1, popup
->tab_strip_model()->count());
440 EXPECT_EQ(1, p
.browser
->tab_strip_model()->count());
441 EXPECT_TRUE(p
.browser
->is_type_tabbed());
444 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
445 // from a normal Browser results in a new Browser with TYPE_POPUP.
446 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_NewPopup
) {
447 chrome::NavigateParams
p(MakeNavigateParams());
448 p
.disposition
= NEW_POPUP
;
449 p
.window_bounds
= gfx::Rect(0, 0, 200, 200);
450 // Wait for new popup to to load and gain focus.
451 ui_test_utils::NavigateToURL(&p
);
453 // Navigate() should have opened a new, focused popup window.
454 EXPECT_NE(browser(), p
.browser
);
456 // TODO(stevenjb): Enable this test. See: crbug.com/79493
457 EXPECT_TRUE(p
.browser
->window()->IsActive());
459 EXPECT_TRUE(p
.browser
->is_type_popup());
460 EXPECT_FALSE(p
.browser
->is_app());
462 // We should have two windows, the browser() provided by the framework and the
464 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
465 EXPECT_EQ(1, browser()->tab_strip_model()->count());
466 EXPECT_EQ(1, p
.browser
->tab_strip_model()->count());
469 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
470 // from a normal Browser results in a new Browser with is_app() true.
471 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_NewPopup_ExtensionId
) {
472 chrome::NavigateParams
p(MakeNavigateParams());
473 p
.disposition
= NEW_POPUP
;
474 p
.extension_app_id
= "extensionappid";
475 p
.window_bounds
= gfx::Rect(0, 0, 200, 200);
476 // Wait for new popup to to load and gain focus.
477 ui_test_utils::NavigateToURL(&p
);
479 // Navigate() should have opened a new, focused popup window.
480 EXPECT_NE(browser(), p
.browser
);
481 EXPECT_TRUE(p
.browser
->is_type_popup());
482 EXPECT_TRUE(p
.browser
->is_app());
484 // We should have two windows, the browser() provided by the framework and the
486 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
487 EXPECT_EQ(1, browser()->tab_strip_model()->count());
488 EXPECT_EQ(1, p
.browser
->tab_strip_model()->count());
491 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
492 // from a normal popup results in a new Browser with TYPE_POPUP.
493 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_NewPopupFromPopup
) {
495 chrome::NavigateParams
p1(MakeNavigateParams());
496 p1
.disposition
= NEW_POPUP
;
497 p1
.window_bounds
= gfx::Rect(0, 0, 200, 200);
498 chrome::Navigate(&p1
);
499 // Open another popup.
500 chrome::NavigateParams
p2(MakeNavigateParams(p1
.browser
));
501 p2
.disposition
= NEW_POPUP
;
502 p2
.window_bounds
= gfx::Rect(0, 0, 200, 200);
503 chrome::Navigate(&p2
);
505 // Navigate() should have opened a new normal popup window.
506 EXPECT_NE(p1
.browser
, p2
.browser
);
507 EXPECT_TRUE(p2
.browser
->is_type_popup());
508 EXPECT_FALSE(p2
.browser
->is_app());
510 // We should have three windows, the browser() provided by the framework,
511 // the first popup window, and the second popup window.
512 EXPECT_EQ(3u, chrome::GetTotalBrowserCount());
513 EXPECT_EQ(1, browser()->tab_strip_model()->count());
514 EXPECT_EQ(1, p1
.browser
->tab_strip_model()->count());
515 EXPECT_EQ(1, p2
.browser
->tab_strip_model()->count());
518 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
519 // from an app frame results in a new Browser with TYPE_POPUP.
520 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
521 Disposition_NewPopupFromAppWindow
) {
522 Browser
* app_browser
= CreateEmptyBrowserForApp(browser()->profile());
523 chrome::NavigateParams
p(MakeNavigateParams(app_browser
));
524 p
.disposition
= NEW_POPUP
;
525 p
.window_bounds
= gfx::Rect(0, 0, 200, 200);
526 chrome::Navigate(&p
);
528 // Navigate() should have opened a new popup app window.
529 EXPECT_NE(app_browser
, p
.browser
);
530 EXPECT_NE(browser(), p
.browser
);
531 EXPECT_TRUE(p
.browser
->is_type_popup());
532 EXPECT_TRUE(p
.browser
->is_app());
534 // We should now have three windows, the app window, the app popup it created,
535 // and the original browser() provided by the framework.
536 EXPECT_EQ(3u, chrome::GetTotalBrowserCount());
537 EXPECT_EQ(1, browser()->tab_strip_model()->count());
538 EXPECT_EQ(1, app_browser
->tab_strip_model()->count());
539 EXPECT_EQ(1, p
.browser
->tab_strip_model()->count());
542 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
543 // from an app popup results in a new Browser also of TYPE_POPUP.
544 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
545 Disposition_NewPopupFromAppPopup
) {
546 Browser
* app_browser
= CreateEmptyBrowserForApp(browser()->profile());
547 // Open an app popup.
548 chrome::NavigateParams
p1(MakeNavigateParams(app_browser
));
549 p1
.disposition
= NEW_POPUP
;
550 p1
.window_bounds
= gfx::Rect(0, 0, 200, 200);
551 chrome::Navigate(&p1
);
552 // Now open another app popup.
553 chrome::NavigateParams
p2(MakeNavigateParams(p1
.browser
));
554 p2
.disposition
= NEW_POPUP
;
555 p2
.window_bounds
= gfx::Rect(0, 0, 200, 200);
556 chrome::Navigate(&p2
);
558 // Navigate() should have opened a new popup app window.
559 EXPECT_NE(browser(), p1
.browser
);
560 EXPECT_NE(p1
.browser
, p2
.browser
);
561 EXPECT_TRUE(p2
.browser
->is_type_popup());
562 EXPECT_TRUE(p2
.browser
->is_app());
564 // We should now have four windows, the app window, the first app popup,
565 // the second app popup, and the original browser() provided by the framework.
566 EXPECT_EQ(4u, chrome::GetTotalBrowserCount());
567 EXPECT_EQ(1, browser()->tab_strip_model()->count());
568 EXPECT_EQ(1, app_browser
->tab_strip_model()->count());
569 EXPECT_EQ(1, p1
.browser
->tab_strip_model()->count());
570 EXPECT_EQ(1, p2
.browser
->tab_strip_model()->count());
573 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
574 // from an extension app tab results in a new Browser with TYPE_APP_POPUP.
575 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
576 Disposition_NewPopupFromExtensionApp
) {
580 // This test verifies that navigating with window_action = SHOW_WINDOW_INACTIVE
581 // does not focus a new new popup window.
582 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_NewPopupUnfocused
) {
583 chrome::NavigateParams
p(MakeNavigateParams());
584 p
.disposition
= NEW_POPUP
;
585 p
.window_bounds
= gfx::Rect(0, 0, 200, 200);
586 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW_INACTIVE
;
587 // Wait for new popup to load (and gain focus if the test fails).
588 ui_test_utils::NavigateToURL(&p
);
590 // Navigate() should have opened a new, unfocused, popup window.
591 EXPECT_NE(browser(), p
.browser
);
592 EXPECT_EQ(Browser::TYPE_POPUP
, p
.browser
->type());
594 // TODO(stevenjb): Enable this test. See: crbug.com/79493
595 EXPECT_FALSE(p
.browser
->window()->IsActive());
599 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
600 // and trusted_source = true results in a new Browser where is_trusted_source()
602 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_NewPopupTrusted
) {
603 chrome::NavigateParams
p(MakeNavigateParams());
604 p
.disposition
= NEW_POPUP
;
605 p
.trusted_source
= true;
606 p
.window_bounds
= gfx::Rect(0, 0, 200, 200);
607 // Wait for new popup to to load and gain focus.
608 ui_test_utils::NavigateToURL(&p
);
610 // Navigate() should have opened a new popup window of TYPE_TRUSTED_POPUP.
611 EXPECT_NE(browser(), p
.browser
);
612 EXPECT_TRUE(p
.browser
->is_type_popup());
613 EXPECT_TRUE(p
.browser
->is_trusted_source());
617 // This test verifies that navigating with WindowOpenDisposition = NEW_WINDOW
618 // always opens a new window.
619 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_NewWindow
) {
620 chrome::NavigateParams
p(MakeNavigateParams());
621 p
.disposition
= NEW_WINDOW
;
622 chrome::Navigate(&p
);
624 // Navigate() should have opened a new toplevel window.
625 EXPECT_NE(browser(), p
.browser
);
626 EXPECT_TRUE(p
.browser
->is_type_tabbed());
628 // We should now have two windows, the browser() provided by the framework and
629 // the new normal window.
630 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
631 EXPECT_EQ(1, browser()->tab_strip_model()->count());
632 EXPECT_EQ(1, p
.browser
->tab_strip_model()->count());
635 // This test verifies that navigating with WindowOpenDisposition = INCOGNITO
636 // opens a new incognito window if no existing incognito window is present.
637 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_Incognito
) {
638 chrome::NavigateParams
p(MakeNavigateParams());
639 p
.disposition
= OFF_THE_RECORD
;
640 chrome::Navigate(&p
);
642 // Navigate() should have opened a new toplevel incognito window.
643 EXPECT_NE(browser(), p
.browser
);
644 EXPECT_EQ(browser()->profile()->GetOffTheRecordProfile(),
645 p
.browser
->profile());
647 // |source_contents| should be set to NULL because the profile for the new
648 // page is different from the originating page.
649 EXPECT_EQ(NULL
, p
.source_contents
);
651 // We should now have two windows, the browser() provided by the framework and
652 // the new incognito window.
653 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
654 EXPECT_EQ(1, browser()->tab_strip_model()->count());
655 EXPECT_EQ(1, p
.browser
->tab_strip_model()->count());
658 // This test verifies that navigating with WindowOpenDisposition = INCOGNITO
659 // reuses an existing incognito window when possible.
660 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_IncognitoRefocus
) {
661 Browser
* incognito_browser
=
662 CreateEmptyBrowserForType(Browser::TYPE_TABBED
,
663 browser()->profile()->GetOffTheRecordProfile());
664 chrome::NavigateParams
p(MakeNavigateParams());
665 p
.disposition
= OFF_THE_RECORD
;
666 chrome::Navigate(&p
);
668 // Navigate() should have opened a new tab in the existing incognito window.
669 EXPECT_NE(browser(), p
.browser
);
670 EXPECT_EQ(p
.browser
, incognito_browser
);
672 // We should now have two windows, the browser() provided by the framework and
673 // the incognito window we opened earlier.
674 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
675 EXPECT_EQ(1, browser()->tab_strip_model()->count());
676 EXPECT_EQ(2, incognito_browser
->tab_strip_model()->count());
679 // This test verifies that no navigation action occurs when
680 // WindowOpenDisposition = SUPPRESS_OPEN.
681 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_SuppressOpen
) {
682 RunSuppressTest(SUPPRESS_OPEN
);
685 // This test verifies that no navigation action occurs when
686 // WindowOpenDisposition = SAVE_TO_DISK.
687 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_SaveToDisk
) {
688 RunSuppressTest(SAVE_TO_DISK
);
691 // This test verifies that no navigation action occurs when
692 // WindowOpenDisposition = IGNORE_ACTION.
693 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Disposition_IgnoreAction
) {
694 RunSuppressTest(IGNORE_ACTION
);
697 // This tests adding a foreground tab with a predefined WebContents.
698 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, TargetContents_ForegroundTab
) {
699 chrome::NavigateParams
p(MakeNavigateParams());
700 p
.disposition
= NEW_FOREGROUND_TAB
;
701 p
.target_contents
= CreateWebContents();
702 chrome::Navigate(&p
);
704 // Navigate() should have opened the contents in a new foreground in the
706 EXPECT_EQ(browser(), p
.browser
);
707 EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(),
710 // We should have one window, with two tabs.
711 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
712 EXPECT_EQ(2, browser()->tab_strip_model()->count());
716 // This tests adding a popup with a predefined WebContents.
717 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, DISABLED_TargetContents_Popup
) {
718 chrome::NavigateParams
p(MakeNavigateParams());
719 p
.disposition
= NEW_POPUP
;
720 p
.target_contents
= CreateWebContents();
721 p
.window_bounds
= gfx::Rect(10, 10, 500, 500);
722 chrome::Navigate(&p
);
724 // Navigate() should have opened a new popup window.
725 EXPECT_NE(browser(), p
.browser
);
726 EXPECT_TRUE(p
.browser
->is_type_popup());
727 EXPECT_FALSE(p
.browser
->is_app());
729 // The web platform is weird. The window bounds specified in
730 // |p.window_bounds| are used as follows:
731 // - the origin is used to position the window
732 // - the size is used to size the WebContents of the window.
733 // As such the position of the resulting window will always match
734 // p.window_bounds.origin(), but its size will not. We need to match
735 // the size against the selected tab's view's container size.
736 // Only Windows positions the window according to |p.window_bounds.origin()| -
737 // on Mac the window is offset from the opener and on Linux it always opens
739 EXPECT_EQ(p
.window_bounds
.origin(),
740 p
.browser
->window()->GetRestoredBounds().origin());
741 // All platforms should respect size however provided width > 400 (Mac has a
742 // minimum window width of 400).
743 EXPECT_EQ(p
.window_bounds
.size(),
744 p
.target_contents
->GetContainerBounds().size());
746 // We should have two windows, the new popup and the browser() provided by the
748 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
749 EXPECT_EQ(1, browser()->tab_strip_model()->count());
750 EXPECT_EQ(1, p
.browser
->tab_strip_model()->count());
754 // This tests adding a tab at a specific index.
755 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, Tabstrip_InsertAtIndex
) {
756 // This is not meant to be a comprehensive test of whether or not the tab
757 // implementation of the browser observes the insertion index. That is
758 // covered by the unit tests for TabStripModel. This merely verifies that
759 // insertion index preference is reflected in common cases.
760 chrome::NavigateParams
p(MakeNavigateParams());
761 p
.disposition
= NEW_FOREGROUND_TAB
;
762 p
.tabstrip_index
= 0;
763 p
.tabstrip_add_types
= TabStripModel::ADD_FORCE_INDEX
;
764 chrome::Navigate(&p
);
766 // Navigate() should have inserted a new tab at slot 0 in the tabstrip.
767 EXPECT_EQ(browser(), p
.browser
);
768 EXPECT_EQ(0, browser()->tab_strip_model()->GetIndexOfWebContents(
769 static_cast<const WebContents
*>(p
.target_contents
)));
771 // We should have one window - the browser() provided by the framework.
772 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
773 EXPECT_EQ(2, browser()->tab_strip_model()->count());
776 // This test verifies that constructing params with disposition = SINGLETON_TAB
777 // and IGNORE_AND_NAVIGATE opens a new tab navigated to the specified URL if
778 // no previous tab with that URL (minus the path) exists.
779 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
780 Disposition_SingletonTabNew_IgnorePath
) {
781 chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(),
782 content::PAGE_TRANSITION_LINK
);
784 // We should have one browser with 2 tabs, the 2nd selected.
785 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
786 EXPECT_EQ(2, browser()->tab_strip_model()->count());
787 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
789 // Navigate to a new singleton tab with a sub-page.
790 chrome::NavigateParams
p(MakeNavigateParams());
791 p
.disposition
= SINGLETON_TAB
;
792 p
.url
= GetContentSettingsURL();
793 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
794 p
.path_behavior
= chrome::NavigateParams::IGNORE_AND_NAVIGATE
;
795 chrome::Navigate(&p
);
797 // The last tab should now be selected and navigated to the sub-page of the
799 EXPECT_EQ(browser(), p
.browser
);
800 EXPECT_EQ(3, browser()->tab_strip_model()->count());
801 EXPECT_EQ(2, browser()->tab_strip_model()->active_index());
802 EXPECT_EQ(GetContentSettingsURL(),
803 ShortenUberURL(browser()->tab_strip_model()->
804 GetActiveWebContents()->GetURL()));
807 // This test verifies that constructing params with disposition = SINGLETON_TAB
808 // and IGNORE_AND_NAVIGATE opens an existing tab with the matching URL (minus
809 // the path) which is navigated to the specified URL.
810 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
811 Disposition_SingletonTabExisting_IgnorePath
) {
812 GURL
singleton_url1(GetSettingsURL());
813 chrome::AddSelectedTabWithURL(browser(), singleton_url1
,
814 content::PAGE_TRANSITION_LINK
);
815 chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(),
816 content::PAGE_TRANSITION_LINK
);
818 // We should have one browser with 3 tabs, the 3rd selected.
819 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
820 EXPECT_EQ(3, browser()->tab_strip_model()->count());
821 EXPECT_EQ(2, browser()->tab_strip_model()->active_index());
823 // Navigate to singleton_url1.
824 chrome::NavigateParams
p(MakeNavigateParams());
825 p
.disposition
= SINGLETON_TAB
;
826 p
.url
= GetContentSettingsURL();
827 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
828 p
.path_behavior
= chrome::NavigateParams::IGNORE_AND_NAVIGATE
;
829 chrome::Navigate(&p
);
831 // The middle tab should now be selected and navigated to the sub-page of the
833 EXPECT_EQ(browser(), p
.browser
);
834 EXPECT_EQ(3, browser()->tab_strip_model()->count());
835 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
836 EXPECT_EQ(GetContentSettingsURL(),
837 ShortenUberURL(browser()->tab_strip_model()->
838 GetActiveWebContents()->GetURL()));
841 // This test verifies that constructing params with disposition = SINGLETON_TAB
842 // and IGNORE_AND_NAVIGATE opens an existing tab with the matching URL (minus
843 // the path) which is navigated to the specified URL.
844 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
845 Disposition_SingletonTabExistingSubPath_IgnorePath
) {
846 GURL
singleton_url1(GetContentSettingsURL());
847 chrome::AddSelectedTabWithURL(browser(), singleton_url1
,
848 content::PAGE_TRANSITION_LINK
);
849 chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(),
850 content::PAGE_TRANSITION_LINK
);
852 // We should have one browser with 3 tabs, the 3rd selected.
853 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
854 EXPECT_EQ(3, browser()->tab_strip_model()->count());
855 EXPECT_EQ(2, browser()->tab_strip_model()->active_index());
857 // Navigate to singleton_url1.
858 chrome::NavigateParams
p(MakeNavigateParams());
859 p
.disposition
= SINGLETON_TAB
;
860 p
.url
= GetClearBrowsingDataURL();
861 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
862 p
.path_behavior
= chrome::NavigateParams::IGNORE_AND_NAVIGATE
;
863 chrome::Navigate(&p
);
865 // The middle tab should now be selected and navigated to the sub-page of the
867 EXPECT_EQ(browser(), p
.browser
);
868 EXPECT_EQ(3, browser()->tab_strip_model()->count());
869 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
870 EXPECT_EQ(GetClearBrowsingDataURL(),
871 ShortenUberURL(browser()->tab_strip_model()->
872 GetActiveWebContents()->GetURL()));
875 // This test verifies that constructing params with disposition = SINGLETON_TAB
876 // and IGNORE_AND_STAY_PUT opens an existing tab with the matching URL (minus
878 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
879 Disposition_SingletonTabExistingSubPath_IgnorePath2
) {
880 GURL
singleton_url1(GetContentSettingsURL());
881 chrome::AddSelectedTabWithURL(browser(), singleton_url1
,
882 content::PAGE_TRANSITION_LINK
);
883 chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(),
884 content::PAGE_TRANSITION_LINK
);
886 // We should have one browser with 3 tabs, the 3rd selected.
887 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
888 EXPECT_EQ(3, browser()->tab_strip_model()->count());
889 EXPECT_EQ(2, browser()->tab_strip_model()->active_index());
891 // Navigate to singleton_url1.
892 chrome::NavigateParams
p(MakeNavigateParams());
893 p
.disposition
= SINGLETON_TAB
;
894 p
.url
= GetClearBrowsingDataURL();
895 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
896 p
.path_behavior
= chrome::NavigateParams::IGNORE_AND_STAY_PUT
;
897 chrome::Navigate(&p
);
899 // The middle tab should now be selected.
900 EXPECT_EQ(browser(), p
.browser
);
901 EXPECT_EQ(3, browser()->tab_strip_model()->count());
902 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
903 EXPECT_EQ(singleton_url1
,
904 ShortenUberURL(browser()->tab_strip_model()->
905 GetActiveWebContents()->GetURL()));
908 // This test verifies that constructing params with disposition = SINGLETON_TAB
909 // and IGNORE_AND_NAVIGATE will update the current tab's URL if the currently
910 // selected tab is a match but has a different path.
911 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
912 Disposition_SingletonTabFocused_IgnorePath
) {
913 GURL
singleton_url_current(GetContentSettingsURL());
914 chrome::AddSelectedTabWithURL(browser(), singleton_url_current
,
915 content::PAGE_TRANSITION_LINK
);
917 // We should have one browser with 2 tabs, the 2nd selected.
918 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
919 EXPECT_EQ(2, browser()->tab_strip_model()->count());
920 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
922 // Navigate to a different settings path.
923 GURL
singleton_url_target(GetClearBrowsingDataURL());
924 chrome::NavigateParams
p(MakeNavigateParams());
925 p
.disposition
= SINGLETON_TAB
;
926 p
.url
= singleton_url_target
;
927 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
928 p
.path_behavior
= chrome::NavigateParams::IGNORE_AND_NAVIGATE
;
929 chrome::Navigate(&p
);
931 // The second tab should still be selected, but navigated to the new path.
932 EXPECT_EQ(browser(), p
.browser
);
933 EXPECT_EQ(2, browser()->tab_strip_model()->count());
934 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
935 EXPECT_EQ(singleton_url_target
,
936 ShortenUberURL(browser()->tab_strip_model()->
937 GetActiveWebContents()->GetURL()));
940 // This test verifies that constructing params with disposition = SINGLETON_TAB
941 // and IGNORE_AND_NAVIGATE will open an existing matching tab with a different
943 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
944 Disposition_SingletonTabExisting_IgnoreQuery
) {
945 int initial_tab_count
= browser()->tab_strip_model()->count();
946 GURL
singleton_url_current("chrome://settings/internet");
947 chrome::AddSelectedTabWithURL(browser(), singleton_url_current
,
948 content::PAGE_TRANSITION_LINK
);
950 EXPECT_EQ(initial_tab_count
+ 1, browser()->tab_strip_model()->count());
951 EXPECT_EQ(initial_tab_count
, browser()->tab_strip_model()->active_index());
953 // Navigate to a different settings path.
954 GURL
singleton_url_target(
955 "chrome://settings/internet?"
956 "servicePath=/profile/ethernet_00aa00aa00aa&networkType=1");
957 chrome::NavigateParams
p(MakeNavigateParams());
958 p
.disposition
= SINGLETON_TAB
;
959 p
.url
= singleton_url_target
;
960 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
961 p
.path_behavior
= chrome::NavigateParams::IGNORE_AND_NAVIGATE
;
962 chrome::Navigate(&p
);
964 // Last tab should still be selected.
965 EXPECT_EQ(browser(), p
.browser
);
966 EXPECT_EQ(initial_tab_count
+ 1, browser()->tab_strip_model()->count());
967 EXPECT_EQ(initial_tab_count
, browser()->tab_strip_model()->active_index());
970 // This test verifies that the settings page isn't opened in the incognito
972 // Disabled until fixed for uber settings: http://crbug.com/111243
973 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
974 DISABLED_Disposition_Settings_UseNonIncognitoWindow
) {
975 RunUseNonIncognitoWindowTest(GetSettingsURL());
978 // This test verifies that the view-source settings page isn't opened in the
980 IN_PROC_BROWSER_TEST_F(
981 BrowserNavigatorTest
,
982 Disposition_ViewSource_Settings_DoNothingIfIncognitoForced
) {
983 std::string
view_source(content::kViewSourceScheme
);
984 view_source
.append(":");
985 view_source
.append(chrome::kChromeUISettingsURL
);
986 RunDoNothingIfIncognitoIsForcedTest(GURL(view_source
));
989 // This test verifies that the view-source settings page isn't opened in the
990 // incognito window even if incognito mode is forced (does nothing in that
992 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
993 Disposition_ViewSource_Settings_UseNonIncognitoWindow
) {
994 std::string
view_source(content::kViewSourceScheme
);
995 view_source
.append(":");
996 view_source
.append(chrome::kChromeUISettingsURL
);
997 RunUseNonIncognitoWindowTest(GURL(view_source
));
1000 // This test verifies that the settings page isn't opened in the incognito
1001 // window from a non-incognito window (bookmark open-in-incognito trigger).
1002 // Disabled until fixed for uber settings: http://crbug.com/111243
1003 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1004 DISABLED_Disposition_Settings_UseNonIncognitoWindowForBookmark
) {
1005 chrome::NavigateParams
params(browser(), GetSettingsURL(),
1006 content::PAGE_TRANSITION_AUTO_BOOKMARK
);
1007 params
.disposition
= OFF_THE_RECORD
;
1009 content::WindowedNotificationObserver
observer(
1010 content::NOTIFICATION_LOAD_STOP
,
1011 content::NotificationService::AllSources());
1012 chrome::Navigate(¶ms
);
1016 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
1017 EXPECT_EQ(GetSettingsURL(),
1018 ShortenUberURL(browser()->tab_strip_model()->
1019 GetActiveWebContents()->GetURL()));
1022 // Settings page is expected to always open in normal mode regardless
1023 // of whether the user is trying to open it in incognito mode or not.
1024 // This test verifies that if incognito mode is forced (by policy), settings
1025 // page doesn't open at all.
1026 // Disabled until fixed for uber settings: http://crbug.com/111243
1027 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1028 DISABLED_Disposition_Settings_DoNothingIfIncognitoIsForced
) {
1029 RunDoNothingIfIncognitoIsForcedTest(GetSettingsURL());
1032 // This test verifies that the bookmarks page isn't opened in the incognito
1034 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1035 Disposition_Bookmarks_UseNonIncognitoWindow
) {
1036 RunUseNonIncognitoWindowTest(GURL(chrome::kChromeUIBookmarksURL
));
1039 // Bookmark manager is expected to always open in normal mode regardless
1040 // of whether the user is trying to open it in incognito mode or not.
1041 // This test verifies that if incognito mode is forced (by policy), bookmark
1042 // manager doesn't open at all.
1043 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1044 Disposition_Bookmarks_DoNothingIfIncognitoIsForced
) {
1045 RunDoNothingIfIncognitoIsForcedTest(GURL(chrome::kChromeUIBookmarksURL
));
1048 // This test makes sure a crashed singleton tab reloads from a new navigation.
1049 // http://crbug.com/396371
1050 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1051 DISABLED_NavigateToCrashedSingletonTab
) {
1052 GURL
singleton_url(GetContentSettingsURL());
1053 WebContents
* web_contents
= chrome::AddSelectedTabWithURL(
1054 browser(), singleton_url
, content::PAGE_TRANSITION_LINK
);
1056 // We should have one browser with 2 tabs, the 2nd selected.
1057 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
1058 EXPECT_EQ(2, browser()->tab_strip_model()->count());
1059 EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
1061 // Kill the singleton tab.
1062 web_contents
->SetIsCrashed(base::TERMINATION_STATUS_PROCESS_CRASHED
, -1);
1063 EXPECT_TRUE(web_contents
->IsCrashed());
1065 chrome::NavigateParams
p(MakeNavigateParams());
1066 p
.disposition
= SINGLETON_TAB
;
1067 p
.url
= singleton_url
;
1068 p
.window_action
= chrome::NavigateParams::SHOW_WINDOW
;
1069 p
.path_behavior
= chrome::NavigateParams::IGNORE_AND_NAVIGATE
;
1070 ui_test_utils::NavigateToURL(&p
);
1072 // The tab should not be sad anymore.
1073 EXPECT_FALSE(web_contents
->IsCrashed());
1076 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1077 NavigateFromDefaultToOptionsInSameTab
) {
1079 content::WindowedNotificationObserver
observer(
1080 content::NOTIFICATION_LOAD_STOP
,
1081 content::NotificationService::AllSources());
1082 chrome::ShowSettings(browser());
1085 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1086 EXPECT_EQ(GetSettingsURL(),
1087 ShortenUberURL(browser()->tab_strip_model()->
1088 GetActiveWebContents()->GetURL()));
1091 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1092 NavigateFromBlankToOptionsInSameTab
) {
1093 chrome::NavigateParams
p(MakeNavigateParams());
1094 p
.url
= GURL(url::kAboutBlankURL
);
1095 ui_test_utils::NavigateToURL(&p
);
1098 content::WindowedNotificationObserver
observer(
1099 content::NOTIFICATION_LOAD_STOP
,
1100 content::NotificationService::AllSources());
1101 chrome::ShowSettings(browser());
1104 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1105 EXPECT_EQ(GetSettingsURL(),
1106 ShortenUberURL(browser()->tab_strip_model()->
1107 GetActiveWebContents()->GetURL()));
1110 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1111 NavigateFromNTPToOptionsInSameTab
) {
1112 chrome::NavigateParams
p(MakeNavigateParams());
1113 p
.url
= GURL(chrome::kChromeUINewTabURL
);
1114 ui_test_utils::NavigateToURL(&p
);
1115 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1116 EXPECT_EQ(GURL(chrome::kChromeUINewTabURL
),
1117 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
1120 content::WindowedNotificationObserver
observer(
1121 content::NOTIFICATION_LOAD_STOP
,
1122 content::NotificationService::AllSources());
1123 chrome::ShowSettings(browser());
1126 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1127 EXPECT_EQ(GetSettingsURL(),
1128 ShortenUberURL(browser()->tab_strip_model()->
1129 GetActiveWebContents()->GetURL()));
1132 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1133 NavigateFromPageToOptionsInNewTab
) {
1134 chrome::NavigateParams
p(MakeNavigateParams());
1135 ui_test_utils::NavigateToURL(&p
);
1136 EXPECT_EQ(GetGoogleURL(),
1137 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
1138 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
1139 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1142 content::WindowedNotificationObserver
observer(
1143 content::NOTIFICATION_LOAD_STOP
,
1144 content::NotificationService::AllSources());
1145 chrome::ShowSettings(browser());
1148 EXPECT_EQ(2, browser()->tab_strip_model()->count());
1149 EXPECT_EQ(GetSettingsURL(),
1150 ShortenUberURL(browser()->tab_strip_model()->
1151 GetActiveWebContents()->GetURL()));
1154 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1155 NavigateFromNTPToOptionsSingleton
) {
1157 content::WindowedNotificationObserver
observer(
1158 content::NOTIFICATION_LOAD_STOP
,
1159 content::NotificationService::AllSources());
1160 chrome::ShowSettings(browser());
1163 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1165 chrome::NewTab(browser());
1166 EXPECT_EQ(2, browser()->tab_strip_model()->count());
1169 content::WindowedNotificationObserver
observer(
1170 content::NOTIFICATION_LOAD_STOP
,
1171 content::NotificationService::AllSources());
1172 chrome::ShowSettings(browser());
1175 EXPECT_EQ(2, browser()->tab_strip_model()->count());
1176 EXPECT_EQ(GetSettingsURL(),
1177 ShortenUberURL(browser()->tab_strip_model()->
1178 GetActiveWebContents()->GetURL()));
1181 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1182 NavigateFromNTPToOptionsPageInSameTab
) {
1184 content::WindowedNotificationObserver
observer(
1185 content::NOTIFICATION_LOAD_STOP
,
1186 content::NotificationService::AllSources());
1187 chrome::ShowClearBrowsingDataDialog(browser());
1190 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1191 EXPECT_EQ(GetClearBrowsingDataURL(),
1192 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
1194 chrome::NewTab(browser());
1195 EXPECT_EQ(2, browser()->tab_strip_model()->count());
1198 content::WindowedNotificationObserver
observer(
1199 content::NOTIFICATION_LOAD_STOP
,
1200 content::NotificationService::AllSources());
1201 chrome::ShowClearBrowsingDataDialog(browser());
1204 EXPECT_EQ(2, browser()->tab_strip_model()->count());
1205 EXPECT_EQ(GetClearBrowsingDataURL(),
1206 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
1209 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1210 NavigateFromOtherTabToSingletonOptions
) {
1212 content::WindowedNotificationObserver
observer(
1213 content::NOTIFICATION_LOAD_STOP
,
1214 content::NotificationService::AllSources());
1215 chrome::ShowSettings(browser());
1219 content::WindowedNotificationObserver
observer(
1220 content::NOTIFICATION_LOAD_STOP
,
1221 content::NotificationService::AllSources());
1222 chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(),
1223 content::PAGE_TRANSITION_LINK
);
1227 // This load should simply cause a tab switch.
1228 chrome::ShowSettings(browser());
1230 EXPECT_EQ(2, browser()->tab_strip_model()->count());
1231 EXPECT_EQ(GetSettingsURL(),
1232 ShortenUberURL(browser()->tab_strip_model()->
1233 GetActiveWebContents()->GetURL()));
1236 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, CloseSingletonTab
) {
1237 for (int i
= 0; i
< 2; ++i
) {
1238 content::WindowedNotificationObserver
observer(
1239 content::NOTIFICATION_LOAD_STOP
,
1240 content::NotificationService::AllSources());
1241 chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(),
1242 content::PAGE_TRANSITION_TYPED
);
1246 browser()->tab_strip_model()->ActivateTabAt(0, true);
1249 content::WindowedNotificationObserver
observer(
1250 content::NOTIFICATION_LOAD_STOP
,
1251 content::NotificationService::AllSources());
1252 chrome::ShowSettings(browser());
1256 EXPECT_TRUE(browser()->tab_strip_model()->CloseWebContentsAt(
1257 2, TabStripModel::CLOSE_USER_GESTURE
));
1258 EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
1261 // TODO(csilv): Update this for uber page. http://crbug.com/111579.
1262 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1263 DISABLED_NavigateFromDefaultToHistoryInSameTab
) {
1265 content::WindowedNotificationObserver
observer(
1266 content::NOTIFICATION_LOAD_STOP
,
1267 content::NotificationService::AllSources());
1268 chrome::ShowHistory(browser());
1271 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1272 EXPECT_EQ(GURL(chrome::kChromeUIHistoryFrameURL
),
1273 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
1276 // TODO(linux_aura) http://crbug.com/163931
1277 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)
1278 #define MAYBE_NavigateFromDefaultToBookmarksInSameTab DISABLED_NavigateFromDefaultToBookmarksInSameTab
1280 #define MAYBE_NavigateFromDefaultToBookmarksInSameTab NavigateFromDefaultToBookmarksInSameTab
1282 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1283 MAYBE_NavigateFromDefaultToBookmarksInSameTab
) {
1285 content::WindowedNotificationObserver
observer(
1286 content::NOTIFICATION_LOAD_STOP
,
1287 content::NotificationService::AllSources());
1288 chrome::ShowBookmarkManager(browser());
1291 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1292 EXPECT_TRUE(StartsWithASCII(
1293 browser()->tab_strip_model()->GetActiveWebContents()->GetURL().spec(),
1294 chrome::kChromeUIBookmarksURL
,
1298 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1299 NavigateFromDefaultToDownloadsInSameTab
) {
1301 content::WindowedNotificationObserver
observer(
1302 content::NOTIFICATION_LOAD_STOP
,
1303 content::NotificationService::AllSources());
1304 chrome::ShowDownloads(browser());
1307 EXPECT_EQ(1, browser()->tab_strip_model()->count());
1308 EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL
),
1309 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
1312 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1313 NavigateWithoutBrowser
) {
1314 // First navigate using the profile of the existing browser window, and
1315 // check that the window is reused.
1316 chrome::NavigateParams
params(browser()->profile(), GetGoogleURL(),
1317 content::PAGE_TRANSITION_LINK
);
1318 ui_test_utils::NavigateToURL(¶ms
);
1319 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
1321 // Now navigate using the incognito profile and check that a new window
1323 chrome::NavigateParams
params_incognito(
1324 browser()->profile()->GetOffTheRecordProfile(),
1325 GetGoogleURL(), content::PAGE_TRANSITION_LINK
);
1326 ui_test_utils::NavigateToURL(¶ms_incognito
);
1327 EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
1330 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
, ViewSourceIsntSingleton
) {
1331 const std::string viewsource_ntp_url
=
1332 std::string(content::kViewSourceScheme
) + ":" +
1333 chrome::kChromeUIVersionURL
;
1335 chrome::NavigateParams
viewsource_params(browser(),
1336 GURL(viewsource_ntp_url
),
1337 content::PAGE_TRANSITION_LINK
);
1338 ui_test_utils::NavigateToURL(&viewsource_params
);
1340 chrome::NavigateParams
singleton_params(browser(),
1341 GURL(chrome::kChromeUIVersionURL
),
1342 content::PAGE_TRANSITION_LINK
);
1343 singleton_params
.disposition
= SINGLETON_TAB
;
1344 EXPECT_EQ(-1, chrome::GetIndexOfSingletonTab(&singleton_params
));
1347 // This test verifies that browser initiated navigations can send requests
1349 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1350 SendBrowserInitiatedRequestUsingPOST
) {
1351 // Uses a test sever to verify POST request.
1352 ASSERT_TRUE(test_server()->Start());
1354 // Open a browser initiated POST request in new foreground tab.
1355 base::string16
expected_title(base::ASCIIToUTF16(kExpectedTitle
));
1356 std::string post_data
= kExpectedTitle
;
1357 base::string16 title
;
1358 ASSERT_TRUE(OpenPOSTURLInNewForegroundTabAndGetTitle(
1359 test_server()->GetURL(kEchoTitleCommand
), post_data
, true, &title
));
1360 EXPECT_EQ(expected_title
, title
);
1363 // This test verifies that renderer initiated navigations can NOT send requests
1365 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest
,
1366 SendRendererInitiatedRequestUsingPOST
) {
1367 // Uses a test sever to verify POST request.
1368 ASSERT_TRUE(test_server()->Start());
1370 // Open a renderer initiated POST request in new foreground tab.
1371 base::string16
expected_title(base::ASCIIToUTF16(kExpectedTitle
));
1372 std::string post_data
= kExpectedTitle
;
1373 base::string16 title
;
1374 ASSERT_TRUE(OpenPOSTURLInNewForegroundTabAndGetTitle(
1375 test_server()->GetURL(kEchoTitleCommand
), post_data
, false, &title
));
1376 EXPECT_NE(expected_title
, title
);