startup_browser_creator_browsertest.cc revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
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"
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.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)
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/run_loop.h"
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/values.h"
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/policy/browser_policy_connector.h"
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/policy/mock_configuration_policy_provider.h"
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/policy/policy_map.h"
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/policy/policy_types.h"
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "policy/policy_constants.h"
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::_;
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::AnyNumber;
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::Return;
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS)
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Check that there are two browsers. Find the one that is not |browser|.
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)Browser* FindOneOtherBrowser(Browser* browser) {
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // There should only be one other browser.
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(2u, chrome::GetBrowserCount(browser->profile(),
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                        browser->host_desktop_type()));
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Find the new browser.
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* other_browser = NULL;
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (chrome::BrowserIterator it; !it.done() && !other_browser; it.Next()) {
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (*it != browser)
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      other_browser = *it;
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return other_browser;
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StartupBrowserCreatorTest : public ExtensionBrowserTest {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool SetUpUserDataDirectory() OVERRIDE {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make sure the first run sentinel file exists before running these tests,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // since some of them customize the session startup pref whose value can
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // be different than the default during the first run.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(bauerb): set the first run flag instead of creating a sentinel file.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_run::CreateSentinel();
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return ExtensionBrowserTest::SetUpUserDataDirectory();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExtensionBrowserTest::SetUpCommandLine(command_line);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitch(switches::kEnablePanels);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitchASCII(switches::kHomePage,
9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                    content::kAboutBlankURL);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(nkostylev): Investigate if we can remove this switch.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitch(switches::kCreateBrowserOnStartupForTests);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper functions return void so that we can ASSERT*().
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use ASSERT_NO_FATAL_FAILURE around calls to these functions to stop the
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // test if an assert fails.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadApp(const std::string& app_name,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               const Extension** out_app_extension) {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(app_name.c_str())));
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ExtensionService* service = extensions::ExtensionSystem::Get(
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        browser()->profile())->extension_service();
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *out_app_extension = service->GetExtensionById(
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        last_loaded_extension_id_, false);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(*out_app_extension);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Code that opens a new browser assumes we start with exactly one.
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(1u, chrome::GetBrowserCount(browser()->profile(),
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          browser()->host_desktop_type()));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetAppLaunchPref(const std::string& app_id,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        extensions::ExtensionPrefs::LaunchType launch_type) {
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ExtensionService* service = extensions::ExtensionSystem::Get(
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        browser()->profile())->extension_service();
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    service->extension_prefs()->SetLaunchType(app_id, launch_type);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* FindOneOtherBrowserForProfile(Profile* profile,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         Browser* not_this_browser) {
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for (chrome::BrowserIterator it; !it.done(); it.Next()) {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (*it != not_this_browser && it->profile() == profile)
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return *it;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OpenURLsPopupObserver : public chrome::BrowserListObserver {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLsPopupObserver() : added_browser_(NULL) { }
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnBrowserAdded(Browser* browser) OVERRIDE {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    added_browser_ = browser;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnBrowserRemoved(Browser* browser) OVERRIDE { }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* added_browser_;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that when there is a popup as the active browser any requests to
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// StartupBrowserCreatorImpl::OpenURLsInBrowser don't crash because there's no
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// explicit profile given.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenURLsPopup) {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(GURL("http://localhost"));
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note that in our testing we do not ever query the BrowserList for the "last
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // active" browser. That's because the browsers are set as "active" by
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // platform UI toolkit messages, and those messages are not sent during unit
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // testing sessions.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLsPopupObserver observer;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserList::AddObserver(&observer);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* popup = new Browser(
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(),
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            browser()->host_desktop_type()));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(popup->is_type_popup());
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(popup, observer.added_browser_);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should create a new window, but re-use the profile from |popup|. If
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it used a NULL or invalid profile, it would crash.
18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  launch.OpenURLsInBrowser(popup, false, urls,
18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                           chrome::HOST_DESKTOP_TYPE_NATIVE);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(popup, observer.added_browser_);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserList::RemoveObserver(&observer);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We don't do non-process-startup browser launches on ChromeOS.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Session restore for process-startup browser launches is tested
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in session_restore_uitest.
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that startup URLs are honored when the process already exists but has
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// no tabbed browser windows (eg. as if the process is running only due to a
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// background application.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       StartupURLsOnNewWindowWithNoTabbedBrowsers) {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a couple same-site HTTP URLs.
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(test_server()->GetURL("files/title1.html"));
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(test_server()->GetURL("files/title2.html"));
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the startup preference to open these URLs.
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref(SessionStartupPref::URLS);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref.urls = urls;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(browser()->profile(), pref);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close the browser.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->window()->Close();
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do a simple non-process-startup browser launch.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run);
21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should have created a new browser window.  |browser()| is still
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // around at this point, even though we've closed its window.
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The new browser should have one tab for each URL.
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(static_cast<int>(urls.size()), tab_strip->count());
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i=0; i < urls.size(); i++) {
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(urls[i], tab_strip->GetWebContentsAt(i)->GetURL());
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The two tabs, despite having the same site, should be in different
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SiteInstances.
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE(tab_strip->GetWebContentsAt(0)->GetSiteInstance(),
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetSiteInstance());
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that startup URLs aren't used when the process already exists
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and has other tabbed browser windows.  This is the common case of starting a
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// new browser.
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       StartupURLsOnNewWindow) {
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a couple arbitrary URLs.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(ui_test_utils::GetTestUrl(
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(ui_test_utils::GetTestUrl(
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title2.html"))));
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the startup preference to open these URLs.
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref(SessionStartupPref::URLS);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref.urls = urls;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(browser()->profile(), pref);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do a simple non-process-startup browser launch.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run);
26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should have created a new browser window.
264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The new browser should have exactly one tab (not the startup URLs).
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, new_browser->tab_strip_model()->count());
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App shortcuts are not implemented on mac os.
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutNoPref) {
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Load an app with launch.container = 'tab'.
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* extension_app = NULL;
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app));
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add --app-id=<extension->id()> to the command line.
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine command_line(CommandLine::NO_PROGRAM);
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  command_line.AppendSwitchASCII(switches::kAppId, extension_app->id());
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run);
28590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
28690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No pref was set, so the app should have opened in a window.
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The launch should have created a new browser.
290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Expect an app window.
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(new_browser->is_app());
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The browser's app_name should include the app's ID.
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new_browser->app_name_.find(extension_app->id()),
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string::npos) << new_browser->app_name_;
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutWindowPref) {
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* extension_app = NULL;
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app));
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set a pref indicating that the user wants to open this app in a window.
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetAppLaunchPref(extension_app->id(),
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   extensions::ExtensionPrefs::LAUNCH_WINDOW);
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine command_line(CommandLine::NO_PROGRAM);
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  command_line.AppendSwitchASCII(switches::kAppId, extension_app->id());
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run);
31590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pref was set to open in a window, so the app should have opened in a
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window.  The launch should have created a new browser. Find the new
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // browser.
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Expect an app window.
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(new_browser->is_app());
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The browser's app_name should include the app's ID.
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new_browser->app_name_.find(extension_app->id()),
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string::npos) << new_browser->app_name_;
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutTabPref) {
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Load an app with launch.container = 'tab'.
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Extension* extension_app = NULL;
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(LoadApp("app_with_tab_container", &extension_app));
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set a pref indicating that the user wants to open this app in a window.
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetAppLaunchPref(extension_app->id(),
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   extensions::ExtensionPrefs::LAUNCH_REGULAR);
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine command_line(CommandLine::NO_PROGRAM);
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  command_line.AppendSwitchASCII(switches::kAppId, extension_app->id());
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ?
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN;
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run);
34790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When an app shortcut is open and the pref indicates a tab should
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // open, the tab is open in a new browser window.  Expect a new window.
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile(),
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The tab should be in a tabbed window.
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(new_browser->is_type_tabbed());
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The browser's app_name should not include the app's ID: It is in a
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // normal browser.
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new_browser->app_name_.find(extension_app->id()),
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string::npos) << new_browser->app_name_;
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined(OS_MACOSX)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined(OS_CHROMEOS)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ReadingWasRestartedAfterRestart) {
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tests that StartupBrowserCreator::WasRestarted reads and resets the
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // preference kWasRestarted correctly.
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator::was_restarted_read_ = false;
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetBoolean(prefs::kWasRestarted, true);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(StartupBrowserCreator::WasRestarted());
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(pref_service->GetBoolean(prefs::kWasRestarted));
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(StartupBrowserCreator::WasRestarted());
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ReadingWasRestartedAfterNormalStart) {
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tests that StartupBrowserCreator::WasRestarted reads and resets the
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // preference kWasRestarted correctly.
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator::was_restarted_read_ = false;
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetBoolean(prefs::kWasRestarted, false);
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(StartupBrowserCreator::WasRestarted());
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(pref_service->GetBoolean(prefs::kWasRestarted));
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(StartupBrowserCreator::WasRestarted());
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, AddFirstRunTab) {
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreator browser_creator;
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title2.html"));
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
40590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
40690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, tab_strip->count());
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("title1.html",
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("title2.html",
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test hard-coded special first run tabs (defined in
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// StartupBrowserCreatorImpl::AddStartupURLs()).
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, AddCustomFirstRunTab) {
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreator browser_creator;
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(GURL("http://new_tab_page"));
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title2.html"));
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(GURL("http://welcome_page"));
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
43490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
43590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(4, tab_strip->count());
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("title1.html",
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL());
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("title2.html",
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(2)->GetURL().ExtractFileName());
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(internals::GetWelcomePageURL(),
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(3)->GetURL());
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoNoWelcomePage) {
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Trick this test into thinking the promo has been shown for this profile; so
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // that it will show it again (otherwise it skips showing it since
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --no-first-run is specified in browser tests).
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile());
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy,
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
46490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
46590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, tab_strip->count());
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) {
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host());
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(0)->GetURL());
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoWithWelcomePage) {
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Trick this test into thinking the promo has been shown for this profile; so
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // that it will show it again (otherwise it skips showing it since
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --no-first-run is specified in browser tests).
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile());
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  first_run::SetShouldShowWelcomePage();
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy,
4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
49390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
49490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, tab_strip->count());
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) {
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host());
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(0)->GetURL());
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(internals::GetWelcomePageURL(),
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL());
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoWithFirstRunTabs) {
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreator browser_creator;
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Trick this test into thinking the promo has been shown for this profile; so
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // that it will show it again (otherwise it skips showing it since
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --no-first-run is specified in browser tests).
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile());
5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The welcome page should not be shown, even if
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // first_run::ShouldShowWelcomePage() says so, when there are already
5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // more than 2 first run tabs.
5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  first_run::SetShouldShowWelcomePage();
5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
53190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
53290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) {
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(2, tab_strip->count());
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host());
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("title1.html",
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(1, tab_strip->count());
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("title1.html",
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The welcome page should still be shown if there are more than 2 first run
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// tabs, but the welcome page was explcitly added to the first run tabs.
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       SyncPromoWithFirstRunTabsIncludingWelcomePage) {
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreator browser_creator;
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_creator.AddFirstRunTab(GURL("http://welcome_page"));
5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Trick this test into thinking the promo has been shown for this profile; so
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // that it will show it again (otherwise it skips showing it since
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --no-first-run is specified in browser tests).
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncPromoUI::DidShowSyncPromoAtStartup(browser()->profile());
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
56890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
56990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should have created a new browser window.
572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (SyncPromoUI::ShouldShowSyncPromoAtStartup(browser()->profile(), true)) {
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(3, tab_strip->count());
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("signin", tab_strip->GetWebContentsAt(0)->GetURL().host());
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("title1.html",
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(internals::GetWelcomePageURL(),
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(2)->GetURL());
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(2, tab_strip->count());
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ("title1.html",
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(internals::GetWelcomePageURL(),
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              tab_strip->GetWebContentsAt(1)->GetURL());
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, StartupURLsForTwoProfiles) {
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* default_profile = browser()->profile();
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create another profile.
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path = profile_manager->user_data_dir();
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile 1"));
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* other_profile = profile_manager->GetProfile(dest_path);
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(other_profile);
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a couple arbitrary URLs.
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls1;
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls1.push_back(ui_test_utils::GetTestUrl(
6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls2;
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls2.push_back(ui_test_utils::GetTestUrl(
6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title2.html"))));
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set different startup preferences for the 2 profiles.
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref1(SessionStartupPref::URLS);
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref1.urls = urls1;
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(default_profile, pref1);
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref2(SessionStartupPref::URLS);
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref2.urls = urls2;
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(other_profile, pref2);
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close the browser.
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->window()->Close();
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do a simple non-process-startup browser launch.
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int return_code;
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator browser_creator;
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Profile*> last_opened_profiles;
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(default_profile);
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(other_profile);
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser_creator.Start(dummy, profile_manager->user_data_dir(),
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        default_profile, last_opened_profiles, &return_code);
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // urls1 were opened in a browser for default_profile, and urls2 were opened
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in a browser for other_profile.
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* new_browser = NULL;
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |browser()| is still around at this point, even though we've closed its
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window. Thus the browser count for default_profile is 2.
6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2u, chrome::GetBrowserCount(default_profile,
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(default_profile, browser());
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(urls1[0], tab_strip->GetWebContentsAt(0)->GetURL());
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(other_profile,
6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(other_profile, NULL);
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(urls2[0], tab_strip->GetWebContentsAt(0)->GetURL());
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, PRE_UpdateWithTwoProfiles) {
65990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Simulate a browser restart by creating the profiles in the PRE_ part.
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create two profiles.
6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path = profile_manager->user_data_dir();
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile1 = profile_manager->GetProfile(
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dest_path.Append(FILE_PATH_LITERAL("New Profile 1")));
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile1);
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile2 = profile_manager->GetProfile(
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dest_path.Append(FILE_PATH_LITERAL("New Profile 2")));
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile2);
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a couple arbitrary URLs.
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls1;
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls1.push_back(ui_test_utils::GetTestUrl(
6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls2;
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls2.push_back(ui_test_utils::GetTestUrl(
6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title2.html"))));
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set different startup preferences for the 2 profiles.
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref1(SessionStartupPref::URLS);
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref1.urls = urls1;
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile1, pref1);
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref2(SessionStartupPref::URLS);
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref2.urls = urls2;
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile2, pref2);
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
69190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile1->GetPrefs()->CommitPendingWrite();
69290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile2->GetPrefs()->CommitPendingWrite();
69390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
69490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
69590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, UpdateWithTwoProfiles) {
69690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Make StartupBrowserCreator::WasRestarted() return true.
69790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  StartupBrowserCreator::was_restarted_read_ = false;
69890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
69990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  pref_service->SetBoolean(prefs::kWasRestarted, true);
70090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
70190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
70290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
70390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Open the two profiles.
70490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::FilePath dest_path = profile_manager->user_data_dir();
70590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
70690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Profile* profile1 = profile_manager->GetProfile(
70790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      dest_path.Append(FILE_PATH_LITERAL("New Profile 1")));
70890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(profile1);
70990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
71090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Profile* profile2 = profile_manager->GetProfile(
71190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      dest_path.Append(FILE_PATH_LITERAL("New Profile 2")));
71290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(profile2);
71390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate a launch after a browser update.
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int return_code;
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator browser_creator;
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Profile*> last_opened_profiles;
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile1);
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile2);
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser_creator.Start(dummy, profile_manager->user_data_dir(), profile1,
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        last_opened_profiles, &return_code);
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (SessionRestore::IsRestoring(profile1) ||
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile2))
726b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The startup URLs are ignored, and instead the last open sessions are
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // restored.
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(profile1->restored_last_session());
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(profile2->restored_last_session());
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* new_browser = NULL;
7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile1,
7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile1, NULL);
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
74090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(GURL(content::kAboutBlankURL),
7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile2,
7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile2, NULL);
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
74990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(GURL(content::kAboutBlankURL),
7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ProfilesWithoutPagesNotLaunched) {
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* default_profile = browser()->profile();
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create 4 more profiles.
7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path1 = profile_manager->user_data_dir().Append(
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 1"));
7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path2 = profile_manager->user_data_dir().Append(
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 2"));
7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path3 = profile_manager->user_data_dir().Append(
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 3"));
7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path4 = profile_manager->user_data_dir().Append(
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 4"));
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_home1 = profile_manager->GetProfile(dest_path1);
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_home1);
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_home2 = profile_manager->GetProfile(dest_path2);
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_home2);
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_last = profile_manager->GetProfile(dest_path3);
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_last);
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_urls = profile_manager->GetProfile(dest_path4);
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_urls);
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the profiles to open urls, open last visited pages or display the home
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // page.
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_home(SessionStartupPref::DEFAULT);
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_home1, pref_home);
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_home2, pref_home);
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_last(SessionStartupPref::LAST);
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_last, pref_last);
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(ui_test_utils::GetTestUrl(
7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_urls(SessionStartupPref::URLS);
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_urls.urls = urls;
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_urls, pref_urls);
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close the browser.
7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::HostDesktopType original_desktop_type =
7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->host_desktop_type();
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->window()->Close();
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do a simple non-process-startup browser launch.
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int return_code;
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator browser_creator;
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Profile*> last_opened_profiles;
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_home1);
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_home2);
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_last);
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_urls);
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser_creator.Start(dummy, profile_manager->user_data_dir(), profile_home1,
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        last_opened_profiles, &return_code);
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (SessionRestore::IsRestoring(default_profile) ||
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile_home1) ||
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile_home2) ||
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile_last) ||
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         SessionRestore::IsRestoring(profile_urls))
819b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* new_browser = NULL;
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The last open profile (the profile_home1 in this case) will always be
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // launched, even if it will open just the home page.
8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_home1, original_desktop_type));
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_home1, NULL);
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // profile_urls opened the urls.
8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_urls, original_desktop_type));
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_urls, NULL);
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(urls[0], tab_strip->GetWebContentsAt(0)->GetURL());
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // profile_last opened the last open pages.
8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_last, original_desktop_type));
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_last, NULL);
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
84690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(GURL(content::kAboutBlankURL),
8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // profile_home2 was not launched since it would've only opened the home page.
8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0u, chrome::GetBrowserCount(profile_home2, original_desktop_type));
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, ProfilesLaunchedAfterCrash) {
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // After an unclean exit, all profiles will be launched. However, they won't
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // open any pages automatically.
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileManager* profile_manager = g_browser_process->profile_manager();
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create 3 profiles.
8602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path1 = profile_manager->user_data_dir().Append(
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 1"));
8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path2 = profile_manager->user_data_dir().Append(
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 2"));
8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath dest_path3 = profile_manager->user_data_dir().Append(
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FILE_PATH_LITERAL("New Profile 3"));
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_home = profile_manager->GetProfile(dest_path1);
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_home);
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_last = profile_manager->GetProfile(dest_path2);
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_last);
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_urls = profile_manager->GetProfile(dest_path3);
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(profile_urls);
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the profiles to open the home page, last visited pages or URLs.
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_home(SessionStartupPref::DEFAULT);
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_home, pref_home);
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_last(SessionStartupPref::LAST);
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_last, pref_last);
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<GURL> urls;
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls.push_back(ui_test_utils::GetTestUrl(
8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(base::FilePath::kCurrentDirectory),
8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("title1.html"))));
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref pref_urls(SessionStartupPref::URLS);
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_urls.urls = urls;
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStartupPref::SetStartupPref(profile_urls, pref_urls);
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate a launch after an unclear exit.
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->window()->Close();
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static_cast<ProfileImpl*>(profile_home)->last_session_exit_type_ =
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Profile::EXIT_CRASHED;
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static_cast<ProfileImpl*>(profile_last)->last_session_exit_type_ =
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Profile::EXIT_CRASHED;
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static_cast<ProfileImpl*>(profile_urls)->last_session_exit_type_ =
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Profile::EXIT_CRASHED;
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  dummy.AppendSwitchASCII(switches::kTestType, "browser");
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int return_code;
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupBrowserCreator browser_creator;
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Profile*> last_opened_profiles;
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_home);
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_last);
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_opened_profiles.push_back(profile_urls);
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser_creator.Start(dummy, profile_manager->user_data_dir(), profile_home,
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        last_opened_profiles, &return_code);
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No profiles are getting restored, since they all display the crash info
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bar.
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(SessionRestore::IsRestoring(profile_home));
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(SessionRestore::IsRestoring(profile_last));
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(SessionRestore::IsRestoring(profile_urls));
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The profile which normally opens the home page displays the new tab page.
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* new_browser = NULL;
9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_home,
9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_home, NULL);
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebContents* web_contents = tab_strip->GetWebContentsAt(0);
9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL());
9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1U,
927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            InfoBarService::FromWebContents(web_contents)->infobar_count());
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The profile which normally opens last open pages displays the new tab page.
9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_last,
9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_last, NULL);
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_contents = tab_strip->GetWebContentsAt(0);
9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL());
9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1U,
939c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            InfoBarService::FromWebContents(web_contents)->infobar_count());
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The profile which normally opens URLs displays the new tab page.
9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, chrome::GetBrowserCount(profile_urls,
9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        browser()->host_desktop_type()));
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_browser = FindOneOtherBrowserForProfile(profile_urls, NULL);
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser);
9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tab_strip = new_browser->tab_strip_model();
9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_contents = tab_strip->GetWebContentsAt(0);
9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), web_contents->GetURL());
9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1U,
951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            InfoBarService::FromWebContents(web_contents)->infobar_count());
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ManagedModeBrowserCreatorTest : public InProcessBrowserTest {
955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    InProcessBrowserTest::SetUpCommandLine(command_line);
958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    command_line->AppendSwitch(switches::kEnableManagedUsers);
959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
960c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ManagedModeBrowserCreatorTest,
964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       StartupManagedModeProfile) {
965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Make this a managed profile.
966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ManagedUserService* managed_user_service =
967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      ManagedUserServiceFactory::GetForProfile(browser()->profile());
968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  managed_user_service->InitForTesting();
969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  StartupBrowserCreator browser_creator;
971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Do a simple non-process-startup browser launch.
973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
974c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  content::WindowedNotificationObserver observer(
977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::NOTIFICATION_LOAD_STOP,
978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::NotificationService::AllSources());
97990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), false,
98090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            browser()->host_desktop_type()));
981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // This should have created a new browser window.
983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(new_browser);
985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // There should be only one tab.
988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(1, tab_strip->count());
989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // defined(ENABLE_MANAGED_USERS)
9927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // !defined(OS_CHROMEOS)
9947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// These tests are not applicable to Chrome OS as neither master_preferences nor
9967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// the sync promo exist there.
9977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(OS_CHROMEOS)
9987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// On a branded Linux build, policy is required to suppress the first-run
10007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// dialog.
10017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(OS_LINUX) || !defined(GOOGLE_CHROME_BUILD) || \
10027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    defined(ENABLE_CONFIGURATION_POLICY)
10037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class StartupBrowserCreatorFirstRunTest : public InProcessBrowserTest {
10057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected:
10067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
10077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY)
10097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  policy::MockConfigurationPolicyProvider provider_;
10107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  policy::PolicyMap policy_map_;
10117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // defined(ENABLE_CONFIGURATION_POLICY)
10127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)};
10137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void StartupBrowserCreatorFirstRunTest::SetUpInProcessBrowserTestFixture() {
10157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Remove the --no-first-run flag from the command line.
10167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine* command_line = CommandLine::ForCurrentProcess();
10177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine::StringVector argv = command_line->argv();
10187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  const std::string first_run_flag = std::string("--") + switches::kNoFirstRun;
10197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN)
10207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  argv.erase(std::find(argv.begin(), argv.end(), ASCIIToWide(first_run_flag)));
10217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else
10227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  argv.erase(std::find(argv.begin(), argv.end(), first_run_flag));
10237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
10247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  command_line->InitFromArgv(argv);
10257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY)
10277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD)
10287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Set a policy that prevents the first-run dialog from being shown.
10297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  policy_map_.Set(policy::key::kMetricsReportingEnabled,
10307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                  policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
10317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                  base::Value::CreateBooleanValue(false));
10327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  provider_.UpdateChromePolicy(policy_map_);
10337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD)
10347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_CALL(provider_, IsInitializationComplete(_))
10367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      .WillRepeatedly(Return(true));
10377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
10387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
10397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // defined(ENABLE_CONFIGURATION_POLICY)
10407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
10417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, SyncPromoForbidden) {
10437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Consistently enable the welcome page on all platforms.
10447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  first_run::SetShouldShowWelcomePage();
10457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Simulate the following master_preferences:
10477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // {
10487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "sync_promo": {
10497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "show_on_first_run_allowed": false
10507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  }
10517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // }
10527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreator browser_creator;
10537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
10547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kSyncPromoShowOnFirstRunAllowed, false);
10557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Do a process-startup browser launch.
10577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
10587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
10597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
10607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
10617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            browser()->host_desktop_type()));
10627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This should have created a new browser window.
10647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
10657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(new_browser);
10667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Verify that the NTP and the welcome page are shown.
10687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
10697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(2, tab_strip->count());
10707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
10717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
10727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(internals::GetWelcomePageURL(),
10737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL());
10747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
10757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, SyncPromoAllowed) {
10777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Consistently enable the welcome page on all platforms.
10787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  first_run::SetShouldShowWelcomePage();
10797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Simulate the following master_preferences:
10817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // {
10827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "sync_promo": {
10837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "show_on_first_run_allowed": true
10847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  }
10857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // }
10867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreator browser_creator;
10877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
10887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kSyncPromoShowOnFirstRunAllowed, true);
10897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Do a process-startup browser launch.
10917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
10927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
10937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
10947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
10957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            browser()->host_desktop_type()));
10967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This should have created a new browser window.
10987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
10997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(new_browser);
11007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Verify that the sync promo and the welcome page are shown.
11027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
11037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(2, tab_strip->count());
11047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("accounts.google.com",
11057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().host());
11067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(internals::GetWelcomePageURL(),
11077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL());
11087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
11097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
11117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                       FirstRunTabsPromoAllowed) {
11127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Simulate the following master_preferences:
11137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // {
11147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "first_run_tabs" : [
11157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "files/title1.html"
11167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  ],
11177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "sync_promo": {
11187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "show_on_first_run_allowed": true
11197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  }
11207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // }
11217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreator browser_creator;
11227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
11237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
11247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kSyncPromoShowOnFirstRunAllowed, true);
11257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Do a process-startup browser launch.
11277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
11287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
11297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
11307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
11317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            browser()->host_desktop_type()));
11327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This should have created a new browser window.
11347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
11357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(new_browser);
11367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Verify that the first-run tab is shown and the sync promo has been added.
11387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
11397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(2, tab_strip->count());
11407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("accounts.google.com",
11417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().host());
11427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("title1.html",
11437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
11447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
11457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
11477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                       FirstRunTabsContainSyncPromo) {
11487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Simulate the following master_preferences:
11497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // {
11507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "first_run_tabs" : [
11517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "files/title1.html",
11527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "chrome://signin/?source=0&next_page=chrome%3A%2F%2Fnewtab%2F"
11537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  ],
11547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "sync_promo": {
11557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "show_on_first_run_allowed": true
11567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  }
11577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // }
11587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreator browser_creator;
11597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
11607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser_creator.AddFirstRunTab(SyncPromoUI::GetSyncPromoURL(
11617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      SyncPromoUI::SOURCE_START_PAGE,
11627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      false));
11637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
11647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kSyncPromoShowOnFirstRunAllowed, true);
11657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Do a process-startup browser launch.
11677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
11687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
11697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
11707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
11717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            browser()->host_desktop_type()));
11727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This should have created a new browser window.
11747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
11757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(new_browser);
11767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Verify that the first-run tabs are shown and no sync promo has been added
11787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // as the first-run tabs contain it already.
11797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
11807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(2, tab_strip->count());
11817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("title1.html",
11827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
11837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("accounts.google.com",
11847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL().host());
11857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
11867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
11887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                       FirstRunTabsContainNTPSyncPromoAllowed) {
11897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Simulate the following master_preferences:
11907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // {
11917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "first_run_tabs" : [
11927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "new_tab_page",
11937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "files/title1.html"
11947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  ],
11957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "sync_promo": {
11967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "show_on_first_run_allowed": true
11977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  }
11987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // }
11997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreator browser_creator;
12007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser_creator.AddFirstRunTab(GURL("new_tab_page"));
12017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
12027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
12037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kSyncPromoShowOnFirstRunAllowed, true);
12047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Do a process-startup browser launch.
12067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
12077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
12087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
12097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
12107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            browser()->host_desktop_type()));
12117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This should have created a new browser window.
12137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
12147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(new_browser);
12157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Verify that the first-run tabs are shown but the NTP that they contain has
12177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // been replaced by the sync promo.
12187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
12197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(2, tab_strip->count());
12207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("accounts.google.com",
12217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().host());
12227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("title1.html",
12237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
12247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
12257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
12277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                       FirstRunTabsContainNTPSyncPromoForbidden) {
12287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Simulate the following master_preferences:
12297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // {
12307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "first_run_tabs" : [
12317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "new_tab_page",
12327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "files/title1.html"
12337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  ],
12347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "sync_promo": {
12357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "show_on_first_run_allowed": false
12367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  }
12377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // }
12387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreator browser_creator;
12397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser_creator.AddFirstRunTab(GURL("new_tab_page"));
12407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
12417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
12427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kSyncPromoShowOnFirstRunAllowed, false);
12437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Do a process-startup browser launch.
12457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
12467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
12477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
12487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
12497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            browser()->host_desktop_type()));
12507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This should have created a new browser window.
12527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
12537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(new_browser);
1254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Verify that the first-run tabs are shown, the NTP that they contain has not
12567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // not been replaced by the sync promo and no sync promo has been added.
12577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
12587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(2, tab_strip->count());
12597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
12607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL());
12617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("title1.html",
12627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
12637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
12647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
12667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                       FirstRunTabsSyncPromoForbidden) {
12677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Simulate the following master_preferences:
12687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // {
12697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "first_run_tabs" : [
12707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "files/title1.html"
12717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  ],
12727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "sync_promo": {
12737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "show_on_first_run_allowed": false
12747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  }
12757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // }
12767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreator browser_creator;
12777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
12787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
12797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kSyncPromoShowOnFirstRunAllowed, false);
12807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Do a process-startup browser launch.
12827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
12837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
12847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
12857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
12867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            browser()->host_desktop_type()));
12877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This should have created a new browser window.
12897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
12907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(new_browser);
12917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Verify that the first-run tab is shown and no sync promo has been added.
12937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
12947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
12957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("title1.html",
12967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
12977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
12987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY)
13007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
13017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                       RestoreOnStartupURLsPolicySpecified) {
13027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Simulate the following master_preferences:
13037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // {
13047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  "sync_promo": {
13057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //    "show_on_first_run_allowed": true
13067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  //  }
13077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // }
13087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreator browser_creator;
13097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->profile()->GetPrefs()->SetBoolean(
13107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kSyncPromoShowOnFirstRunAllowed, true);
13117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
13127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Set the following user policies:
13137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // * RestoreOnStartup = RestoreOnStartupIsURLs
13147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // * RestoreOnStartupURLs = [ "files/title1.html" ]
13157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  policy_map_.Set(policy::key::kRestoreOnStartup,
13167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                  policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
13177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                  base::Value::CreateIntegerValue(
13187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                      SessionStartupPref::kPrefValueURLs));
13197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::ListValue startup_urls;
13207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  startup_urls.Append(base::Value::CreateStringValue(
13217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      test_server()->GetURL("files/title1.html").spec()));
13227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  policy_map_.Set(policy::key::kRestoreOnStartupURLs,
13237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                  policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
13247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                  startup_urls.DeepCopy());
13257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  provider_.UpdateChromePolicy(policy_map_);
13267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
13277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
13287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Do a process-startup browser launch.
13297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CommandLine dummy(CommandLine::NO_PROGRAM);
13307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
13317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                   chrome::startup::IS_FIRST_RUN);
13327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
13337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            browser()->host_desktop_type()));
13347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
13357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // This should have created a new browser window.
13367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Browser* new_browser = FindOneOtherBrowser(browser());
13377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_TRUE(new_browser);
13387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
13397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Verify that the URL specified through policy is shown and no sync promo has
13407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // been added.
13417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TabStripModel* tab_strip = new_browser->tab_strip_model();
13427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(1, tab_strip->count());
13437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ("title1.html",
13447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
13457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
13467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // defined(ENABLE_CONFIGURATION_POLICY)
13477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
13487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // !defined(OS_LINUX) || !defined(GOOGLE_CHROME_BUILD) ||
13497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        // defined(ENABLE_CONFIGURATION_POLICY)
13507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
13517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // !defined(OS_CHROMEOS)
1352