startup_browser_creator_browsertest.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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 "base/command_line.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_system.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/first_run/first_run.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/session_startup_pref.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_impl.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_restore.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_iterator.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list_observer.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator_impl.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_mode_navigation_observer.h"
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_service.h"
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_service_factory.h"
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Check that there are two browsers. Find the one that is not |browser|.
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)Browser* FindOneOtherBrowser(Browser* browser) {
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // There should only be one other browser.
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(2u, chrome::GetBrowserCount(browser->profile(),
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                        browser->host_desktop_type()));
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Find the new browser.
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* other_browser = NULL;
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (chrome::BrowserIterator it; !it.done() && !other_browser; it.Next()) {
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (*it != browser)
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      other_browser = *it;
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return other_browser;
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StartupBrowserCreatorTest : public ExtensionBrowserTest {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool SetUpUserDataDirectory() OVERRIDE {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make sure the first run sentinel file exists before running these tests,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // since some of them customize the session startup pref whose value can
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // be different than the default during the first run.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(bauerb): set the first run flag instead of creating a sentinel file.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_run::CreateSentinel();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return ExtensionBrowserTest::SetUpUserDataDirectory();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExtensionBrowserTest::SetUpCommandLine(command_line);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitch(switches::kEnablePanels);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitchASCII(switches::kHomePage,
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                    content::kAboutBlankURL);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(nkostylev): Investigate if we can remove this switch.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitch(switches::kCreateBrowserOnStartupForTests);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper functions return void so that we can ASSERT*().
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use ASSERT_NO_FATAL_FAILURE around calls to these functions to stop the
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // test if an assert fails.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadApp(const std::string& app_name,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               const Extension** out_app_extension) {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(app_name.c_str())));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ExtensionService* service = extensions::ExtensionSystem::Get(
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        browser()->profile())->extension_service();
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *out_app_extension = service->GetExtensionById(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        last_loaded_extension_id_, false);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(*out_app_extension);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Code that opens a new browser assumes we start with exactly one.
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(1u, chrome::GetBrowserCount(browser()->profile(),
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          browser()->host_desktop_type()));
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetAppLaunchPref(const std::string& app_id,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        extensions::ExtensionPrefs::LaunchType launch_type) {
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ExtensionService* service = extensions::ExtensionSystem::Get(
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        browser()->profile())->extension_service();
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    service->extension_prefs()->SetLaunchType(app_id, launch_type);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* FindOneOtherBrowserForProfile(Profile* profile,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         Browser* not_this_browser) {
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for (chrome::BrowserIterator it; !it.done(); it.Next()) {
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (*it != not_this_browser && it->profile() == profile)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return *it;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OpenURLsPopupObserver : public chrome::BrowserListObserver {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLsPopupObserver() : added_browser_(NULL) { }
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnBrowserAdded(Browser* browser) OVERRIDE {
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    added_browser_ = browser;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnBrowserRemoved(Browser* browser) OVERRIDE { }
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* added_browser_;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that when there is a popup as the active browser any requests to
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// StartupBrowserCreatorImpl::OpenURLsInBrowser don't crash because there's no
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// explicit profile given.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenURLsPopup) {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(GURL("http://localhost"));
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note that in our testing we do not ever query the BrowserList for the "last
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // active" browser. That's because the browsers are set as "active" by
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // platform UI toolkit messages, and those messages are not sent during unit
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // testing sessions.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLsPopupObserver observer;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserList::AddObserver(&observer);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* popup = new Browser(
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(),
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            browser()->host_desktop_type()));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(popup->is_type_popup());
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(popup, observer.added_browser_);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should create a new window, but re-use the profile from |popup|. If
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it used a NULL or invalid profile, it would crash.
16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  launch.OpenURLsInBrowser(popup, false, urls,
16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                           chrome::HOST_DESKTOP_TYPE_NATIVE);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(popup, observer.added_browser_);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserList::RemoveObserver(&observer);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We don't do non-process-startup browser launches on ChromeOS.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Session restore for process-startup browser launches is tested
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in session_restore_uitest.
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that startup URLs are honored when the process already exists but has
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// no tabbed browser windows (eg. as if the process is running only due to a
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// background application.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       StartupURLsOnNewWindowWithNoTabbedBrowsers) {
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a couple same-site HTTP URLs.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(test_server()->GetURL("files/title1.html"));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(test_server()->GetURL("files/title2.html"));
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the startup preference to open these URLs.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref(SessionStartupPref::URLS);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref.urls = urls;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(browser()->profile(), pref);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close the browser.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->window()->Close();
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do a simple non-process-startup browser launch.
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run);
19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
19790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should have created a new browser window.  |browser()| is still
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // around at this point, even though we've closed its window.
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The new browser should have one tab for each URL.
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(static_cast<int>(urls.size()), tab_strip->count());
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i=0; i < urls.size(); i++) {
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(urls[i], tab_strip->GetWebContentsAt(i)->GetURL());
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The two tabs, despite having the same site, should be in different
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SiteInstances.
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE(tab_strip->GetWebContentsAt(0)->GetSiteInstance(),
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetSiteInstance());
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that startup URLs aren't used when the process already exists
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and has other tabbed browser windows.  This is the common case of starting a
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// new browser.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       StartupURLsOnNewWindow) {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a couple arbitrary URLs.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(ui_test_utils::GetTestUrl(
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(ui_test_utils::GetTestUrl(
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title2.html"))));
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the startup preference to open these URLs.
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref(SessionStartupPref::URLS);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref.urls = urls;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(browser()->profile(), pref);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do a simple non-process-startup browser launch.
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run);
24190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
24290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should have created a new browser window.
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The new browser should have exactly one tab (not the startup URLs).
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, new_browser->tab_strip_model()->count());
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App shortcuts are not implemented on mac os.
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutNoPref) {
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Load an app with launch.container = 'tab'.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* extension_app = NULL;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app));
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add --app-id=<extension->id()> to the command line.
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine command_line(CommandLine::NO_PROGRAM);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  command_line.AppendSwitchASCII(switches::kAppId, extension_app->id());
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run);
26690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
26790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No pref was set, so the app should have opened in a window.
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The launch should have created a new browser.
271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Expect an app window.
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(new_browser->is_app());
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The browser's app_name should include the app's ID.
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new_browser->app_name_.find(extension_app->id()),
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string::npos) << new_browser->app_name_;
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutWindowPref) {
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* extension_app = NULL;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app));
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set a pref indicating that the user wants to open this app in a window.
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetAppLaunchPref(extension_app->id(),
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   extensions::ExtensionPrefs::LAUNCH_WINDOW);
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine command_line(CommandLine::NO_PROGRAM);
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  command_line.AppendSwitchASCII(switches::kAppId, extension_app->id());
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run);
29690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
29790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pref was set to open in a window, so the app should have opened in a
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window.  The launch should have created a new browser. Find the new
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // browser.
302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Expect an app window.
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(new_browser->is_app());
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The browser's app_name should include the app's ID.
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new_browser->app_name_.find(extension_app->id()),
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string::npos) << new_browser->app_name_;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutTabPref) {
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Load an app with launch.container = 'tab'.
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* extension_app = NULL;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app));
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set a pref indicating that the user wants to open this app in a window.
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetAppLaunchPref(extension_app->id(),
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   extensions::ExtensionPrefs::LAUNCH_REGULAR);
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine command_line(CommandLine::NO_PROGRAM);
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  command_line.AppendSwitchASCII(switches::kAppId, extension_app->id());
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run);
32890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
32990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When an app shortcut is open and the pref indicates a tab should
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // open, the tab is open in a new browser window.  Expect a new window.
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile(),
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The tab should be in a tabbed window.
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(new_browser->is_type_tabbed());
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The browser's app_name should not include the app's ID: It is in a
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // normal browser.
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new_browser->app_name_.find(extension_app->id()),
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string::npos) << new_browser->app_name_;
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined(OS_MACOSX)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined(OS_CHROMEOS)
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ReadingWasRestartedAfterRestart) {
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tests that StartupBrowserCreator::WasRestarted reads and resets the
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // preference kWasRestarted correctly.
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator::was_restarted_read_ = false;
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetBoolean(prefs::kWasRestarted, true);
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(StartupBrowserCreator::WasRestarted());
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(pref_service->GetBoolean(prefs::kWasRestarted));
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(StartupBrowserCreator::WasRestarted());
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ReadingWasRestartedAfterNormalStart) {
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tests that StartupBrowserCreator::WasRestarted reads and resets the
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // preference kWasRestarted correctly.
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator::was_restarted_read_ = false;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetBoolean(prefs::kWasRestarted, false);
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(StartupBrowserCreator::WasRestarted());
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(pref_service->GetBoolean(prefs::kWasRestarted));
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(StartupBrowserCreator::WasRestarted());
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, AddFirstRunTab) {
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreator browser_creator;
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title2.html"));
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
38690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
38790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, tab_strip->count());
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("title1.html",
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("title2.html",
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test hard-coded special first run tabs (defined in
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StartupBrowserCreatorImpl::AddStartupURLs()).
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, AddCustomFirstRunTab) {
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreator browser_creator;
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(GURL("http://new_tab_page"));
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title2.html"));
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(GURL("http://welcome_page"));
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
41590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
41690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(4, tab_strip->count());
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("title1.html",
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL());
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("title2.html",
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(2)->GetURL().ExtractFileName());
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(internals::GetWelcomePageURL(),
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(3)->GetURL());
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoNoWelcomePage) {
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Trick this test into thinking the promo has been shown for this profile; so
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // that it will show it again (otherwise it skips showing it since
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --no-first-run is specified in browser tests).
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile());
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy,
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
44590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
44690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, tab_strip->count());
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) {
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host());
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(0)->GetURL());
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoWithWelcomePage) {
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Trick this test into thinking the promo has been shown for this profile; so
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // that it will show it again (otherwise it skips showing it since
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --no-first-run is specified in browser tests).
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile());
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  first_run::SetShouldShowWelcomePage();
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy,
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
47490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
47590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, tab_strip->count());
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) {
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host());
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(0)->GetURL());
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(internals::GetWelcomePageURL(),
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL());
4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoWithFirstRunTabs) {
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreator browser_creator;
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Trick this test into thinking the promo has been shown for this profile; so
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // that it will show it again (otherwise it skips showing it since
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --no-first-run is specified in browser tests).
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile());
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The welcome page should not be shown, even if
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // first_run::ShouldShowWelcomePage() says so, when there are already
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // more than 2 first run tabs.
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  first_run::SetShouldShowWelcomePage();
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
51290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
51390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) {
5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(2, tab_strip->count());
5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host());
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("title1.html",
5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(1, tab_strip->count());
5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("title1.html",
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The welcome page should still be shown if there are more than 2 first run
5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// tabs, but the welcome page was explcitly added to the first run tabs.
5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       SyncPromoWithFirstRunTabsIncludingWelcomePage) {
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreator browser_creator;
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(GURL("http://welcome_page"));
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Trick this test into thinking the promo has been shown for this profile; so
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // that it will show it again (otherwise it skips showing it since
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --no-first-run is specified in browser tests).
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile());
5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
54990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
55090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) {
5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(3, tab_strip->count());
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host());
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("title1.html",
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(internals::GetWelcomePageURL(),
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(2)->GetURL());
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(2, tab_strip->count());
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("title1.html",
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(internals::GetWelcomePageURL(),
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(1)->GetURL());
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, StartupURLsForTwoProfiles) {
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* default_profile = browser()->profile();
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create another profile.
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path = profile_manager->user_data_dir();
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile 1"));
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* other_profile = profile_manager->GetProfile(dest_path);
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(other_profile);
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a couple arbitrary URLs.
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls1;
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls1.push_back(ui_test_utils::GetTestUrl(
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls2;
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls2.push_back(ui_test_utils::GetTestUrl(
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title2.html"))));
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set different startup preferences for the 2 profiles.
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref1(SessionStartupPref::URLS);
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref1.urls = urls1;
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(default_profile, pref1);
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref2(SessionStartupPref::URLS);
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref2.urls = urls2;
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(other_profile, pref2);
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close the browser.
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->window()->Close();
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do a simple non-process-startup browser launch.
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int return_code;
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator browser_creator;
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Profile*> last_opened_profiles;
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(default_profile);
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(other_profile);
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser_creator.Start(dummy, profile_manager->user_data_dir(),
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        default_profile, last_opened_profiles, &return_code);
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // urls1 were opened in a browser for default_profile, and urls2 were opened
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in a browser for other_profile.
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* new_browser = NULL;
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |browser()| is still around at this point, even though we've closed its
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window. Thus the browser count for default_profile is 2.
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2u, chrome::GetBrowserCount(default_profile,
6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(default_profile, browser());
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(urls1[0], tab_strip->GetWebContentsAt(0)->GetURL());
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(other_profile,
6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(other_profile, NULL);
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(urls2[0], tab_strip->GetWebContentsAt(0)->GetURL());
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, PRE_UpdateWithTwoProfiles) {
64090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Simulate a browser restart by creating the profiles in the PRE_ part.
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create two profiles.
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path = profile_manager->user_data_dir();
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile1 = profile_manager->GetProfile(
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dest_path.Append(FILE_PATH_LITERAL("New Profile 1")));
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile1);
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile2 = profile_manager->GetProfile(
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dest_path.Append(FILE_PATH_LITERAL("New Profile 2")));
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile2);
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a couple arbitrary URLs.
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls1;
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls1.push_back(ui_test_utils::GetTestUrl(
6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls2;
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls2.push_back(ui_test_utils::GetTestUrl(
6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title2.html"))));
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set different startup preferences for the 2 profiles.
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref1(SessionStartupPref::URLS);
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref1.urls = urls1;
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile1, pref1);
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref2(SessionStartupPref::URLS);
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref2.urls = urls2;
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile2, pref2);
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile1->GetPrefs()->CommitPendingWrite();
67390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile2->GetPrefs()->CommitPendingWrite();
67490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
67590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
67690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, UpdateWithTwoProfiles) {
67790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Make StartupBrowserCreator::WasRestarted() return true.
67890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  StartupBrowserCreator::was_restarted_read_ = false;
67990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
68090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  pref_service->SetBoolean(prefs::kWasRestarted, true);
68190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
68290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
68390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
68490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Open the two profiles.
68590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::FilePath dest_path = profile_manager->user_data_dir();
68690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
68790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Profile* profile1 = profile_manager->GetProfile(
68890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      dest_path.Append(FILE_PATH_LITERAL("New Profile 1")));
68990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(profile1);
69090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
69190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Profile* profile2 = profile_manager->GetProfile(
69290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      dest_path.Append(FILE_PATH_LITERAL("New Profile 2")));
69390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(profile2);
69490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate a launch after a browser update.
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int return_code;
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator browser_creator;
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Profile*> last_opened_profiles;
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile1);
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile2);
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser_creator.Start(dummy, profile_manager->user_data_dir(), profile1,
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        last_opened_profiles, &return_code);
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (SessionRestore::IsRestoring(profile1) ||
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile2))
707b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The startup URLs are ignored, and instead the last open sessions are
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // restored.
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(profile1->restored_last_session());
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(profile2->restored_last_session());
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* new_browser = NULL;
7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile1,
7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile1, NULL);
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
72190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(GURL(content::kAboutBlankURL),
7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile2,
7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile2, NULL);
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
73090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(GURL(content::kAboutBlankURL),
7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ProfilesWithoutPagesNotLaunched) {
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* default_profile = browser()->profile();
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create 4 more profiles.
7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path1 = profile_manager->user_data_dir().Append(
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 1"));
7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path2 = profile_manager->user_data_dir().Append(
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 2"));
7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path3 = profile_manager->user_data_dir().Append(
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 3"));
7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path4 = profile_manager->user_data_dir().Append(
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 4"));
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_home1 = profile_manager->GetProfile(dest_path1);
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_home1);
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_home2 = profile_manager->GetProfile(dest_path2);
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_home2);
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_last = profile_manager->GetProfile(dest_path3);
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_last);
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_urls = profile_manager->GetProfile(dest_path4);
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_urls);
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the profiles to open urls, open last visited pages or display the home
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // page.
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_home(SessionStartupPref::DEFAULT);
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_home1, pref_home);
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_home2, pref_home);
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_last(SessionStartupPref::LAST);
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_last, pref_last);
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(ui_test_utils::GetTestUrl(
7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_urls(SessionStartupPref::URLS);
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_urls.urls = urls;
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_urls, pref_urls);
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close the browser.
7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::HostDesktopType original_desktop_type =
7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->host_desktop_type();
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->window()->Close();
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do a simple non-process-startup browser launch.
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int return_code;
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator browser_creator;
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Profile*> last_opened_profiles;
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_home1);
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_home2);
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_last);
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_urls);
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser_creator.Start(dummy, profile_manager->user_data_dir(), profile_home1,
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        last_opened_profiles, &return_code);
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (SessionRestore::IsRestoring(default_profile) ||
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile_home1) ||
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile_home2) ||
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile_last) ||
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile_urls))
800b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* new_browser = NULL;
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The last open profile (the profile_home1 in this case) will always be
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // launched, even if it will open just the home page.
8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_home1, original_desktop_type));
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_home1, NULL);
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // profile_urls opened the urls.
8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_urls, original_desktop_type));
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_urls, NULL);
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(urls[0], tab_strip->GetWebContentsAt(0)->GetURL());
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // profile_last opened the last open pages.
8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_last, original_desktop_type));
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_last, NULL);
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
8262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
82790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(GURL(content::kAboutBlankURL),
8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // profile_home2 was not launched since it would've only opened the home page.
8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0u, chrome::GetBrowserCount(profile_home2, original_desktop_type));
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, ProfilesLaunchedAfterCrash) {
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // After an unclean exit, all profiles will be launched. However, they won't
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // open any pages automatically.
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create 3 profiles.
8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path1 = profile_manager->user_data_dir().Append(
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 1"));
8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path2 = profile_manager->user_data_dir().Append(
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 2"));
8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path3 = profile_manager->user_data_dir().Append(
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 3"));
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_home = profile_manager->GetProfile(dest_path1);
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_home);
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_last = profile_manager->GetProfile(dest_path2);
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_last);
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_urls = profile_manager->GetProfile(dest_path3);
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_urls);
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the profiles to open the home page, last visited pages or URLs.
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_home(SessionStartupPref::DEFAULT);
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_home, pref_home);
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_last(SessionStartupPref::LAST);
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_last, pref_last);
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(ui_test_utils::GetTestUrl(
8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
8652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_urls(SessionStartupPref::URLS);
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_urls.urls = urls;
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_urls, pref_urls);
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate a launch after an unclear exit.
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->window()->Close();
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static_cast<ProfileImpl*>(profile_home)->last_session_exit_type_ =
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Profile::EXIT_CRASHED;
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static_cast<ProfileImpl*>(profile_last)->last_session_exit_type_ =
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Profile::EXIT_CRASHED;
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static_cast<ProfileImpl*>(profile_urls)->last_session_exit_type_ =
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Profile::EXIT_CRASHED;
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  dummy.AppendSwitchASCII(switches::kTestType, "browser");
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int return_code;
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator browser_creator;
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Profile*> last_opened_profiles;
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_home);
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_last);
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_urls);
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser_creator.Start(dummy, profile_manager->user_data_dir(), profile_home,
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        last_opened_profiles, &return_code);
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No profiles are getting restored, since they all display the crash info
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bar.
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(SessionRestore::IsRestoring(profile_home));
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(SessionRestore::IsRestoring(profile_last));
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(SessionRestore::IsRestoring(profile_urls));
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The profile which normally opens the home page displays the new tab page.
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* new_browser = NULL;
8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_home,
9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_home, NULL);
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebContents* web_contents = tab_strip->GetWebContentsAt(0);
9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL());
9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1U,
908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            InfoBarService::FromWebContents(web_contents)->infobar_count());
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The profile which normally opens last open pages displays the new tab page.
9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_last,
9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_last, NULL);
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_contents = tab_strip->GetWebContentsAt(0);
9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL());
9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1U,
920c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            InfoBarService::FromWebContents(web_contents)->infobar_count());
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The profile which normally opens URLs displays the new tab page.
9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_urls,
9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_urls, NULL);
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_contents = tab_strip->GetWebContentsAt(0);
9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL());
9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1U,
932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            InfoBarService::FromWebContents(web_contents)->infobar_count());
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ManagedModeBrowserCreatorTest : public InProcessBrowserTest {
936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
937c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    InProcessBrowserTest::SetUpCommandLine(command_line);
939c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    command_line->AppendSwitch(switches::kEnableManagedUsers);
940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ManagedModeBrowserCreatorTest,
945c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       StartupManagedModeProfile) {
946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Make this a managed profile.
947c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ManagedUserService* managed_user_service =
948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      ManagedUserServiceFactory::GetForProfile(browser()->profile());
949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  managed_user_service->InitForTesting();
950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  StartupBrowserCreator browser_creator;
952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  content::WindowedNotificationObserver observer(
958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::NOTIFICATION_LOAD_STOP,
959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::NotificationService::AllSources());
96090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
96190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // This should have created a new browser window.
964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // There should be only one tab.
969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(1, tab_strip->count());
970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // ENABLE_MANAGED_USERS
973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !OS_CHROMEOS
975