startup_browser_creator_browsertest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <algorithm> 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <string> 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/first_run/first_run.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/session_startup_pref.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_impl.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_restore.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_iterator.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list_observer.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator_impl.h" 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_mode_navigation_observer.h" 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_service.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_service_factory.h" 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(ENABLE_MANAGED_USERS) 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS) 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h" 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/run_loop.h" 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/values.h" 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/policy/browser_policy_connector.h" 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/external_data_fetcher.h" 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/policy/mock_configuration_policy_provider.h" 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/policy/policy_map.h" 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/policy/policy_types.h" 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "policy/policy_constants.h" 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::_; 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::AnyNumber; 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::Return; 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Check that there are two browsers. Find the one that is not |browser|. 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)Browser* FindOneOtherBrowser(Browser* browser) { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There should only be one other browser. 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetBrowserCount(browser->profile(), 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser->host_desktop_type())); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Find the new browser. 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* other_browser = NULL; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (chrome::BrowserIterator it; !it.done() && !other_browser; it.Next()) { 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (*it != browser) 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) other_browser = *it; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return other_browser; 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StartupBrowserCreatorTest : public ExtensionBrowserTest { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool SetUpUserDataDirectory() OVERRIDE { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the first run sentinel file exists before running these tests, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // since some of them customize the session startup pref whose value can 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be different than the default during the first run. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bauerb): set the first run flag instead of creating a sentinel file. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_run::CreateSentinel(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ExtensionBrowserTest::SetUpUserDataDirectory(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionBrowserTest::SetUpCommandLine(command_line); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kEnablePanels); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kHomePage, 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::kAboutBlankURL); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nkostylev): Investigate if we can remove this switch. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kCreateBrowserOnStartupForTests); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper functions return void so that we can ASSERT*(). 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use ASSERT_NO_FATAL_FAILURE around calls to these functions to stop the 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // test if an assert fails. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadApp(const std::string& app_name, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension** out_app_extension) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(app_name.c_str()))); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *out_app_extension = service->GetExtensionById( 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_loaded_extension_id_, false); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(*out_app_extension); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Code that opens a new browser assumes we start with exactly one. 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(browser()->profile(), 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAppLaunchPref(const std::string& app_id, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionPrefs::LaunchType launch_type) { 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->extension_prefs()->SetLaunchType(app_id, launch_type); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* FindOneOtherBrowserForProfile(Profile* profile, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* not_this_browser) { 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (chrome::BrowserIterator it; !it.done(); it.Next()) { 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (*it != not_this_browser && it->profile() == profile) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *it; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OpenURLsPopupObserver : public chrome::BrowserListObserver { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenURLsPopupObserver() : added_browser_(NULL) { } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnBrowserAdded(Browser* browser) OVERRIDE { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) added_browser_ = browser; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnBrowserRemoved(Browser* browser) OVERRIDE { } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* added_browser_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that when there is a popup as the active browser any requests to 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// StartupBrowserCreatorImpl::OpenURLsInBrowser don't crash because there's no 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// explicit profile given. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenURLsPopup) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(GURL("http://localhost")); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that in our testing we do not ever query the BrowserList for the "last 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // active" browser. That's because the browsers are set as "active" by 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // platform UI toolkit messages, and those messages are not sent during unit 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing sessions. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenURLsPopupObserver observer; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserList::AddObserver(&observer); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup = new Browser( 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(), 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(popup->is_type_popup()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(popup, observer.added_browser_); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should create a new window, but re-use the profile from |popup|. If 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it used a NULL or invalid profile, it would crash. 18390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) launch.OpenURLsInBrowser(popup, false, urls, 18490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(popup, observer.added_browser_); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserList::RemoveObserver(&observer); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We don't do non-process-startup browser launches on ChromeOS. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Session restore for process-startup browser launches is tested 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in session_restore_uitest. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that startup URLs are honored when the process already exists but has 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// no tabbed browser windows (eg. as if the process is running only due to a 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// background application. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupURLsOnNewWindowWithNoTabbedBrowsers) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a couple same-site HTTP URLs. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(test_server()->GetURL("files/title1.html")); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(test_server()->GetURL("files/title2.html")); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the startup preference to open these URLs. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref(SessionStartupPref::URLS); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.urls = urls; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(browser()->profile(), pref); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browser. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->window()->Close(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a simple non-process-startup browser launch. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run); 21790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 21890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should have created a new browser window. |browser()| is still 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // around at this point, even though we've closed its window. 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The new browser should have one tab for each URL. 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(static_cast<int>(urls.size()), tab_strip->count()); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i=0; i < urls.size(); i++) { 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(urls[i], tab_strip->GetWebContentsAt(i)->GetURL()); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The two tabs, despite having the same site, should be in different 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SiteInstances. 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(tab_strip->GetWebContentsAt(0)->GetSiteInstance(), 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetSiteInstance()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that startup URLs aren't used when the process already exists 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and has other tabbed browser windows. This is the common case of starting a 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// new browser. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupURLsOnNewWindow) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a couple arbitrary URLs. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(ui_test_utils::GetTestUrl( 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title1.html")))); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(ui_test_utils::GetTestUrl( 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title2.html")))); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the startup preference to open these URLs. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref(SessionStartupPref::URLS); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.urls = urls; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(browser()->profile(), pref); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a simple non-process-startup browser launch. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run); 26290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 26390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should have created a new browser window. 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The new browser should have exactly one tab (not the startup URLs). 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, new_browser->tab_strip_model()->count()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App shortcuts are not implemented on mac os. 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutNoPref) { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load an app with launch.container = 'tab'. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = NULL; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add --app-id=<extension->id()> to the command line. 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kAppId, extension_app->id()); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run); 28790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 28890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No pref was set, so the app should have opened in a window. 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The launch should have created a new browser. 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expect an app window. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_browser->is_app()); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser's app_name should include the app's ID. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE( 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->app_name_.find(extension_app->id()), 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::npos) << new_browser->app_name_; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutWindowPref) { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = NULL; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a pref indicating that the user wants to open this app in a window. 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetAppLaunchPref(extension_app->id(), 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionPrefs::LAUNCH_WINDOW); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kAppId, extension_app->id()); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run); 31790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 31890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pref was set to open in a window, so the app should have opened in a 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window. The launch should have created a new browser. Find the new 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser. 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expect an app window. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_browser->is_app()); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser's app_name should include the app's ID. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE( 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->app_name_.find(extension_app->id()), 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::npos) << new_browser->app_name_; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutTabPref) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load an app with launch.container = 'tab'. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = NULL; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app)); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a pref indicating that the user wants to open this app in a window. 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetAppLaunchPref(extension_app->id(), 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionPrefs::LAUNCH_REGULAR); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kAppId, extension_app->id()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run); 34990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When an app shortcut is open and the pref indicates a tab should 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // open, the tab is open in a new browser window. Expect a new window. 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile(), 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The tab should be in a tabbed window. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_browser->is_type_tabbed()); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser's app_name should not include the app's ID: It is in a 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // normal browser. 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->app_name_.find(extension_app->id()), 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::npos) << new_browser->app_name_; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_MACOSX) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadingWasRestartedAfterRestart) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests that StartupBrowserCreator::WasRestarted reads and resets the 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference kWasRestarted correctly. 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator::was_restarted_read_ = false; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service = g_browser_process->local_state(); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service->SetBoolean(prefs::kWasRestarted, true); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(StartupBrowserCreator::WasRestarted()); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pref_service->GetBoolean(prefs::kWasRestarted)); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(StartupBrowserCreator::WasRestarted()); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadingWasRestartedAfterNormalStart) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests that StartupBrowserCreator::WasRestarted reads and resets the 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference kWasRestarted correctly. 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator::was_restarted_read_ = false; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service = g_browser_process->local_state(); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service->SetBoolean(prefs::kWasRestarted, false); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(StartupBrowserCreator::WasRestarted()); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pref_service->GetBoolean(prefs::kWasRestarted)); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(StartupBrowserCreator::WasRestarted()); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, AddFirstRunTab) { 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreator browser_creator; 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title2.html")); 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do a simple non-process-startup browser launch. 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::startup::IS_FIRST_RUN); 40790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 40890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should have created a new browser window. 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, tab_strip->count()); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("title1.html", 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName()); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("title2.html", 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName()); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test hard-coded special first run tabs (defined in 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StartupBrowserCreatorImpl::AddStartupURLs()). 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, AddCustomFirstRunTab) { 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreator browser_creator; 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(GURL("http://new_tab_page")); 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title2.html")); 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(GURL("http://welcome_page")); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do a simple non-process-startup browser launch. 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::startup::IS_FIRST_RUN); 43690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 43790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should have created a new browser window. 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(4, tab_strip->count()); 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("title1.html", 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName()); 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL()); 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("title2.html", 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(2)->GetURL().ExtractFileName()); 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(internals::GetWelcomePageURL(), 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(3)->GetURL()); 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoNoWelcomePage) { 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Trick this test into thinking the promo has been shown for this profile; so 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that it will show it again (otherwise it skips showing it since 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // --no-first-run is specified in browser tests). 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile()); 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do a simple non-process-startup browser launch. 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::startup::IS_FIRST_RUN); 46690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 46790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should have created a new browser window. 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, tab_strip->count()); 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) { 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host()); 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL()); 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoWithWelcomePage) { 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Trick this test into thinking the promo has been shown for this profile; so 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that it will show it again (otherwise it skips showing it since 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // --no-first-run is specified in browser tests). 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile()); 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) first_run::SetShouldShowWelcomePage(); 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do a simple non-process-startup browser launch. 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::startup::IS_FIRST_RUN); 49590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 49690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should have created a new browser window. 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, tab_strip->count()); 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) { 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host()); 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL()); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(internals::GetWelcomePageURL(), 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL()); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoWithFirstRunTabs) { 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreator browser_creator; 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Trick this test into thinking the promo has been shown for this profile; so 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that it will show it again (otherwise it skips showing it since 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // --no-first-run is specified in browser tests). 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile()); 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The welcome page should not be shown, even if 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // first_run::ShouldShowWelcomePage() says so, when there are already 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // more than 2 first run tabs. 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) first_run::SetShouldShowWelcomePage(); 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do a simple non-process-startup browser launch. 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::startup::IS_FIRST_RUN); 53390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 53490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should have created a new browser window. 537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) { 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, tab_strip->count()); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host()); 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("title1.html", 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName()); 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, tab_strip->count()); 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("title1.html", 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName()); 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The welcome page should still be shown if there are more than 2 first run 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// tabs, but the welcome page was explcitly added to the first run tabs. 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SyncPromoWithFirstRunTabsIncludingWelcomePage) { 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreator browser_creator; 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_creator.AddFirstRunTab(GURL("http://welcome_page")); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Trick this test into thinking the promo has been shown for this profile; so 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that it will show it again (otherwise it skips showing it since 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // --no-first-run is specified in browser tests). 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile()); 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do a simple non-process-startup browser launch. 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::startup::IS_FIRST_RUN); 57090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 57190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should have created a new browser window. 574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) { 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, tab_strip->count()); 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host()); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("title1.html", 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName()); 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(internals::GetWelcomePageURL(), 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(2)->GetURL()); 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, tab_strip->count()); 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("title1.html", 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName()); 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(internals::GetWelcomePageURL(), 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL()); 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, StartupURLsForTwoProfiles) { 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* default_profile = browser()->profile(); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create another profile. 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = profile_manager->user_data_dir(); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile 1")); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* other_profile = profile_manager->GetProfile(dest_path); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(other_profile); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a couple arbitrary URLs. 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls1; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls1.push_back(ui_test_utils::GetTestUrl( 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title1.html")))); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls2; 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls2.push_back(ui_test_utils::GetTestUrl( 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title2.html")))); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set different startup preferences for the 2 profiles. 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref1(SessionStartupPref::URLS); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref1.urls = urls1; 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(default_profile, pref1); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref2(SessionStartupPref::URLS); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref2.urls = urls2; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(other_profile, pref2); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browser. 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->window()->Close(); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a simple non-process-startup browser launch. 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int return_code; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator browser_creator; 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles; 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(default_profile); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(other_profile); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_creator.Start(dummy, profile_manager->user_data_dir(), 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_profile, last_opened_profiles, &return_code); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // urls1 were opened in a browser for default_profile, and urls2 were opened 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in a browser for other_profile. 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |browser()| is still around at this point, even though we've closed its 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window. Thus the browser count for default_profile is 2. 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(default_profile, 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(default_profile, browser()); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(urls1[0], tab_strip->GetWebContentsAt(0)->GetURL()); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(other_profile, 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(other_profile, NULL); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip = new_browser->tab_strip_model(); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(urls2[0], tab_strip->GetWebContentsAt(0)->GetURL()); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 66090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, PRE_UpdateWithTwoProfiles) { 66190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Simulate a browser restart by creating the profiles in the PRE_ part. 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create two profiles. 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = profile_manager->user_data_dir(); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile1 = profile_manager->GetProfile( 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path.Append(FILE_PATH_LITERAL("New Profile 1"))); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile2 = profile_manager->GetProfile( 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path.Append(FILE_PATH_LITERAL("New Profile 2"))); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a couple arbitrary URLs. 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls1; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls1.push_back(ui_test_utils::GetTestUrl( 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title1.html")))); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls2; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls2.push_back(ui_test_utils::GetTestUrl( 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title2.html")))); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set different startup preferences for the 2 profiles. 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref1(SessionStartupPref::URLS); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref1.urls = urls1; 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile1, pref1); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref2(SessionStartupPref::URLS); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref2.urls = urls2; 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile2, pref2); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 69390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile1->GetPrefs()->CommitPendingWrite(); 69490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile2->GetPrefs()->CommitPendingWrite(); 69590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 69690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 69790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, UpdateWithTwoProfiles) { 69890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Make StartupBrowserCreator::WasRestarted() return true. 69990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) StartupBrowserCreator::was_restarted_read_ = false; 70090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PrefService* pref_service = g_browser_process->local_state(); 70190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) pref_service->SetBoolean(prefs::kWasRestarted, true); 70290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 70390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 70490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 70590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Open the two profiles. 70690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath dest_path = profile_manager->user_data_dir(); 70790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 70890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Profile* profile1 = profile_manager->GetProfile( 70990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) dest_path.Append(FILE_PATH_LITERAL("New Profile 1"))); 71090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(profile1); 71190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 71290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Profile* profile2 = profile_manager->GetProfile( 71390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) dest_path.Append(FILE_PATH_LITERAL("New Profile 2"))); 71490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(profile2); 71590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a launch after a browser update. 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int return_code; 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator browser_creator; 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles; 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile1); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile2); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_creator.Start(dummy, profile_manager->user_data_dir(), profile1, 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles, &return_code); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (SessionRestore::IsRestoring(profile1) || 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile2)) 728b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The startup URLs are ignored, and instead the last open sessions are 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // restored. 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile1->restored_last_session()); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile2->restored_last_session()); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile1, 7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile1, NULL); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 74290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(GURL(content::kAboutBlankURL), 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL()); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile2, 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile2, NULL); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip = new_browser->tab_strip_model(); 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 75190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(GURL(content::kAboutBlankURL), 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL()); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfilesWithoutPagesNotLaunched) { 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* default_profile = browser()->profile(); 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create 4 more profiles. 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = profile_manager->user_data_dir().Append( 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 1")); 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = profile_manager->user_data_dir().Append( 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 2")); 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path3 = profile_manager->user_data_dir().Append( 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 3")); 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path4 = profile_manager->user_data_dir().Append( 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 4")); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_home1 = profile_manager->GetProfile(dest_path1); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_home1); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_home2 = profile_manager->GetProfile(dest_path2); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_home2); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_last = profile_manager->GetProfile(dest_path3); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_last); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_urls = profile_manager->GetProfile(dest_path4); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_urls); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the profiles to open urls, open last visited pages or display the home 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page. 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_home(SessionStartupPref::DEFAULT); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_home1, pref_home); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_home2, pref_home); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_last(SessionStartupPref::LAST); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_last, pref_last); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(ui_test_utils::GetTestUrl( 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title1.html")))); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_urls(SessionStartupPref::URLS); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_urls.urls = urls; 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_urls, pref_urls); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browser. 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HostDesktopType original_desktop_type = 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type(); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->window()->Close(); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a simple non-process-startup browser launch. 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int return_code; 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator browser_creator; 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles; 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_home1); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_home2); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_last); 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_urls); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_creator.Start(dummy, profile_manager->user_data_dir(), profile_home1, 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles, &return_code); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (SessionRestore::IsRestoring(default_profile) || 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile_home1) || 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile_home2) || 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile_last) || 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionRestore::IsRestoring(profile_urls)) 821b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The last open profile (the profile_home1 in this case) will always be 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launched, even if it will open just the home page. 8262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_home1, original_desktop_type)); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_home1, NULL); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 8292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL()); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile_urls opened the urls. 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_urls, original_desktop_type)); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_urls, NULL); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip = new_browser->tab_strip_model(); 8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(urls[0], tab_strip->GetWebContentsAt(0)->GetURL()); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile_last opened the last open pages. 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_last, original_desktop_type)); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_last, NULL); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip = new_browser->tab_strip_model(); 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 84890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(GURL(content::kAboutBlankURL), 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL()); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile_home2 was not launched since it would've only opened the home page. 8522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0u, chrome::GetBrowserCount(profile_home2, original_desktop_type)); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, ProfilesLaunchedAfterCrash) { 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After an unclean exit, all profiles will be launched. However, they won't 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // open any pages automatically. 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create 3 profiles. 8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = profile_manager->user_data_dir().Append( 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 1")); 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = profile_manager->user_data_dir().Append( 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 2")); 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path3 = profile_manager->user_data_dir().Append( 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("New Profile 3")); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_home = profile_manager->GetProfile(dest_path1); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_home); 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_last = profile_manager->GetProfile(dest_path2); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_last); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_urls = profile_manager->GetProfile(dest_path3); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_urls); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the profiles to open the home page, last visited pages or URLs. 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_home(SessionStartupPref::DEFAULT); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_home, pref_home); 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_last(SessionStartupPref::LAST); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_last, pref_last); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls; 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls.push_back(ui_test_utils::GetTestUrl( 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title1.html")))); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref pref_urls(SessionStartupPref::URLS); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_urls.urls = urls; 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStartupPref::SetStartupPref(profile_urls, pref_urls); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a launch after an unclear exit. 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->window()->Close(); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ProfileImpl*>(profile_home)->last_session_exit_type_ = 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXIT_CRASHED; 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ProfileImpl*>(profile_last)->last_session_exit_type_ = 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXIT_CRASHED; 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ProfileImpl*>(profile_urls)->last_session_exit_type_ = 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXIT_CRASHED; 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dummy.AppendSwitchASCII(switches::kTestType, "browser"); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int return_code; 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupBrowserCreator browser_creator; 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles; 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_home); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_last); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles.push_back(profile_urls); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_creator.Start(dummy, profile_manager->user_data_dir(), profile_home, 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles, &return_code); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No profiles are getting restored, since they all display the crash info 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bar. 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SessionRestore::IsRestoring(profile_home)); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SessionRestore::IsRestoring(profile_last)); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SessionRestore::IsRestoring(profile_urls)); 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile which normally opens the home page displays the new tab page. 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_home, 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_home, NULL); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = tab_strip->GetWebContentsAt(0); 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL()); 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, 929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InfoBarService::FromWebContents(web_contents)->infobar_count()); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile which normally opens last open pages displays the new tab page. 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_last, 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_last, NULL); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip = new_browser->tab_strip_model(); 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents = tab_strip->GetWebContentsAt(0); 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL()); 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, 941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InfoBarService::FromWebContents(web_contents)->infobar_count()); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile which normally opens URLs displays the new tab page. 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(profile_urls, 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser = FindOneOtherBrowserForProfile(profile_urls, NULL); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip = new_browser->tab_strip_model(); 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents = tab_strip->GetWebContentsAt(0); 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL()); 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, 953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InfoBarService::FromWebContents(web_contents)->infobar_count()); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ManagedModeBrowserCreatorTest : public InProcessBrowserTest { 957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InProcessBrowserTest::SetUpCommandLine(command_line); 960c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableManagedUsers); 961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS) 965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ManagedModeBrowserCreatorTest, 966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StartupManagedModeProfile) { 967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make this a managed profile. 968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ManagedUserService* managed_user_service = 969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ManagedUserServiceFactory::GetForProfile(browser()->profile()); 970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) managed_user_service->InitForTesting(); 971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StartupBrowserCreator browser_creator; 973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 974c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Do a simple non-process-startup browser launch. 975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::startup::IS_FIRST_RUN); 978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WindowedNotificationObserver observer( 979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 980c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 98190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false, 98290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type())); 983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This should have created a new browser window. 985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(new_browser); 987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There should be only one tab. 990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1, tab_strip->count()); 991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(ENABLE_MANAGED_USERS) 9947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 9957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 9967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 9977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// These tests are not applicable to Chrome OS as neither master_preferences nor 9987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// the sync promo exist there. 9997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(OS_CHROMEOS) 10007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// On a branded Linux build, policy is required to suppress the first-run 10027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// dialog. 10037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(OS_LINUX) || !defined(GOOGLE_CHROME_BUILD) || \ 10047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) defined(ENABLE_CONFIGURATION_POLICY) 10057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class StartupBrowserCreatorFirstRunTest : public InProcessBrowserTest { 10077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected: 10087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; 10097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 10117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy::MockConfigurationPolicyProvider provider_; 10127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy::PolicyMap policy_map_; 10137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(ENABLE_CONFIGURATION_POLICY) 10147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 10157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void StartupBrowserCreatorFirstRunTest::SetUpInProcessBrowserTestFixture() { 10177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Remove the --no-first-run flag from the command line. 10187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 10197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine::StringVector argv = command_line->argv(); 10207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string first_run_flag = std::string("--") + switches::kNoFirstRun; 10217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN) 10227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) argv.erase(std::find(argv.begin(), argv.end(), ASCIIToWide(first_run_flag))); 10237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else 10247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) argv.erase(std::find(argv.begin(), argv.end(), first_run_flag)); 10257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 10267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) command_line->InitFromArgv(argv); 10277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 10297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD) 10307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Set a policy that prevents the first-run dialog from being shown. 10317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy_map_.Set(policy::key::kMetricsReportingEnabled, 10327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, 10337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Value::CreateBooleanValue(false), NULL); 10347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) provider_.UpdateChromePolicy(policy_map_); 10357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD) 10367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(provider_, IsInitializationComplete(_)) 10387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) .WillRepeatedly(Return(true)); 10397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber()); 10407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); 10417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(ENABLE_CONFIGURATION_POLICY) 10427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 10437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, SyncPromoForbidden) { 10457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Consistently enable the welcome page on all platforms. 10467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) first_run::SetShouldShowWelcomePage(); 10477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate the following master_preferences: 10497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // { 10507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "sync_promo": { 10517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "show_on_first_run_allowed": false 10527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 10537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 10547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreator browser_creator; 10557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 10567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs::kSyncPromoShowOnFirstRunAllowed, false); 10577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do a process-startup browser launch. 10597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 10607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 10617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::startup::IS_FIRST_RUN); 10627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true, 10637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->host_desktop_type())); 10647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This should have created a new browser window. 10667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 10677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(new_browser); 10687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Verify that the NTP and the welcome page are shown. 10707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 10717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2, tab_strip->count()); 10727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 10737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL()); 10747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(internals::GetWelcomePageURL(), 10757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL()); 10767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 10777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, SyncPromoAllowed) { 10797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Consistently enable the welcome page on all platforms. 10807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) first_run::SetShouldShowWelcomePage(); 10817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate the following master_preferences: 10837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // { 10847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "sync_promo": { 10857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "show_on_first_run_allowed": true 10867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 10877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 10887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreator browser_creator; 10897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 10907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs::kSyncPromoShowOnFirstRunAllowed, true); 10917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do a process-startup browser launch. 10937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 10947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 10957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::startup::IS_FIRST_RUN); 10967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true, 10977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->host_desktop_type())); 10987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This should have created a new browser window. 11007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 11017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(new_browser); 11027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Verify that the sync promo and the welcome page are shown. 11047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 11057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2, tab_strip->count()); 11067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("accounts.google.com", 11077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().host()); 11087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(internals::GetWelcomePageURL(), 11097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL()); 11107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 11117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, 11137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FirstRunTabsPromoAllowed) { 11147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate the following master_preferences: 11157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // { 11167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "first_run_tabs" : [ 11177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "files/title1.html" 11187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ], 11197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "sync_promo": { 11207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "show_on_first_run_allowed": true 11217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 11227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 11237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreator browser_creator; 11247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 11257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 11267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs::kSyncPromoShowOnFirstRunAllowed, true); 11277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do a process-startup browser launch. 11297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 11307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 11317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::startup::IS_FIRST_RUN); 11327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true, 11337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->host_desktop_type())); 11347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This should have created a new browser window. 11367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 11377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(new_browser); 11387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Verify that the first-run tab is shown and the sync promo has been added. 11407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 11417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2, tab_strip->count()); 11427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("accounts.google.com", 11437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().host()); 11447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("title1.html", 11457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName()); 11467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 11477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, 11497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FirstRunTabsContainSyncPromo) { 11507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate the following master_preferences: 11517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // { 11527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "first_run_tabs" : [ 11537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "files/title1.html", 11547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "chrome://signin/?source=0&next_page=chrome%3A%2F%2Fnewtab%2F" 11557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ], 11567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "sync_promo": { 11577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "show_on_first_run_allowed": true 11587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 11597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 11607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreator browser_creator; 11617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 11627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser_creator.AddFirstRunTab(SyncPromoUI::GetSyncPromoURL( 11637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SyncPromoUI::SOURCE_START_PAGE, 11647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) false)); 11657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 11667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs::kSyncPromoShowOnFirstRunAllowed, true); 11677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do a process-startup browser launch. 11697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 11707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 11717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::startup::IS_FIRST_RUN); 11727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true, 11737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->host_desktop_type())); 11747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This should have created a new browser window. 11767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 11777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(new_browser); 11787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Verify that the first-run tabs are shown and no sync promo has been added 11807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // as the first-run tabs contain it already. 11817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 11827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2, tab_strip->count()); 11837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("title1.html", 11847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName()); 11857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("accounts.google.com", 11867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL().host()); 11877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 11887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, 11907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FirstRunTabsContainNTPSyncPromoAllowed) { 11917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate the following master_preferences: 11927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // { 11937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "first_run_tabs" : [ 11947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "new_tab_page", 11957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "files/title1.html" 11967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ], 11977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "sync_promo": { 11987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "show_on_first_run_allowed": true 11997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 12007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 12017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreator browser_creator; 12027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser_creator.AddFirstRunTab(GURL("new_tab_page")); 12037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 12047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 12057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs::kSyncPromoShowOnFirstRunAllowed, true); 12067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do a process-startup browser launch. 12087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 12097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 12107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::startup::IS_FIRST_RUN); 12117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true, 12127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->host_desktop_type())); 12137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This should have created a new browser window. 12157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 12167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(new_browser); 12177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Verify that the first-run tabs are shown but the NTP that they contain has 12197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // been replaced by the sync promo. 12207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 12217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2, tab_strip->count()); 12227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("accounts.google.com", 12237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().host()); 12247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("title1.html", 12257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName()); 12267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 12277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, 12297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FirstRunTabsContainNTPSyncPromoForbidden) { 12307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate the following master_preferences: 12317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // { 12327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "first_run_tabs" : [ 12337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "new_tab_page", 12347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "files/title1.html" 12357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ], 12367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "sync_promo": { 12377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "show_on_first_run_allowed": false 12387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 12397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 12407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreator browser_creator; 12417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser_creator.AddFirstRunTab(GURL("new_tab_page")); 12427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 12437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 12447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs::kSyncPromoShowOnFirstRunAllowed, false); 12457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do a process-startup browser launch. 12477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 12487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 12497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::startup::IS_FIRST_RUN); 12507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true, 12517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->host_desktop_type())); 12527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This should have created a new browser window. 12547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 12557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(new_browser); 1256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Verify that the first-run tabs are shown, the NTP that they contain has not 12587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // not been replaced by the sync promo and no sync promo has been added. 12597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 12607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2, tab_strip->count()); 12617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 12627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL()); 12637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("title1.html", 12647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName()); 12657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 12667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, 12687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FirstRunTabsSyncPromoForbidden) { 12697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate the following master_preferences: 12707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // { 12717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "first_run_tabs" : [ 12727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "files/title1.html" 12737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ], 12747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "sync_promo": { 12757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "show_on_first_run_allowed": false 12767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 12777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 12787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreator browser_creator; 12797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html")); 12807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 12817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs::kSyncPromoShowOnFirstRunAllowed, false); 12827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do a process-startup browser launch. 12847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 12857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 12867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::startup::IS_FIRST_RUN); 12877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true, 12887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->host_desktop_type())); 12897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This should have created a new browser window. 12917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 12927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(new_browser); 12937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Verify that the first-run tab is shown and no sync promo has been added. 12957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 12967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 12977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("title1.html", 12987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName()); 12997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 13007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 13027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, 13037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) RestoreOnStartupURLsPolicySpecified) { 13047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Simulate the following master_preferences: 13057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // { 13067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "sync_promo": { 13077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "show_on_first_run_allowed": true 13087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 13097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // } 13107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreator browser_creator; 13117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 13127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs::kSyncPromoShowOnFirstRunAllowed, true); 13137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Set the following user policies: 13157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // * RestoreOnStartup = RestoreOnStartupIsURLs 13167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // * RestoreOnStartupURLs = [ "files/title1.html" ] 13177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy_map_.Set(policy::key::kRestoreOnStartup, 13187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, 13197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value::CreateIntegerValue( 13207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SessionStartupPref::kPrefValueURLs), 13217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 13227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::ListValue startup_urls; 13237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) startup_urls.Append(base::Value::CreateStringValue( 13247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_server()->GetURL("files/title1.html").spec())); 13257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy_map_.Set(policy::key::kRestoreOnStartupURLs, 13267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, 13277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch startup_urls.DeepCopy(), NULL); 13287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) provider_.UpdateChromePolicy(policy_map_); 13297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 13307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do a process-startup browser launch. 13327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 13337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator, 13347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::startup::IS_FIRST_RUN); 13357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true, 13367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->host_desktop_type())); 13377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // This should have created a new browser window. 13397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* new_browser = FindOneOtherBrowser(browser()); 13407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(new_browser); 13417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Verify that the URL specified through policy is shown and no sync promo has 13437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // been added. 13447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabStripModel* tab_strip = new_browser->tab_strip_model(); 13457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(1, tab_strip->count()); 13467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("title1.html", 13477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName()); 13487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 13497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(ENABLE_CONFIGURATION_POLICY) 13507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // !defined(OS_LINUX) || !defined(GOOGLE_CHROME_BUILD) || 13527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // defined(ENABLE_CONFIGURATION_POLICY) 13537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 13547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 1355