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" 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/strings/string_util.h" 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/chrome_pages.h" 21a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chrome/browser/ui/singleton_tabs.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kExpectedTitle[] = "PASSED!"; 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kEchoTitleCommand[] = "echotitle"; 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetGoogleURL() { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL("http://www.google.com/"); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetSettingsURL() { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(chrome::kChromeUISettingsURL); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetContentSettingsURL() { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSettingsURL().Resolve(chrome::kContentSettingsExceptionsSubPage); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetClearBrowsingDataURL() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSettingsURL().Resolve(chrome::kClearBrowserDataSubPage); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Converts long uber URLs ("chrome://chrome/foo/") to short (virtual) URLs 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ("chrome://foo/"). This should be used to convert the return value of 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebContentsImpl::GetURL before comparison because it can return either the 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// real URL or the virtual URL. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ShortenUberURL(const GURL& url) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url_string = url.spec(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string long_prefix = "chrome://chrome/"; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string short_prefix = "chrome://"; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url_string.find(long_prefix) != 0) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_string.replace(0, long_prefix.length(), short_prefix); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(url_string); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome::NavigateParams BrowserNavigatorTest::MakeNavigateParams() const { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return MakeNavigateParams(browser()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome::NavigateParams BrowserNavigatorTest::MakeNavigateParams( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser) const { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params(browser, GetGoogleURL(), 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.window_action = chrome::NavigateParams::SHOW_WINDOW; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return params; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)bool BrowserNavigatorTest::OpenPOSTURLInNewForegroundTabAndGetTitle( 83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const GURL& url, const std::string& post_data, bool is_browser_initiated, 84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::string16* title) { 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::NavigateParams param(MakeNavigateParams()); 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.disposition = NEW_FOREGROUND_TAB; 87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.url = url; 88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.is_renderer_initiated = !is_browser_initiated; 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.uses_post = true; 90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.browser_initiated_post_data = new base::RefCountedStaticMemory( 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) post_data.data(), post_data.size()); 92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 93a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_test_utils::NavigateToURL(¶m); 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!param.target_contents) 95a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Navigate() should have opened the contents in new foreground tab in the 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // current Browser. 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(browser(), param.browser); 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(), 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) param.target_contents); 102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // We should have one window, with one tab. 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) *title = param.target_contents->GetTitle(); 107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Browser* BrowserNavigatorTest::CreateEmptyBrowserForType(Browser::Type type, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile) { 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* browser = new Browser( 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Browser::CreateParams(type, profile, chrome::GetActiveDesktop())); 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::AddTabAt(browser, GURL(), -1, true); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return browser; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 118a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochBrowser* BrowserNavigatorTest::CreateEmptyBrowserForApp(Profile* profile) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = new Browser( 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser::CreateParams::CreateForApp( 121a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "Test", false /* trusted_source */, gfx::Rect(), profile, 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::GetActiveDesktop())); 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::AddTabAt(browser, GURL(), -1, true); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return browser; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebContents* BrowserNavigatorTest::CreateWebContents() { 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents::CreateParams create_params(browser()->profile()); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* base_web_contents = 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base_web_contents) { 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) create_params.initial_size = 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base_web_contents->GetContainerBounds().size(); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebContents::Create(create_params); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserNavigatorTest::RunSuppressTest(WindowOpenDisposition disposition) { 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL old_url = browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = disposition; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nothing should have happened as a result of Navigate(); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(old_url, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserNavigatorTest::RunUseNonIncognitoWindowTest(const GURL& url) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* incognito_browser = CreateIncognitoBrowser(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, incognito_browser->tab_strip_model()->count()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to the page. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(incognito_browser)); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = url; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This page should be opened in browser() window. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(incognito_browser, p.browser); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url, 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserNavigatorTest::RunDoNothingIfIncognitoIsForcedTest( 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = CreateIncognitoBrowser(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set kIncognitoModeAvailability to FORCED. 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs1 = browser->profile()->GetPrefs(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs1->SetInteger(prefs::kIncognitoModeAvailability, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::FORCED); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs2 = browser->profile()->GetOriginalProfile()->GetPrefs(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs2->SetInteger(prefs::kIncognitoModeAvailability, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::FORCED); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to the page. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(browser)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = OFF_THE_RECORD; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = url; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The page should not be opened. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser, p.browser); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser->tab_strip_model()->count()); 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(GURL(url::kAboutBlankURL), 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents()->GetURL()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void BrowserNavigatorTest::SetUpCommandLine(base::CommandLine* command_line) { 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Disable settings-in-a-window so that we can use the settings page and 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // sub-pages to test browser navigation. 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch(::switches::kDisableSettingsWindow); 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserNavigatorTest::Observe( 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case content::NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED: { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++this->created_tab_contents_count_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation occurs within a tab, the tab count 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of the Browser remains the same and the current tab bears the loaded URL. 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Note that network URLs are not actually loaded in tests, so this also tests 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// that error pages leave the intended URL in the address bar. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_CurrentTab) { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GetGoogleURL()); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetGoogleURL(), 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one window with one tab. 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that a singleton tab is refocused if one is already opened 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in another or an existing window, or added if it is not. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabExisting) { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1("http://maps.google.com/"); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Register for a notification if an additional WebContents was instantiated. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Opening a Singleton tab that is already opened should not be opening a new 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tab nor be creating a new WebContents object. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As the registrar object goes out of scope, this will get unregistered 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar.Add(this, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url1, 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 3 tabs, the 3rd selected. 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int previous_tab_contents_count = 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) created_tab_contents_count_ = 0; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url1; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The middle tab should now be selected. 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No tab contents should have been created 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(previous_tab_contents_count, 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) created_tab_contents_count_); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabRespectingRef) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_ref_url1("http://maps.google.com/#a"); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_ref_url2("http://maps.google.com/#b"); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_ref_url3("http://maps.google.com/"); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_ref_url1, 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 2 tabs, 2nd selected. 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url2. 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_ref_url2; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have 2 tabs, the 2nd one selected. 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url2, but with respect ref set. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p = MakeNavigateParams(); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_ref_url2; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.ref_behavior = chrome::NavigateParams::RESPECT_REF; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have 3 tabs, the 3th one selected. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url3. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p = MakeNavigateParams(); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_ref_url3; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.ref_behavior = chrome::NavigateParams::RESPECT_REF; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have 4 tabs, the 4th one selected. 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(4, browser()->tab_strip_model()->count()); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->active_index()); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabNoneExisting) { 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1("http://maps.google.com/"); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 1 tab. 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url1; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have 2 tabs, the 2nd one selected. 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation results in a foreground tab, the 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tab count of the Browser increases and the selected tab shifts to the new 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// foreground tab. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewForegroundTab) { 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* old_contents = 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(old_contents, 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(), 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation results in a background tab, the 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tab count of the Browser increases but the selected tab remains the same. 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewBackgroundTab) { 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* old_contents = 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_BACKGROUND_TAB; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* new_contents = 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The selected tab should have remained unchanged, since the new tab was 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // opened in the background. 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(old_contents, new_contents); 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation requiring a new foreground tab 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// occurs in a Browser that cannot host multiple tabs, the new foreground tab 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is created in an existing compatible Browser. 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_IncompatibleWindow_Existing) { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a foreground tab in a window that cannot open popups when there is an 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // existing compatible window somewhere else that they can be opened within. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup = CreateEmptyBrowserForType(Browser::TYPE_POPUP, 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(popup)); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened the tab in a different browser since the 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one we supplied didn't support additional tabs. 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(popup, p.browser); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Since browser() is an existing compatible tabbed browser, it should have 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // opened the tab there. 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should be left with 2 windows, the popup with one tab and the browser() 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // provided by the framework with two. 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, popup->tab_strip_model()->count()); 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that when a navigation requiring a new foreground tab 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// occurs in a Browser that cannot host multiple tabs and no compatible Browser 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that can is open, a compatible Browser is created. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_IncompatibleWindow_NoExisting) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We want to simulate not being able to find an existing window compatible 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with our non-tabbed browser window so Navigate() is forced to create a 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new compatible window. Because browser() supplied by the in-process 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser testing framework is compatible with browser()->profile(), we 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // need a different profile, and creating a popup window with an incognito 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile is a quick and dirty way of achieving this. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup = CreateEmptyBrowserForType( 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser::TYPE_POPUP, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(popup)); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened the tab in a different browser since the 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one we supplied didn't support additional tabs. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(popup, p.browser); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This time, browser() is _not_ compatible with popup since it is not an 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incognito window. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have three windows, each with one tab: 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1. the browser() provided by the framework (unchanged in this test) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2. the incognito popup we created originally 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3. the new incognito tabbed browser that was created by Navigate(). 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3u, chrome::GetTotalBrowserCount()); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, popup->tab_strip_model()->count()); 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_tabbed()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from a normal Browser results in a new Browser with TYPE_POPUP. 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(0, 0, 200, 200); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for new popup to to load and gain focus. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new, focused popup window. 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(stevenjb): Enable this test. See: crbug.com/79493 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->window()->IsActive()); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_popup()); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p.browser->is_app()); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have two windows, the browser() provided by the framework and the 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new popup window. 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from a normal Browser results in a new Browser with is_app() true. 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup_ExtensionId) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.extension_app_id = "extensionappid"; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(0, 0, 200, 200); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for new popup to to load and gain focus. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new, focused popup window. 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_popup()); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_app()); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have two windows, the browser() provided by the framework and the 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new popup window. 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from a normal popup results in a new Browser with TYPE_POPUP. 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupFromPopup) { 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a popup. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p1(MakeNavigateParams()); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p1.disposition = NEW_POPUP; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p1.window_bounds = gfx::Rect(0, 0, 200, 200); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p1); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open another popup. 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p2(MakeNavigateParams(p1.browser)); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p2.disposition = NEW_POPUP; 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p2.window_bounds = gfx::Rect(0, 0, 200, 200); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p2); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new normal popup window. 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(p1.browser, p2.browser); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p2.browser->is_type_popup()); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p2.browser->is_app()); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have three windows, the browser() provided by the framework, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the first popup window, and the second popup window. 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3u, chrome::GetTotalBrowserCount()); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p1.browser->tab_strip_model()->count()); 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p2.browser->tab_strip_model()->count()); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 519a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// from an app frame results in a new Browser with TYPE_POPUP. 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_NewPopupFromAppWindow) { 522a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Browser* app_browser = CreateEmptyBrowserForApp(browser()->profile()); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams(app_browser)); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(0, 0, 200, 200); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new popup app window. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(app_browser, p.browser); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_popup()); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_app()); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have three windows, the app window, the app popup it created, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and the original browser() provided by the framework. 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3u, chrome::GetTotalBrowserCount()); 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, app_browser->tab_strip_model()->count()); 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 543a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// from an app popup results in a new Browser also of TYPE_POPUP. 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_NewPopupFromAppPopup) { 546a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Browser* app_browser = CreateEmptyBrowserForApp(browser()->profile()); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an app popup. 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p1(MakeNavigateParams(app_browser)); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p1.disposition = NEW_POPUP; 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p1.window_bounds = gfx::Rect(0, 0, 200, 200); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p1); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now open another app popup. 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p2(MakeNavigateParams(p1.browser)); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p2.disposition = NEW_POPUP; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p2.window_bounds = gfx::Rect(0, 0, 200, 200); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p2); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new popup app window. 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p1.browser); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(p1.browser, p2.browser); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p2.browser->is_type_popup()); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p2.browser->is_app()); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have four windows, the app window, the first app popup, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the second app popup, and the original browser() provided by the framework. 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(4u, chrome::GetTotalBrowserCount()); 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, app_browser->tab_strip_model()->count()); 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p1.browser->tab_strip_model()->count()); 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p2.browser->tab_strip_model()->count()); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from an extension app tab results in a new Browser with TYPE_APP_POPUP. 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_NewPopupFromExtensionApp) { 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(beng): TBD. 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with window_action = SHOW_WINDOW_INACTIVE 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// does not focus a new new popup window. 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupUnfocused) { 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(0, 0, 200, 200); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW_INACTIVE; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for new popup to load (and gain focus if the test fails). 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new, unfocused, popup window. 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(Browser::TYPE_POPUP, p.browser->type()); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(stevenjb): Enable this test. See: crbug.com/79493 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p.browser->window()->IsActive()); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 599a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP 600a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// and trusted_source = true results in a new Browser where is_trusted_source() 601a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// is true. 602a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochIN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupTrusted) { 603a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch chrome::NavigateParams p(MakeNavigateParams()); 604a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch p.disposition = NEW_POPUP; 605a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch p.trusted_source = true; 606a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch p.window_bounds = gfx::Rect(0, 0, 200, 200); 607a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Wait for new popup to to load and gain focus. 608a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ui_test_utils::NavigateToURL(&p); 609a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 610a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Navigate() should have opened a new popup window of TYPE_TRUSTED_POPUP. 611a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_NE(browser(), p.browser); 612a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(p.browser->is_type_popup()); 613a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(p.browser->is_trusted_source()); 614a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 615a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 616a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = NEW_WINDOW 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// always opens a new window. 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewWindow) { 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_WINDOW; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new toplevel window. 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_tabbed()); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have two windows, the browser() provided by the framework and 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the new normal window. 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = INCOGNITO 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// opens a new incognito window if no existing incognito window is present. 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_Incognito) { 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = OFF_THE_RECORD; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new toplevel incognito window. 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser()->profile()->GetOffTheRecordProfile(), 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.browser->profile()); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |source_contents| should be set to NULL because the profile for the new 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page is different from the originating page. 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, p.source_contents); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have two windows, the browser() provided by the framework and 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the new incognito window. 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that navigating with WindowOpenDisposition = INCOGNITO 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reuses an existing incognito window when possible. 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_IncognitoRefocus) { 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* incognito_browser = 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEmptyBrowserForType(Browser::TYPE_TABBED, 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile()); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = OFF_THE_RECORD; 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new tab in the existing incognito window. 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p.browser, incognito_browser); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should now have two windows, the browser() provided by the framework and 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the incognito window we opened earlier. 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, incognito_browser->tab_strip_model()->count()); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that no navigation action occurs when 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowOpenDisposition = SUPPRESS_OPEN. 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SuppressOpen) { 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunSuppressTest(SUPPRESS_OPEN); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that no navigation action occurs when 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowOpenDisposition = SAVE_TO_DISK. 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SaveToDisk) { 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunSuppressTest(SAVE_TO_DISK); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that no navigation action occurs when 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowOpenDisposition = IGNORE_ACTION. 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_IgnoreAction) { 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunSuppressTest(IGNORE_ACTION); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This tests adding a foreground tab with a predefined WebContents. 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, TargetContents_ForegroundTab) { 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents = CreateWebContents(); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened the contents in a new foreground in the 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // current Browser. 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(browser()->tab_strip_model()->GetActiveWebContents(), 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one window, with two tabs. 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This tests adding a popup with a predefined WebContents. 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, DISABLED_TargetContents_Popup) { 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_POPUP; 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.target_contents = CreateWebContents(); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_bounds = gfx::Rect(10, 10, 500, 500); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have opened a new popup window. 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(browser(), p.browser); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p.browser->is_type_popup()); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p.browser->is_app()); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The web platform is weird. The window bounds specified in 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |p.window_bounds| are used as follows: 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - the origin is used to position the window 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // - the size is used to size the WebContents of the window. 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As such the position of the resulting window will always match 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // p.window_bounds.origin(), but its size will not. We need to match 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the size against the selected tab's view's container size. 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only Windows positions the window according to |p.window_bounds.origin()| - 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on Mac the window is offset from the opener and on Linux it always opens 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // at 0,0. 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p.window_bounds.origin(), 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.browser->window()->GetRestoredBounds().origin()); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All platforms should respect size however provided width > 400 (Mac has a 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimum window width of 400). 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(p.window_bounds.size(), 744010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) p.target_contents->GetContainerBounds().size()); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have two windows, the new popup and the browser() provided by the 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // framework. 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, p.browser->tab_strip_model()->count()); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests adding a tab at a specific index. 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Tabstrip_InsertAtIndex) { 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is not meant to be a comprehensive test of whether or not the tab 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // implementation of the browser observes the insertion index. That is 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // covered by the unit tests for TabStripModel. This merely verifies that 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // insertion index preference is reflected in common cases. 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = NEW_FOREGROUND_TAB; 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.tabstrip_index = 0; 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.tabstrip_add_types = TabStripModel::ADD_FORCE_INDEX; 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate() should have inserted a new tab at slot 0 in the tabstrip. 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->GetIndexOfWebContents( 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<const WebContents*>(p.target_contents))); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one window - the browser() provided by the framework. 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE opens a new tab navigated to the specified URL if 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// no previous tab with that URL (minus the path) exists. 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabNew_IgnorePath) { 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 7821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 2 tabs, the 2nd selected. 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to a new singleton tab with a sub-page. 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GetContentSettingsURL(); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The last tab should now be selected and navigated to the sub-page of the 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL. 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetContentSettingsURL(), 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE opens an existing tab with the matching URL (minus 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the path) which is navigated to the specified URL. 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabExisting_IgnorePath) { 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1(GetSettingsURL()); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url1, 8141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 8161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 3 tabs, the 3rd selected. 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 8202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GetContentSettingsURL(); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The middle tab should now be selected and navigated to the sub-page of the 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL. 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetContentSettingsURL(), 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE opens an existing tab with the matching URL (minus 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the path) which is navigated to the specified URL. 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabExistingSubPath_IgnorePath) { 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1(GetContentSettingsURL()); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url1, 8481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 8501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 3 tabs, the 3rd selected. 8532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 8542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GetClearBrowsingDataURL(); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The middle tab should now be selected and navigated to the sub-page of the 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL. 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 8682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetClearBrowsingDataURL(), 8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_STAY_PUT opens an existing tab with the matching URL (minus 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the path). 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabExistingSubPath_IgnorePath2) { 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url1(GetContentSettingsURL()); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url1, 8821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 8841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 3 tabs, the 3rd selected. 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to singleton_url1. 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GetClearBrowsingDataURL(); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_STAY_PUT; 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The middle tab should now be selected. 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(singleton_url1, 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE will update the current tab's URL if the currently 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// selected tab is a match but has a different path. 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabFocused_IgnorePath) { 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url_current(GetContentSettingsURL()); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url_current, 9151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 2 tabs, the 2nd selected. 9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to a different settings path. 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url_target(GetClearBrowsingDataURL()); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url_target; 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The second tab should still be selected, but navigated to the new path. 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(singleton_url_target, 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that constructing params with disposition = SINGLETON_TAB 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and IGNORE_AND_NAVIGATE will open an existing matching tab with a different 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// query. 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_SingletonTabExisting_IgnoreQuery) { 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int initial_tab_count = browser()->tab_strip_model()->count(); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url_current("chrome://settings/internet"); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), singleton_url_current, 9481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count + 1, browser()->tab_strip_model()->count()); 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count, browser()->tab_strip_model()->active_index()); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to a different settings path. 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url_target( 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "chrome://settings/internet?" 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "servicePath=/profile/ethernet_00aa00aa00aa&networkType=1"); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url_target; 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(&p); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Last tab should still be selected. 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), p.browser); 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count + 1, browser()->tab_strip_model()->count()); 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count, browser()->tab_strip_model()->active_index()); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that the settings page isn't opened in the incognito 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window. 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled until fixed for uber settings: http://crbug.com/111243 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_Disposition_Settings_UseNonIncognitoWindow) { 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunUseNonIncognitoWindowTest(GetSettingsURL()); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This test verifies that the view-source settings page isn't opened in the 979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// incognito window. 980c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserNavigatorTest, 982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Disposition_ViewSource_Settings_DoNothingIfIncognitoForced) { 983868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string view_source(content::kViewSourceScheme); 984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_source.append(":"); 985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_source.append(chrome::kChromeUISettingsURL); 986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunDoNothingIfIncognitoIsForcedTest(GURL(view_source)); 987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This test verifies that the view-source settings page isn't opened in the 990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// incognito window even if incognito mode is forced (does nothing in that 991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// case). 992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Disposition_ViewSource_Settings_UseNonIncognitoWindow) { 994868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string view_source(content::kViewSourceScheme); 995c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_source.append(":"); 996c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_source.append(chrome::kChromeUISettingsURL); 997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunUseNonIncognitoWindowTest(GURL(view_source)); 998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that the settings page isn't opened in the incognito 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window from a non-incognito window (bookmark open-in-incognito trigger). 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled until fixed for uber settings: http://crbug.com/111243 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_Disposition_Settings_UseNonIncognitoWindowForBookmark) { 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params(browser(), GetSettingsURL(), 10061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_AUTO_BOOKMARK); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.disposition = OFF_THE_RECORD; 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Navigate(¶ms); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 10182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 10192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Settings page is expected to always open in normal mode regardless 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of whether the user is trying to open it in incognito mode or not. 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that if incognito mode is forced (by policy), settings 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// page doesn't open at all. 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled until fixed for uber settings: http://crbug.com/111243 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_Disposition_Settings_DoNothingIfIncognitoIsForced) { 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunDoNothingIfIncognitoIsForcedTest(GetSettingsURL()); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that the bookmarks page isn't opened in the incognito 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window. 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_Bookmarks_UseNonIncognitoWindow) { 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunUseNonIncognitoWindowTest(GURL(chrome::kChromeUIBookmarksURL)); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Bookmark manager is expected to always open in normal mode regardless 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of whether the user is trying to open it in incognito mode or not. 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that if incognito mode is forced (by policy), bookmark 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// manager doesn't open at all. 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disposition_Bookmarks_DoNothingIfIncognitoIsForced) { 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunDoNothingIfIncognitoIsForcedTest(GURL(chrome::kChromeUIBookmarksURL)); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test makes sure a crashed singleton tab reloads from a new navigation. 10495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// http://crbug.com/396371 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISABLED_NavigateToCrashedSingletonTab) { 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL singleton_url(GetContentSettingsURL()); 10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents = chrome::AddSelectedTabWithURL( 10541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), singleton_url, ui::PAGE_TRANSITION_LINK); 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have one browser with 2 tabs, the 2nd selected. 10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Kill the singleton tab. 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->SetIsCrashed(base::TERMINATION_STATUS_PROCESS_CRASHED, -1); 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(web_contents->IsCrashed()); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.disposition = SINGLETON_TAB; 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = singleton_url; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The tab should not be sad anymore. 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(web_contents->IsCrashed()); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromDefaultToOptionsInSameTab) { 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromBlankToOptionsInSameTab) { 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 1094f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) p.url = GURL(url::kAboutBlankURL); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromNTPToOptionsInSameTab) { 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.url = GURL(chrome::kChromeUINewTabURL); 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 1116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 1117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 11282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 11292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromPageToOptionsInNewTab) { 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams p(MakeNavigateParams()); 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(&p); 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetGoogleURL(), 11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 11392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 11512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromNTPToOptionsSingleton) { 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 11662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 11782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromNTPToOptionsPageInSameTab) { 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowClearBrowsingDataDialog(browser()); 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetClearBrowsingDataURL(), 11922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowClearBrowsingDataDialog(browser()); 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetClearBrowsingDataURL(), 12062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 12102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigateFromOtherTabToSingletonOptions) { 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowSettings(browser()); 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 12231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This load should simply cause a tab switch. 12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ShowSettings(browser()); 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetSettingsURL(), 12322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShortenUberURL(browser()->tab_strip_model()-> 12332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetURL())); 12342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, CloseSingletonTab) { 12372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 2; ++i) { 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), GetGoogleURL(), 12421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED); 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(0, true); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 12492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WindowedNotificationObserver observer( 12502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ShowSettings(browser()); 12532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer.Wait(); 12542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(browser()->tab_strip_model()->CloseWebContentsAt( 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2, TabStripModel::CLOSE_USER_GESTURE)); 12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(csilv): Update this for uber page. http://crbug.com/111579. 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_NavigateFromDefaultToHistoryInSameTab) { 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowHistory(browser()); 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUIHistoryFrameURL), 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 12782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_NavigateFromDefaultToBookmarksInSameTab DISABLED_NavigateFromDefaultToBookmarksInSameTab 12792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_NavigateFromDefaultToBookmarksInSameTab NavigateFromDefaultToBookmarksInSameTab 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_NavigateFromDefaultToBookmarksInSameTab) { 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowBookmarkManager(browser()); 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(StartsWithASCII( 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL().spec(), 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::kChromeUIBookmarksURL, 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true)); 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateFromDefaultToDownloadsInSameTab) { 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowDownloads(browser()); 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL), 13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateWithoutBrowser) { 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First navigate using the profile of the existing browser window, and 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // check that the window is reused. 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params(browser()->profile(), GetGoogleURL(), 13171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(¶ms); 13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now navigate using the incognito profile and check that a new window 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is created. 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NavigateParams params_incognito( 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile(), 13251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetGoogleURL(), ui::PAGE_TRANSITION_LINK); 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(¶ms_incognito); 13272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1330a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, ViewSourceIsntSingleton) { 1331a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::string viewsource_ntp_url = 1332868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(content::kViewSourceScheme) + ":" + 1333a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::kChromeUIVersionURL; 1334a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1335a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::NavigateParams viewsource_params(browser(), 1336a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GURL(viewsource_ntp_url), 13371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 1338a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ui_test_utils::NavigateToURL(&viewsource_params); 1339a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1340a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chrome::NavigateParams singleton_params(browser(), 1341a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GURL(chrome::kChromeUIVersionURL), 13421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 1343a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) singleton_params.disposition = SINGLETON_TAB; 1344a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(-1, chrome::GetIndexOfSingletonTab(&singleton_params)); 1345a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 1346a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1347a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// This test verifies that browser initiated navigations can send requests 1348a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// using POST. 1349a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 1350a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SendBrowserInitiatedRequestUsingPOST) { 1351a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Uses a test sever to verify POST request. 1352a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 1353a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1354a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Open a browser initiated POST request in new foreground tab. 1355a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title(base::ASCIIToUTF16(kExpectedTitle)); 1356a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::string post_data = kExpectedTitle; 1357a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 1358a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(OpenPOSTURLInNewForegroundTabAndGetTitle( 1359a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_server()->GetURL(kEchoTitleCommand), post_data, true, &title)); 1360a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(expected_title, title); 1361a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 1362a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1363a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// This test verifies that renderer initiated navigations can NOT send requests 1364a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// using POST. 1365a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, 1366a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SendRendererInitiatedRequestUsingPOST) { 1367a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Uses a test sever to verify POST request. 1368a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 1369a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1370a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Open a renderer initiated POST request in new foreground tab. 1371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title(base::ASCIIToUTF16(kExpectedTitle)); 1372a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::string post_data = kExpectedTitle; 1373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 1374a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(OpenPOSTURLInNewForegroundTabAndGetTitle( 1375a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_server()->GetURL(kEchoTitleCommand), post_data, false, &title)); 1376a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_NE(expected_title, title); 1377a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 1378a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1379a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace 1380