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