startup_browser_creator_browsertest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_path.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.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" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/first_run/first_run.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/infobars/infobar_tab_helper.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/pref_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" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list_observer.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator_impl.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/tab_contents.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StartupBrowserCreatorTest : public ExtensionBrowserTest { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool SetUpUserDataDirectory() OVERRIDE { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the first run sentinel file exists before running these tests, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // since some of them customize the session startup pref whose value can 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be different than the default during the first run. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bauerb): set the first run flag instead of creating a sentinel file. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_run::CreateSentinel(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ExtensionBrowserTest::SetUpUserDataDirectory(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionBrowserTest::SetUpCommandLine(command_line); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kEnablePanels); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kHomePage, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::kAboutBlankURL); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nkostylev): Investigate if we can remove this switch. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kCreateBrowserOnStartupForTests); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper functions return void so that we can ASSERT*(). 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use ASSERT_NO_FATAL_FAILURE around calls to these functions to stop the 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // test if an assert fails. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadApp(const std::string& app_name, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension** out_app_extension) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(app_name.c_str()))); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* service = browser()->profile()->GetExtensionService(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *out_app_extension = service->GetExtensionById( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_loaded_extension_id_, false); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(*out_app_extension); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Code that opens a new browser assumes we start with exactly one. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(browser()->profile())); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAppLaunchPref(const std::string& app_id, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionPrefs::LaunchType launch_type) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* service = browser()->profile()->GetExtensionService(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->extension_prefs()->SetLaunchType(app_id, launch_type); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that there are two browsers. Find the one that is not |browser()|. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FindOneOtherBrowser(Browser** out_other_browser) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should only be one other browser. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile())); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the new browser. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* other_browser = NULL; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (BrowserList::const_iterator i = BrowserList::begin(); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != BrowserList::end() && !other_browser; ++i) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (*i != browser()) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) other_browser = *i; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(other_browser); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(other_browser != browser()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *out_other_browser = other_browser; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* FindOneOtherBrowserForProfile(Profile* profile, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* not_this_browser) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (BrowserList::const_iterator i = BrowserList::begin(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != BrowserList::end(); ++i) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (*i != not_this_browser && (*i)->profile() == profile) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *i; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OpenURLsPopupObserver : public chrome::BrowserListObserver { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenURLsPopupObserver() : added_browser_(NULL) { } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnBrowserAdded(Browser* browser) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) added_browser_ = browser; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnBrowserRemoved(Browser* browser) { } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* added_browser_; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that when there is a popup as the active browser any requests to 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// StartupBrowserCreatorImpl::OpenURLsInBrowser don't crash because there's no 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// explicit profile given. 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenURLsPopup) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(GURL("http://localhost")); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that in our testing we do not ever query the BrowserList for the "last 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // active" browser. That's because the browsers are set as "active" by 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // platform UI toolkit messages, and those messages are not sent during unit 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing sessions. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenURLsPopupObserver observer; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserList::AddObserver(&observer); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup = new Browser( 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile())); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(popup->is_type_popup()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(popup, observer.added_browser_); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreatorImpl launch(FilePath(), dummy, first_run); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should create a new window, but re-use the profile from |popup|. If 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it used a NULL or invalid profile, it would crash. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) launch.OpenURLsInBrowser(popup, false, urls); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(popup, observer.added_browser_); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserList::RemoveObserver(&observer); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We don't do non-process-startup browser launches on ChromeOS. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Session restore for process-startup browser launches is tested 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in session_restore_uitest. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that startup URLs are honored when the process already exists but has 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// no tabbed browser windows (eg. as if the process is running only due to a 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// background application. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupURLsOnNewWindowWithNoTabbedBrowsers) { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a couple same-site HTTP URLs. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(test_server()->GetURL("files/title1.html")); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(test_server()->GetURL("files/title2.html")); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the startup preference to open these URLs. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref(SessionStartupPref::URLS); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.urls = urls; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(browser()->profile(), pref); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browser. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->window()->Close(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a simple non-process-startup browser launch. 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreatorImpl launch(FilePath(), dummy, first_run); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false)); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should have created a new browser window. |browser()| is still 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // around at this point, even though we've closed its window. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FindOneOtherBrowser(&new_browser)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The new browser should have one tab for each URL. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<int>(urls.size()), new_browser->tab_count()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i=0; i < urls.size(); i++) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(urls[i], chrome::GetWebContentsAt(new_browser, i)->GetURL()); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The two tabs, despite having the same site, should be in different 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SiteInstances. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(chrome::GetWebContentsAt(new_browser, 0)->GetSiteInstance(), 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GetWebContentsAt(new_browser, 1)->GetSiteInstance()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that startup URLs aren't used when the process already exists 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and has other tabbed browser windows. This is the common case of starting a 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// new browser. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupURLsOnNewWindow) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a couple arbitrary URLs. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(ui_test_utils::GetTestUrl( 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FilePath::kCurrentDirectory), 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FILE_PATH_LITERAL("title1.html")))); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(ui_test_utils::GetTestUrl( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FilePath::kCurrentDirectory), 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FILE_PATH_LITERAL("title2.html")))); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the startup preference to open these URLs. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref(SessionStartupPref::URLS); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.urls = urls; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(browser()->profile(), pref); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a simple non-process-startup browser launch. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreatorImpl launch(FilePath(), dummy, first_run); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false)); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should have created a new browser window. 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FindOneOtherBrowser(&new_browser)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The new browser should have exactly one tab (not the startup URLs). 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App shortcuts are not implemented on mac os. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutNoPref) { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load an app with launch.container = 'tab'. 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = NULL; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app)); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add --app-id=<extension->id()> to the command line. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kAppId, extension_app->id()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreatorImpl launch(FilePath(), command_line, first_run); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false)); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No pref was set, so the app should have opened in a window. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The launch should have created a new browser. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FindOneOtherBrowser(&new_browser)); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expect an app window. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_browser->is_app()); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser's app_name should include the app's ID. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE( 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->app_name_.find(extension_app->id()), 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::npos) << new_browser->app_name_; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutWindowPref) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = NULL; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app)); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a pref indicating that the user wants to open this app in a window. 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetAppLaunchPref(extension_app->id(), 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionPrefs::LAUNCH_WINDOW); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kAppId, extension_app->id()); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreatorImpl launch(FilePath(), command_line, first_run); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pref was set to open in a window, so the app should have opened in a 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window. The launch should have created a new browser. Find the new 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FindOneOtherBrowser(&new_browser)); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expect an app window. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_browser->is_app()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser's app_name should include the app's ID. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE( 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->app_name_.find(extension_app->id()), 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::npos) << new_browser->app_name_; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutTabPref) { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load an app with launch.container = 'tab'. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = NULL; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app)); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a pref indicating that the user wants to open this app in a window. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetAppLaunchPref(extension_app->id(), 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionPrefs::LAUNCH_REGULAR); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kAppId, extension_app->id()); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreatorImpl launch(FilePath(), command_line, first_run); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false)); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When an app shortcut is open and the pref indicates a tab should 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // open, the tab is open in a new browser window. Expect a new window. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile())); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FindOneOtherBrowser(&new_browser)); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The tab should be in a tabbed window. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_browser->is_type_tabbed()); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser's app_name should not include the app's ID: It is in a 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // normal browser. 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->app_name_.find(extension_app->id()), 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::npos) << new_browser->app_name_; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_MACOSX) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadingWasRestartedAfterRestart) { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests that StartupBrowserCreator::WasRestarted reads and resets the 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference kWasRestarted correctly. 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator::was_restarted_read_ = false; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service = g_browser_process->local_state(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service->SetBoolean(prefs::kWasRestarted, true); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(StartupBrowserCreator::WasRestarted()); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pref_service->GetBoolean(prefs::kWasRestarted)); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(StartupBrowserCreator::WasRestarted()); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadingWasRestartedAfterNormalStart) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests that StartupBrowserCreator::WasRestarted reads and resets the 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference kWasRestarted correctly. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator::was_restarted_read_ = false; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service = g_browser_process->local_state(); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service->SetBoolean(prefs::kWasRestarted, false); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(StartupBrowserCreator::WasRestarted()); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pref_service->GetBoolean(prefs::kWasRestarted)); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(StartupBrowserCreator::WasRestarted()); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, StartupURLsForTwoProfiles) { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* default_profile = browser()->profile(); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create another profile. 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path = profile_manager->user_data_dir(); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile 1")); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* other_profile = profile_manager->GetProfile(dest_path); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(other_profile); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a couple arbitrary URLs. 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls1; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls1.push_back(ui_test_utils::GetTestUrl( 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FilePath::kCurrentDirectory), 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FILE_PATH_LITERAL("title1.html")))); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls2; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls2.push_back(ui_test_utils::GetTestUrl( 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FilePath::kCurrentDirectory), 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FILE_PATH_LITERAL("title2.html")))); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set different startup preferences for the 2 profiles. 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref1(SessionStartupPref::URLS); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref1.urls = urls1; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(default_profile, pref1); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref2(SessionStartupPref::URLS); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref2.urls = urls2; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(other_profile, pref2); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browser. 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->window()->Close(); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a simple non-process-startup browser launch. 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int return_code; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator browser_creator; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(default_profile); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(other_profile); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_creator.Start(dummy, profile_manager->user_data_dir(), 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_profile, last_opened_profiles, &return_code); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // urls1 were opened in a browser for default_profile, and urls2 were opened 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in a browser for other_profile. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |browser()| is still around at this point, even though we've closed its 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window. Thus the browser count for default_profile is 2. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(default_profile)); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(default_profile, browser()); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(urls1[0], chrome::GetWebContentsAt(new_browser, 0)->GetURL()); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(other_profile)); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(other_profile, NULL); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(urls2[0], chrome::GetWebContentsAt(new_browser, 0)->GetURL()); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, UpdateWithTwoProfiles) { 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make StartupBrowserCreator::WasRestarted() return true. 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator::was_restarted_read_ = false; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service = g_browser_process->local_state(); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service->SetBoolean(prefs::kWasRestarted, true); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create two profiles. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path = profile_manager->user_data_dir(); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile1 = profile_manager->GetProfile( 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path.Append(FILE_PATH_LITERAL("New Profile 1"))); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile2 = profile_manager->GetProfile( 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path.Append(FILE_PATH_LITERAL("New Profile 2"))); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a couple arbitrary URLs. 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls1; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls1.push_back(ui_test_utils::GetTestUrl( 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FilePath::kCurrentDirectory), 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FILE_PATH_LITERAL("title1.html")))); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls2; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls2.push_back(ui_test_utils::GetTestUrl( 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FilePath::kCurrentDirectory), 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FILE_PATH_LITERAL("title2.html")))); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set different startup preferences for the 2 profiles. 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref1(SessionStartupPref::URLS); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref1.urls = urls1; 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile1, pref1); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref2(SessionStartupPref::URLS); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref2.urls = urls2; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile2, pref2); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a launch after a browser update. 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int return_code; 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator browser_creator; 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile1); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile2); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_creator.Start(dummy, profile_manager->user_data_dir(), profile1, 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles, &return_code); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (SessionRestore::IsRestoring(profile1) || 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile2)) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->RunAllPending(); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The startup URLs are ignored, and instead the last open sessions are 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // restored. 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile1->restored_last_session()); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile2->restored_last_session()); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile1)); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile1, NULL); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kAboutBlankURL), 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GetWebContentsAt(new_browser, 0)->GetURL()); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile2)); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile2, NULL); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kAboutBlankURL), 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GetWebContentsAt(new_browser, 0)->GetURL()); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfilesWithoutPagesNotLaunched) { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* default_profile = browser()->profile(); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create 4 more profiles. 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path1 = profile_manager->user_data_dir().Append( 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 1")); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path2 = profile_manager->user_data_dir().Append( 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 2")); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path3 = profile_manager->user_data_dir().Append( 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 3")); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path4 = profile_manager->user_data_dir().Append( 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 4")); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_home1 = profile_manager->GetProfile(dest_path1); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_home1); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_home2 = profile_manager->GetProfile(dest_path2); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_home2); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_last = profile_manager->GetProfile(dest_path3); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_last); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_urls = profile_manager->GetProfile(dest_path4); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_urls); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the profiles to open urls, open last visited pages or display the home 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page. 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_home(SessionStartupPref::DEFAULT); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_home1, pref_home); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_home2, pref_home); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_last(SessionStartupPref::LAST); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_last, pref_last); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(ui_test_utils::GetTestUrl( 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FilePath::kCurrentDirectory), 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FILE_PATH_LITERAL("title1.html")))); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_urls(SessionStartupPref::URLS); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_urls.urls = urls; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_urls, pref_urls); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browser. 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->window()->Close(); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a simple non-process-startup browser launch. 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int return_code; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator browser_creator; 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_home1); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_home2); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_last); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_urls); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_creator.Start(dummy, profile_manager->user_data_dir(), profile_home1, 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles, &return_code); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (SessionRestore::IsRestoring(default_profile) || 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile_home1) || 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile_home2) || 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile_last) || 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile_urls)) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->RunAllPending(); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The last open profile (the profile_home1 in this case) will always be 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launched, even if it will open just the home page. 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_home1)); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_home1, NULL); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GetWebContentsAt(new_browser, 0)->GetURL()); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile_urls opened the urls. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_urls)); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_urls, NULL); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(urls[0], chrome::GetWebContentsAt(new_browser, 0)->GetURL()); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile_last opened the last open pages. 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_last)); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_last, NULL); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kAboutBlankURL), 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GetWebContentsAt(new_browser, 0)->GetURL()); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile_home2 was not launched since it would've only opened the home page. 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0u, chrome::GetBrowserCount(profile_home2)); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, ProfilesLaunchedAfterCrash) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After an unclean exit, all profiles will be launched. However, they won't 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // open any pages automatically. 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create 3 profiles. 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path1 = profile_manager->user_data_dir().Append( 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 1")); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path2 = profile_manager->user_data_dir().Append( 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 2")); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath dest_path3 = profile_manager->user_data_dir().Append( 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 3")); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_home = profile_manager->GetProfile(dest_path1); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_home); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_last = profile_manager->GetProfile(dest_path2); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_last); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_urls = profile_manager->GetProfile(dest_path3); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_urls); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the profiles to open the home page, last visited pages or URLs. 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_home(SessionStartupPref::DEFAULT); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_home, pref_home); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_last(SessionStartupPref::LAST); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_last, pref_last); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(ui_test_utils::GetTestUrl( 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FilePath::kCurrentDirectory), 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath(FILE_PATH_LITERAL("title1.html")))); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_urls(SessionStartupPref::URLS); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_urls.urls = urls; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_urls, pref_urls); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a launch after an unclear exit. 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->window()->Close(); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ProfileImpl*>(profile_home)->last_session_exit_type_ = 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXIT_CRASHED; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ProfileImpl*>(profile_last)->last_session_exit_type_ = 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXIT_CRASHED; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ProfileImpl*>(profile_urls)->last_session_exit_type_ = 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXIT_CRASHED; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int return_code; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator browser_creator; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_home); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_last); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_urls); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_creator.Start(dummy, profile_manager->user_data_dir(), profile_home, 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles, &return_code); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No profiles are getting restored, since they all display the crash info 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bar. 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SessionRestore::IsRestoring(profile_home)); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SessionRestore::IsRestoring(profile_last)); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SessionRestore::IsRestoring(profile_urls)); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile which normally opens the home page displays the new tab page. 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_home)); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_home, NULL); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents = chrome::GetWebContentsAt(new_browser, 0); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->GetURL()); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, InfoBarTabHelper::FromWebContents(web_contents)-> 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInfoBarCount()); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile which normally opens last open pages displays the new tab page. 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_last)); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_last, NULL); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents = chrome::GetWebContentsAt(new_browser, 0); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->GetURL()); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, InfoBarTabHelper::FromWebContents(web_contents)-> 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInfoBarCount()); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile which normally opens URLs displays the new tab page. 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_urls)); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_urls, NULL); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, new_browser->tab_count()); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents = chrome::GetWebContentsAt(new_browser, 0); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->GetURL()); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, InfoBarTabHelper::FromWebContents(web_contents)-> 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInfoBarCount()); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !OS_CHROMEOS 683