browser_navigator_browsertest.cc revision a02191e04bc25c4935f804f2c080ae28663d096d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_navigator_browsertest.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/chrome_pages.h" 20a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chrome/browser/ui/singleton_tabs.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_view.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kExpectedTitle[] = "PASSED!"; 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kEchoTitleCommand[] = "echotitle"; 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetGoogleURL() { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL("http://www.google.com/"); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetSettingsURL() { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(chrome::kChromeUISettingsURL); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetContentSettingsURL() { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSettingsURL().Resolve(chrome::kContentSettingsExceptionsSubPage); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetClearBrowsingDataURL() { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSettingsURL().Resolve(chrome::kClearBrowserDataSubPage); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Converts long uber URLs ("chrome://chrome/foo/") to short (virtual) URLs 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ("chrome://foo/"). This should be used to convert the return value of 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebContentsImpl::GetURL before comparison because it can return either the 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// real URL or the virtual URL. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ShortenUberURL(const GURL& url) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url_string = url.spec(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string long_prefix = "chrome://chrome/"; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string short_prefix = "chrome://"; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url_string.find(long_prefix) != 0) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_string.replace(0, long_prefix.length(), short_prefix); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(url_string); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome::NavigateParams BrowserNavigatorTest::MakeNavigateParams() const { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return MakeNavigateParams(browser()); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome::NavigateParams BrowserNavigatorTest::MakeNavigateParams( 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser) const { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params(browser, GetGoogleURL(), 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.window_action = chrome::NavigateParams::SHOW_WINDOW; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return params; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)bool BrowserNavigatorTest::OpenPOSTURLInNewForegroundTabAndGetTitle( 84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const GURL& url, const std::string& post_data, bool is_browser_initiated, 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::string16* title) { 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::NavigateParams param(MakeNavigateParams()); 87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.disposition = NEW_FOREGROUND_TAB; 88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.url = url; 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.is_renderer_initiated = !is_browser_initiated; 90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.uses_post = true; 91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.browser_initiated_post_data = new base::RefCountedStaticMemory( 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) post_data.data(), post_data.size()); 93a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_test_utils::NavigateToURL(¶m); 95a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!param.target_contents) 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Navigate() should have opened the contents in new foreground tab in the 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // current Browser. 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(browser(), param.browser); 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(), 102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.target_contents); 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // We should have one window, with one tab. 104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) *title = param.target_contents->GetTitle(); 108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Browser* BrowserNavigatorTest::CreateEmptyBrowserForType(Browser::Type type, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile) { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* browser = new Browser( 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Browser::CreateParams(type, profile, chrome::GetActiveDesktop())); 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::AddTabAt(browser, GURL(), -1, true); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return browser; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 119a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochBrowser* BrowserNavigatorTest::CreateEmptyBrowserForApp(Profile* profile) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = new Browser( 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser::CreateParams::CreateForApp( 122a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "Test", false /* trusted_source */, gfx::Rect(), profile, 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::GetActiveDesktop())); 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::AddTabAt(browser, GURL(), -1, true); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return browser; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebContents* BrowserNavigatorTest::CreateWebContents() { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents::CreateParams create_params(browser()->profile()); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* base_web_contents = 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base_web_contents) { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) create_params.initial_size = 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base_web_contents->GetView()->GetContainerSize(); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebContents::Create(create_params); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserNavigatorTest::RunSuppressTest(WindowOpenDisposition disposition) { 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL old_url = browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = disposition; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nothing should have happened as a result of Navigate(); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(old_url, 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserNavigatorTest::RunUseNonIncognitoWindowTest(const GURL& url) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* incognito_browser = CreateIncognitoBrowser(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, incognito_browser->tab_strip_model()->count()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to the page. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(incognito_browser)); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = url; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This page should be opened in browser() window. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(incognito_browser, p.browser); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url, 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserNavigatorTest::RunDoNothingIfIncognitoIsForcedTest( 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = CreateIncognitoBrowser(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set kIncognitoModeAvailability to FORCED. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs1 = browser->profile()->GetPrefs(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs1->SetInteger(prefs::kIncognitoModeAvailability, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::FORCED); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs2 = browser->profile()->GetOriginalProfile()->GetPrefs(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs2->SetInteger(prefs::kIncognitoModeAvailability, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::FORCED); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to the page. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(browser)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = OFF_THE_RECORD; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = url; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The page should not be opened. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser, p.browser); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser->tab_strip_model()->count()); 19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(GURL(content::kAboutBlankURL), 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents()->GetURL()); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserNavigatorTest::Observe( 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case content::NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED: { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++this->created_tab_contents_count_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation occurs within a tab, the tab count 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of the Browser remains the same and the current tab bears the loaded URL. 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Note that network URLs are not actually loaded in tests, so this also tests 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// that error pages leave the intended URL in the address bar. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_CurrentTab) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GetGoogleURL()); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetGoogleURL(), 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one window with one tab. 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that a singleton tab is refocused if one is already opened 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in another or an existing window, or added if it is not. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabExisting) { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1("http://maps.google.com/"); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Register for a notification if an additional WebContents was instantiated. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Opening a Singleton tab that is already opened should not be opening a new 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tab nor be creating a new WebContents object. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As the registrar object goes out of scope, this will get unregistered 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar.Add(this, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url1, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 3 tabs, the 3rd selected. 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int previous_tab_contents_count = 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) created_tab_contents_count_ = 0; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url1; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The middle tab should now be selected. 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No tab contents should have been created 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(previous_tab_contents_count, 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) created_tab_contents_count_); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabRespectingRef) { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_ref_url1("http://maps.google.com/#a"); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_ref_url2("http://maps.google.com/#b"); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_ref_url3("http://maps.google.com/"); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_ref_url1, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 2 tabs, 2nd selected. 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url2. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_ref_url2; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have 2 tabs, the 2nd one selected. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url2, but with respect ref set. 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p = MakeNavigateParams(); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_ref_url2; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.ref_behavior = chrome::NavigateParams::RESPECT_REF; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have 3 tabs, the 3th one selected. 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url3. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p = MakeNavigateParams(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_ref_url3; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.ref_behavior = chrome::NavigateParams::RESPECT_REF; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have 4 tabs, the 4th one selected. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(4, browser()->tab_strip_model()->count()); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->active_index()); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabNoneExisting) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1("http://maps.google.com/"); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 1 tab. 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url1; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have 2 tabs, the 2nd one selected. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation results in a foreground tab, the 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tab count of the Browser increases and the selected tab shifts to the new 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// foreground tab. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewForegroundTab) { 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* old_contents = 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(old_contents, 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(), 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents); 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation results in a background tab, the 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tab count of the Browser increases but the selected tab remains the same. 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewBackgroundTab) { 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* old_contents = 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_BACKGROUND_TAB; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* new_contents = 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The selected tab should have remained unchanged, since the new tab was 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // opened in the background. 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(old_contents, new_contents); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation requiring a new foreground tab 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// occurs in a Browser that cannot host multiple tabs, the new foreground tab 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is created in an existing compatible Browser. 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_IncompatibleWindow_Existing) { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a foreground tab in a window that cannot open popups when there is an 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // existing compatible window somewhere else that they can be opened within. 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup = CreateEmptyBrowserForType(Browser::TYPE_POPUP, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(popup)); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened the tab in a different browser since the 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one we supplied didn't support additional tabs. 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(popup, p.browser); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Since browser() is an existing compatible tabbed browser, it should have 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // opened the tab there. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should be left with 2 windows, the popup with one tab and the browser() 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // provided by the framework with two. 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, popup->tab_strip_model()->count()); 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation requiring a new foreground tab 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// occurs in a Browser that cannot host multiple tabs and no compatible Browser 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that can is open, a compatible Browser is created. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_IncompatibleWindow_NoExisting) { 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We want to simulate not being able to find an existing window compatible 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with our non-tabbed browser window so Navigate() is forced to create a 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new compatible window. Because browser() supplied by the in-process 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser testing framework is compatible with browser()->profile(), we 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // need a different profile, and creating a popup window with an incognito 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile is a quick and dirty way of achieving this. 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup = CreateEmptyBrowserForType( 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser::TYPE_POPUP, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile()); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(popup)); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened the tab in a different browser since the 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one we supplied didn't support additional tabs. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(popup, p.browser); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This time, browser() is _not_ compatible with popup since it is not an 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incognito window. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have three windows, each with one tab: 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1. the browser() provided by the framework (unchanged in this test) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2. the incognito popup we created originally 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3. the new incognito tabbed browser that was created by Navigate(). 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3u, chrome::GetTotalBrowserCount()); 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, popup->tab_strip_model()->count()); 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_tabbed()); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from a normal Browser results in a new Browser with TYPE_POPUP. 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup) { 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(0, 0, 200, 200); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for new popup to to load and gain focus. 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new, focused popup window. 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(stevenjb): Enable this test. See: crbug.com/79493 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->window()->IsActive()); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_popup()); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p.browser->is_app()); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have two windows, the browser() provided by the framework and the 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new popup window. 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from a normal Browser results in a new Browser with is_app() true. 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup_ExtensionId) { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.extension_app_id = "extensionappid"; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(0, 0, 200, 200); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for new popup to to load and gain focus. 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new, focused popup window. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_popup()); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_app()); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have two windows, the browser() provided by the framework and the 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new popup window. 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from a normal popup results in a new Browser with TYPE_POPUP. 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupFromPopup) { 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a popup. 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p1(MakeNavigateParams()); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p1.disposition = NEW_POPUP; 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p1.window_bounds = gfx::Rect(0, 0, 200, 200); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p1); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open another popup. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p2(MakeNavigateParams(p1.browser)); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p2.disposition = NEW_POPUP; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p2.window_bounds = gfx::Rect(0, 0, 200, 200); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p2); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new normal popup window. 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(p1.browser, p2.browser); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p2.browser->is_type_popup()); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p2.browser->is_app()); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have three windows, the browser() provided by the framework, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the first popup window, and the second popup window. 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3u, chrome::GetTotalBrowserCount()); 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p1.browser->tab_strip_model()->count()); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p2.browser->tab_strip_model()->count()); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 514a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// from an app frame results in a new Browser with TYPE_POPUP. 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_NewPopupFromAppWindow) { 517a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Browser* app_browser = CreateEmptyBrowserForApp(browser()->profile()); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(app_browser)); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(0, 0, 200, 200); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new popup app window. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(app_browser, p.browser); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_popup()); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_app()); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have three windows, the app window, the app popup it created, 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and the original browser() provided by the framework. 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3u, chrome::GetTotalBrowserCount()); 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, app_browser->tab_strip_model()->count()); 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 538a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// from an app popup results in a new Browser also of TYPE_POPUP. 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_NewPopupFromAppPopup) { 541a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Browser* app_browser = CreateEmptyBrowserForApp(browser()->profile()); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an app popup. 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p1(MakeNavigateParams(app_browser)); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p1.disposition = NEW_POPUP; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p1.window_bounds = gfx::Rect(0, 0, 200, 200); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p1); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now open another app popup. 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p2(MakeNavigateParams(p1.browser)); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p2.disposition = NEW_POPUP; 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p2.window_bounds = gfx::Rect(0, 0, 200, 200); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p2); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new popup app window. 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p1.browser); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(p1.browser, p2.browser); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p2.browser->is_type_popup()); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p2.browser->is_app()); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have four windows, the app window, the first app popup, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the second app popup, and the original browser() provided by the framework. 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(4u, chrome::GetTotalBrowserCount()); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, app_browser->tab_strip_model()->count()); 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p1.browser->tab_strip_model()->count()); 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p2.browser->tab_strip_model()->count()); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from an extension app tab results in a new Browser with TYPE_APP_POPUP. 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_NewPopupFromExtensionApp) { 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(beng): TBD. 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with window_action = SHOW_WINDOW_INACTIVE 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// does not focus a new new popup window. 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupUnfocused) { 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(0, 0, 200, 200); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW_INACTIVE; 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for new popup to load (and gain focus if the test fails). 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new, unfocused, popup window. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(Browser::TYPE_POPUP, p.browser->type()); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(stevenjb): Enable this test. See: crbug.com/79493 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p.browser->window()->IsActive()); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 594a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 595a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// and trusted_source = true results in a new Browser where is_trusted_source() 596a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// is true. 597a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochIN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupTrusted) { 598a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch chrome::NavigateParams p(MakeNavigateParams()); 599a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch p.disposition = NEW_POPUP; 600a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch p.trusted_source = true; 601a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch p.window_bounds = gfx::Rect(0, 0, 200, 200); 602a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Wait for new popup to to load and gain focus. 603a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ui_test_utils::NavigateToURL(&p); 604a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 605a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Navigate() should have opened a new popup window of TYPE_TRUSTED_POPUP. 606a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_NE(browser(), p.browser); 607a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(p.browser->is_type_popup()); 608a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(p.browser->is_trusted_source()); 609a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 610a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 611a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_WINDOW 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// always opens a new window. 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewWindow) { 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_WINDOW; 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new toplevel window. 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_tabbed()); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have two windows, the browser() provided by the framework and 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the new normal window. 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = INCOGNITO 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// opens a new incognito window if no existing incognito window is present. 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_Incognito) { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = OFF_THE_RECORD; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new toplevel incognito window. 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser()->profile()->GetOffTheRecordProfile(), 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.browser->profile()); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |source_contents| should be set to NULL because the profile for the new 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page is different from the originating page. 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, p.source_contents); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have two windows, the browser() provided by the framework and 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the new incognito window. 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = INCOGNITO 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reuses an existing incognito window when possible. 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_IncognitoRefocus) { 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* incognito_browser = 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEmptyBrowserForType(Browser::TYPE_TABBED, 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile()); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = OFF_THE_RECORD; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new tab in the existing incognito window. 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p.browser, incognito_browser); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have two windows, the browser() provided by the framework and 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the incognito window we opened earlier. 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, incognito_browser->tab_strip_model()->count()); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that no navigation action occurs when 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowOpenDisposition = SUPPRESS_OPEN. 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SuppressOpen) { 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunSuppressTest(SUPPRESS_OPEN); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that no navigation action occurs when 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowOpenDisposition = SAVE_TO_DISK. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SaveToDisk) { 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunSuppressTest(SAVE_TO_DISK); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that no navigation action occurs when 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowOpenDisposition = IGNORE_ACTION. 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_IgnoreAction) { 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunSuppressTest(IGNORE_ACTION); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This tests adding a foreground tab with a predefined WebContents. 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, TargetContents_ForegroundTab) { 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents = CreateWebContents(); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened the contents in a new foreground in the 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // current Browser. 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(), 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one window, with two tabs. 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This tests adding a popup with a predefined WebContents. 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, DISABLED_TargetContents_Popup) { 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents = CreateWebContents(); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(10, 10, 500, 500); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new popup window. 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_popup()); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p.browser->is_app()); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The web platform is weird. The window bounds specified in 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |p.window_bounds| are used as follows: 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - the origin is used to position the window 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // - the size is used to size the WebContents of the window. 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As such the position of the resulting window will always match 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // p.window_bounds.origin(), but its size will not. We need to match 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the size against the selected tab's view's container size. 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only Windows positions the window according to |p.window_bounds.origin()| - 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on Mac the window is offset from the opener and on Linux it always opens 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // at 0,0. 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p.window_bounds.origin(), 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.browser->window()->GetRestoredBounds().origin()); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All platforms should respect size however provided width > 400 (Mac has a 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimum window width of 400). 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p.window_bounds.size(), 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents->GetView()->GetContainerSize()); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have two windows, the new popup and the browser() provided by the 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // framework. 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests adding a tab at a specific index. 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Tabstrip_InsertAtIndex) { 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is not meant to be a comprehensive test of whether or not the tab 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // implementation of the browser observes the insertion index. That is 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // covered by the unit tests for TabStripModel. This merely verifies that 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // insertion index preference is reflected in common cases. 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.tabstrip_index = 0; 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.tabstrip_add_types = TabStripModel::ADD_FORCE_INDEX; 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have inserted a new tab at slot 0 in the tabstrip. 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->GetIndexOfWebContents( 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<const WebContents*>(p.target_contents))); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one window - the browser() provided by the framework. 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE opens a new tab navigated to the specified URL if 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// no previous tab with that URL (minus the path) exists. 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabNew_IgnorePath) { 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 2 tabs, the 2nd selected. 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to a new singleton tab with a sub-page. 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GetContentSettingsURL(); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The last tab should now be selected and navigated to the sub-page of the 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL. 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetContentSettingsURL(), 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE opens an existing tab with the matching URL (minus 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the path) which is navigated to the specified URL. 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabExisting_IgnorePath) { 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1(GetSettingsURL()); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url1, 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 3 tabs, the 3rd selected. 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GetContentSettingsURL(); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The middle tab should now be selected and navigated to the sub-page of the 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL. 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 8292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetContentSettingsURL(), 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE opens an existing tab with the matching URL (minus 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the path) which is navigated to the specified URL. 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabExistingSubPath_IgnorePath) { 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1(GetContentSettingsURL()); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url1, 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 3 tabs, the 3rd selected. 8482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GetClearBrowsingDataURL(); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The middle tab should now be selected and navigated to the sub-page of the 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL. 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetClearBrowsingDataURL(), 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_STAY_PUT opens an existing tab with the matching URL (minus 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the path). 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabExistingSubPath_IgnorePath2) { 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1(GetContentSettingsURL()); 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url1, 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 3 tabs, the 3rd selected. 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GetClearBrowsingDataURL(); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_STAY_PUT; 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The middle tab should now be selected. 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(singleton_url1, 8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE will update the current tab's URL if the currently 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// selected tab is a match but has a different path. 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabFocused_IgnorePath) { 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url_current(GetContentSettingsURL()); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url_current, 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 2 tabs, the 2nd selected. 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to a different settings path. 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url_target(GetClearBrowsingDataURL()); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url_target; 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The second tab should still be selected, but navigated to the new path. 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(singleton_url_target, 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE will open an existing matching tab with a different 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// query. 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabExisting_IgnoreQuery) { 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int initial_tab_count = browser()->tab_strip_model()->count(); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url_current("chrome://settings/internet"); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url_current, 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count + 1, browser()->tab_strip_model()->count()); 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count, browser()->tab_strip_model()->active_index()); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to a different settings path. 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url_target( 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "chrome://settings/internet?" 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "servicePath=/profile/ethernet_00aa00aa00aa&networkType=1"); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url_target; 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Last tab should still be selected. 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count + 1, browser()->tab_strip_model()->count()); 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count, browser()->tab_strip_model()->active_index()); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that the settings page isn't opened in the incognito 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window. 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled until fixed for uber settings: http://crbug.com/111243 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_Disposition_Settings_UseNonIncognitoWindow) { 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunUseNonIncognitoWindowTest(GetSettingsURL()); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This test verifies that the view-source settings page isn't opened in the 974c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// incognito window. 975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserNavigatorTest, 977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Disposition_ViewSource_Settings_DoNothingIfIncognitoForced) { 978868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string view_source(content::kViewSourceScheme); 979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_source.append(":"); 980c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_source.append(chrome::kChromeUISettingsURL); 981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunDoNothingIfIncognitoIsForcedTest(GURL(view_source)); 982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This test verifies that the view-source settings page isn't opened in the 985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// incognito window even if incognito mode is forced (does nothing in that 986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// case). 987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Disposition_ViewSource_Settings_UseNonIncognitoWindow) { 989868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string view_source(content::kViewSourceScheme); 990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_source.append(":"); 991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_source.append(chrome::kChromeUISettingsURL); 992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunUseNonIncognitoWindowTest(GURL(view_source)); 993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that the settings page isn't opened in the incognito 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window from a non-incognito window (bookmark open-in-incognito trigger). 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled until fixed for uber settings: http://crbug.com/111243 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_Disposition_Settings_UseNonIncognitoWindowForBookmark) { 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params(browser(), GetSettingsURL(), 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_AUTO_BOOKMARK); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.disposition = OFF_THE_RECORD; 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(¶ms); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Settings page is expected to always open in normal mode regardless 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of whether the user is trying to open it in incognito mode or not. 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that if incognito mode is forced (by policy), settings 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// page doesn't open at all. 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled until fixed for uber settings: http://crbug.com/111243 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_Disposition_Settings_DoNothingIfIncognitoIsForced) { 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunDoNothingIfIncognitoIsForcedTest(GetSettingsURL()); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that the bookmarks page isn't opened in the incognito 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window. 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_Bookmarks_UseNonIncognitoWindow) { 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunUseNonIncognitoWindowTest(GURL(chrome::kChromeUIBookmarksURL)); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Bookmark manager is expected to always open in normal mode regardless 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of whether the user is trying to open it in incognito mode or not. 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that if incognito mode is forced (by policy), bookmark 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// manager doesn't open at all. 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_Bookmarks_DoNothingIfIncognitoIsForced) { 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunDoNothingIfIncognitoIsForcedTest(GURL(chrome::kChromeUIBookmarksURL)); 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test makes sure a crashed singleton tab reloads from a new navigation. 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToCrashedSingletonTab) { 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url(GetContentSettingsURL()); 10472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents = chrome::AddSelectedTabWithURL( 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), singleton_url, content::PAGE_TRANSITION_LINK); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 2 tabs, the 2nd selected. 10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Kill the singleton tab. 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->SetIsCrashed(base::TERMINATION_STATUS_PROCESS_CRASHED, -1); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(web_contents->IsCrashed()); 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url; 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The tab should not be sad anymore. 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(web_contents->IsCrashed()); 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromDefaultToOptionsInSameTab) { 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromBlankToOptionsInSameTab) { 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 108890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) p.url = GURL(content::kAboutBlankURL); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromNTPToOptionsInSameTab) { 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GURL(chrome::kChromeUINewTabURL); 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 1110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 1111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromPageToOptionsInNewTab) { 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 11302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetGoogleURL(), 11312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 11322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 11332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 11442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromNTPToOptionsSingleton) { 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 11602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 11712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 11722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromNTPToOptionsPageInSameTab) { 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowClearBrowsingDataDialog(browser()); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetClearBrowsingDataURL(), 11862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 11892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowClearBrowsingDataDialog(browser()); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetClearBrowsingDataURL(), 12002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigateFromOtherTabToSingletonOptions) { 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This load should simply cause a tab switch. 12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ShowSettings(browser()); 12232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, CloseSingletonTab) { 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 2; ++i) { 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 12362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::PAGE_TRANSITION_TYPED); 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(0, true); 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 12432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WindowedNotificationObserver observer( 12442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 12462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ShowSettings(browser()); 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer.Wait(); 12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(browser()->tab_strip_model()->CloseWebContentsAt( 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2, TabStripModel::CLOSE_USER_GESTURE)); 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(csilv): Update this for uber page. http://crbug.com/111579. 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_NavigateFromDefaultToHistoryInSameTab) { 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowHistory(browser()); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUIHistoryFrameURL), 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 12722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_NavigateFromDefaultToBookmarksInSameTab DISABLED_NavigateFromDefaultToBookmarksInSameTab 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_NavigateFromDefaultToBookmarksInSameTab NavigateFromDefaultToBookmarksInSameTab 12752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_NavigateFromDefaultToBookmarksInSameTab) { 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowBookmarkManager(browser()); 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 12862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(StartsWithASCII( 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL().spec(), 12882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::kChromeUIBookmarksURL, 12892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true)); 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromDefaultToDownloadsInSameTab) { 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowDownloads(browser()); 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL), 13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateWithoutBrowser) { 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First navigate using the profile of the existing browser window, and 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // check that the window is reused. 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params(browser()->profile(), GetGoogleURL(), 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(¶ms); 13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now navigate using the incognito profile and check that a new window 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is created. 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params_incognito( 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile(), 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGoogleURL(), content::PAGE_TRANSITION_LINK); 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(¶ms_incognito); 13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1324a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, ViewSourceIsntSingleton) { 1325a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::string viewsource_ntp_url = 1326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(content::kViewSourceScheme) + ":" + 1327a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::kChromeUIVersionURL; 1328a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1329a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::NavigateParams viewsource_params(browser(), 1330a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GURL(viewsource_ntp_url), 1331a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::PAGE_TRANSITION_LINK); 1332a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ui_test_utils::NavigateToURL(&viewsource_params); 1333a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1334a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::NavigateParams singleton_params(browser(), 1335a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GURL(chrome::kChromeUIVersionURL), 1336a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::PAGE_TRANSITION_LINK); 1337a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) singleton_params.disposition = SINGLETON_TAB; 1338a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(-1, chrome::GetIndexOfSingletonTab(&singleton_params)); 1339a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 1340a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1341a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// This test verifies that browser initiated navigations can send requests 1342a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// using POST. 1343a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 1344a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SendBrowserInitiatedRequestUsingPOST) { 1345a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Uses a test sever to verify POST request. 1346a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 1347a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1348a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Open a browser initiated POST request in new foreground tab. 1349a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title(base::ASCIIToUTF16(kExpectedTitle)); 1350a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::string post_data = kExpectedTitle; 1351a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 1352a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(OpenPOSTURLInNewForegroundTabAndGetTitle( 1353a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_server()->GetURL(kEchoTitleCommand), post_data, true, &title)); 1354a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(expected_title, title); 1355a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 1356a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1357a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// This test verifies that renderer initiated navigations can NOT send requests 1358a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// using POST. 1359a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 1360a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SendRendererInitiatedRequestUsingPOST) { 1361a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Uses a test sever to verify POST request. 1362a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 1363a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1364a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Open a renderer initiated POST request in new foreground tab. 1365a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title(base::ASCIIToUTF16(kExpectedTitle)); 1366a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::string post_data = kExpectedTitle; 1367a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 1368a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(OpenPOSTURLInNewForegroundTabAndGetTitle( 1369a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_server()->GetURL(kEchoTitleCommand), post_data, false, &title)); 1370a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_NE(expected_title, title); 1371a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 1372a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1373a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace 1374