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