| Index: chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
|
| diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
|
| index fe0300e0f1ba406d6ec6a8047b1fb4793750b195..1af06b13cf34cc937e9b660ae2d63d7b8780f887 100644
|
| --- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
|
| +++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
|
| @@ -2,9 +2,13 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include <algorithm>
|
| +#include <string>
|
| +
|
| #include "base/command_line.h"
|
| #include "base/files/file_path.h"
|
| #include "base/prefs/pref_service.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/extensions/extension_browsertest.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| @@ -39,7 +43,22 @@
|
| #include "chrome/browser/managed_mode/managed_mode_navigation_observer.h"
|
| #include "chrome/browser/managed_mode/managed_user_service.h"
|
| #include "chrome/browser/managed_mode/managed_user_service_factory.h"
|
| -#endif
|
| +#endif // defined(ENABLE_MANAGED_USERS)
|
| +
|
| +#if defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS)
|
| +#include "base/run_loop.h"
|
| +#include "base/values.h"
|
| +#include "chrome/browser/policy/browser_policy_connector.h"
|
| +#include "chrome/browser/policy/mock_configuration_policy_provider.h"
|
| +#include "chrome/browser/policy/policy_map.h"
|
| +#include "chrome/browser/policy/policy_types.h"
|
| +#include "policy/policy_constants.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +
|
| +using testing::_;
|
| +using testing::AnyNumber;
|
| +using testing::Return;
|
| +#endif // defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS)
|
|
|
| using extensions::Extension;
|
|
|
| @@ -969,6 +988,364 @@ IN_PROC_BROWSER_TEST_F(ManagedModeBrowserCreatorTest,
|
| EXPECT_EQ(1, tab_strip->count());
|
| }
|
|
|
| -#endif // ENABLE_MANAGED_USERS
|
| +#endif // defined(ENABLE_MANAGED_USERS)
|
| +
|
| +#endif // !defined(OS_CHROMEOS)
|
| +
|
| +// These tests are not applicable to Chrome OS as neither master_preferences nor
|
| +// the sync promo exist there.
|
| +#if !defined(OS_CHROMEOS)
|
| +
|
| +// On a branded Linux build, policy is required to suppress the first-run
|
| +// dialog.
|
| +#if !defined(OS_LINUX) || !defined(GOOGLE_CHROME_BUILD) || \
|
| + defined(ENABLE_CONFIGURATION_POLICY)
|
| +
|
| +class StartupBrowserCreatorFirstRunTest : public InProcessBrowserTest {
|
| + protected:
|
| + virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
|
| +
|
| +#if defined(ENABLE_CONFIGURATION_POLICY)
|
| + policy::MockConfigurationPolicyProvider provider_;
|
| + policy::PolicyMap policy_map_;
|
| +#endif // defined(ENABLE_CONFIGURATION_POLICY)
|
| +};
|
| +
|
| +void StartupBrowserCreatorFirstRunTest::SetUpInProcessBrowserTestFixture() {
|
| + // Remove the --no-first-run flag from the command line.
|
| + CommandLine* command_line = CommandLine::ForCurrentProcess();
|
| + CommandLine::StringVector argv = command_line->argv();
|
| + const std::string first_run_flag = std::string("--") + switches::kNoFirstRun;
|
| +#if defined(OS_WIN)
|
| + argv.erase(std::find(argv.begin(), argv.end(), ASCIIToWide(first_run_flag)));
|
| +#else
|
| + argv.erase(std::find(argv.begin(), argv.end(), first_run_flag));
|
| +#endif
|
| + command_line->InitFromArgv(argv);
|
| +
|
| +#if defined(ENABLE_CONFIGURATION_POLICY)
|
| +#if defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD)
|
| + // Set a policy that prevents the first-run dialog from being shown.
|
| + policy_map_.Set(policy::key::kMetricsReportingEnabled,
|
| + policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
|
| + base::Value::CreateBooleanValue(false));
|
| + provider_.UpdateChromePolicy(policy_map_);
|
| +#endif // defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD)
|
| +
|
| + EXPECT_CALL(provider_, IsInitializationComplete(_))
|
| + .WillRepeatedly(Return(true));
|
| + EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
|
| + policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
|
| +#endif // defined(ENABLE_CONFIGURATION_POLICY)
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, SyncPromoForbidden) {
|
| + // Consistently enable the welcome page on all platforms.
|
| + first_run::SetShouldShowWelcomePage();
|
| +
|
| + // Simulate the following master_preferences:
|
| + // {
|
| + // "sync_promo": {
|
| + // "show_on_first_run_allowed": false
|
| + // }
|
| + // }
|
| + StartupBrowserCreator browser_creator;
|
| + browser()->profile()->GetPrefs()->SetBoolean(
|
| + prefs::kSyncPromoShowOnFirstRunAllowed, false);
|
| +
|
| + // Do a process-startup browser launch.
|
| + CommandLine dummy(CommandLine::NO_PROGRAM);
|
| + StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
|
| + chrome::startup::IS_FIRST_RUN);
|
| + ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
|
| + browser()->host_desktop_type()));
|
| +
|
| + // This should have created a new browser window.
|
| + Browser* new_browser = FindOneOtherBrowser(browser());
|
| + ASSERT_TRUE(new_browser);
|
| +
|
| + // Verify that the NTP and the welcome page are shown.
|
| + TabStripModel* tab_strip = new_browser->tab_strip_model();
|
| + ASSERT_EQ(2, tab_strip->count());
|
| + EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
|
| + tab_strip->GetWebContentsAt(0)->GetURL());
|
| + EXPECT_EQ(internals::GetWelcomePageURL(),
|
| + tab_strip->GetWebContentsAt(1)->GetURL());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest, SyncPromoAllowed) {
|
| + // Consistently enable the welcome page on all platforms.
|
| + first_run::SetShouldShowWelcomePage();
|
| +
|
| + // Simulate the following master_preferences:
|
| + // {
|
| + // "sync_promo": {
|
| + // "show_on_first_run_allowed": true
|
| + // }
|
| + // }
|
| + StartupBrowserCreator browser_creator;
|
| + browser()->profile()->GetPrefs()->SetBoolean(
|
| + prefs::kSyncPromoShowOnFirstRunAllowed, true);
|
| +
|
| + // Do a process-startup browser launch.
|
| + CommandLine dummy(CommandLine::NO_PROGRAM);
|
| + StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
|
| + chrome::startup::IS_FIRST_RUN);
|
| + ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
|
| + browser()->host_desktop_type()));
|
| +
|
| + // This should have created a new browser window.
|
| + Browser* new_browser = FindOneOtherBrowser(browser());
|
| + ASSERT_TRUE(new_browser);
|
| +
|
| + // Verify that the sync promo and the welcome page are shown.
|
| + TabStripModel* tab_strip = new_browser->tab_strip_model();
|
| + ASSERT_EQ(2, tab_strip->count());
|
| + EXPECT_EQ("accounts.google.com",
|
| + tab_strip->GetWebContentsAt(0)->GetURL().host());
|
| + EXPECT_EQ(internals::GetWelcomePageURL(),
|
| + tab_strip->GetWebContentsAt(1)->GetURL());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
|
| + FirstRunTabsPromoAllowed) {
|
| + // Simulate the following master_preferences:
|
| + // {
|
| + // "first_run_tabs" : [
|
| + // "files/title1.html"
|
| + // ],
|
| + // "sync_promo": {
|
| + // "show_on_first_run_allowed": true
|
| + // }
|
| + // }
|
| + StartupBrowserCreator browser_creator;
|
| + browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
|
| + browser()->profile()->GetPrefs()->SetBoolean(
|
| + prefs::kSyncPromoShowOnFirstRunAllowed, true);
|
| +
|
| + // Do a process-startup browser launch.
|
| + CommandLine dummy(CommandLine::NO_PROGRAM);
|
| + StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
|
| + chrome::startup::IS_FIRST_RUN);
|
| + ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
|
| + browser()->host_desktop_type()));
|
| +
|
| + // This should have created a new browser window.
|
| + Browser* new_browser = FindOneOtherBrowser(browser());
|
| + ASSERT_TRUE(new_browser);
|
| +
|
| + // Verify that the first-run tab is shown and the sync promo has been added.
|
| + TabStripModel* tab_strip = new_browser->tab_strip_model();
|
| + ASSERT_EQ(2, tab_strip->count());
|
| + EXPECT_EQ("accounts.google.com",
|
| + tab_strip->GetWebContentsAt(0)->GetURL().host());
|
| + EXPECT_EQ("title1.html",
|
| + tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
|
| + FirstRunTabsContainSyncPromo) {
|
| + // Simulate the following master_preferences:
|
| + // {
|
| + // "first_run_tabs" : [
|
| + // "files/title1.html",
|
| + // "chrome://signin/?source=0&next_page=chrome%3A%2F%2Fnewtab%2F"
|
| + // ],
|
| + // "sync_promo": {
|
| + // "show_on_first_run_allowed": true
|
| + // }
|
| + // }
|
| + StartupBrowserCreator browser_creator;
|
| + browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
|
| + browser_creator.AddFirstRunTab(SyncPromoUI::GetSyncPromoURL(
|
| + SyncPromoUI::SOURCE_START_PAGE,
|
| + false));
|
| + browser()->profile()->GetPrefs()->SetBoolean(
|
| + prefs::kSyncPromoShowOnFirstRunAllowed, true);
|
| +
|
| + // Do a process-startup browser launch.
|
| + CommandLine dummy(CommandLine::NO_PROGRAM);
|
| + StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
|
| + chrome::startup::IS_FIRST_RUN);
|
| + ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
|
| + browser()->host_desktop_type()));
|
| +
|
| + // This should have created a new browser window.
|
| + Browser* new_browser = FindOneOtherBrowser(browser());
|
| + ASSERT_TRUE(new_browser);
|
| +
|
| + // Verify that the first-run tabs are shown and no sync promo has been added
|
| + // as the first-run tabs contain it already.
|
| + TabStripModel* tab_strip = new_browser->tab_strip_model();
|
| + ASSERT_EQ(2, tab_strip->count());
|
| + EXPECT_EQ("title1.html",
|
| + tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
|
| + EXPECT_EQ("accounts.google.com",
|
| + tab_strip->GetWebContentsAt(1)->GetURL().host());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
|
| + FirstRunTabsContainNTPSyncPromoAllowed) {
|
| + // Simulate the following master_preferences:
|
| + // {
|
| + // "first_run_tabs" : [
|
| + // "new_tab_page",
|
| + // "files/title1.html"
|
| + // ],
|
| + // "sync_promo": {
|
| + // "show_on_first_run_allowed": true
|
| + // }
|
| + // }
|
| + StartupBrowserCreator browser_creator;
|
| + browser_creator.AddFirstRunTab(GURL("new_tab_page"));
|
| + browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
|
| + browser()->profile()->GetPrefs()->SetBoolean(
|
| + prefs::kSyncPromoShowOnFirstRunAllowed, true);
|
| +
|
| + // Do a process-startup browser launch.
|
| + CommandLine dummy(CommandLine::NO_PROGRAM);
|
| + StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
|
| + chrome::startup::IS_FIRST_RUN);
|
| + ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
|
| + browser()->host_desktop_type()));
|
| +
|
| + // This should have created a new browser window.
|
| + Browser* new_browser = FindOneOtherBrowser(browser());
|
| + ASSERT_TRUE(new_browser);
|
| +
|
| + // Verify that the first-run tabs are shown but the NTP that they contain has
|
| + // been replaced by the sync promo.
|
| + TabStripModel* tab_strip = new_browser->tab_strip_model();
|
| + ASSERT_EQ(2, tab_strip->count());
|
| + EXPECT_EQ("accounts.google.com",
|
| + tab_strip->GetWebContentsAt(0)->GetURL().host());
|
| + EXPECT_EQ("title1.html",
|
| + tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
|
| + FirstRunTabsContainNTPSyncPromoForbidden) {
|
| + // Simulate the following master_preferences:
|
| + // {
|
| + // "first_run_tabs" : [
|
| + // "new_tab_page",
|
| + // "files/title1.html"
|
| + // ],
|
| + // "sync_promo": {
|
| + // "show_on_first_run_allowed": false
|
| + // }
|
| + // }
|
| + StartupBrowserCreator browser_creator;
|
| + browser_creator.AddFirstRunTab(GURL("new_tab_page"));
|
| + browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
|
| + browser()->profile()->GetPrefs()->SetBoolean(
|
| + prefs::kSyncPromoShowOnFirstRunAllowed, false);
|
| +
|
| + // Do a process-startup browser launch.
|
| + CommandLine dummy(CommandLine::NO_PROGRAM);
|
| + StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
|
| + chrome::startup::IS_FIRST_RUN);
|
| + ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
|
| + browser()->host_desktop_type()));
|
| +
|
| + // This should have created a new browser window.
|
| + Browser* new_browser = FindOneOtherBrowser(browser());
|
| + ASSERT_TRUE(new_browser);
|
|
|
| -#endif // !OS_CHROMEOS
|
| + // Verify that the first-run tabs are shown, the NTP that they contain has not
|
| + // not been replaced by the sync promo and no sync promo has been added.
|
| + TabStripModel* tab_strip = new_browser->tab_strip_model();
|
| + ASSERT_EQ(2, tab_strip->count());
|
| + EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
|
| + tab_strip->GetWebContentsAt(0)->GetURL());
|
| + EXPECT_EQ("title1.html",
|
| + tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
|
| + FirstRunTabsSyncPromoForbidden) {
|
| + // Simulate the following master_preferences:
|
| + // {
|
| + // "first_run_tabs" : [
|
| + // "files/title1.html"
|
| + // ],
|
| + // "sync_promo": {
|
| + // "show_on_first_run_allowed": false
|
| + // }
|
| + // }
|
| + StartupBrowserCreator browser_creator;
|
| + browser_creator.AddFirstRunTab(test_server()->GetURL("files/title1.html"));
|
| + browser()->profile()->GetPrefs()->SetBoolean(
|
| + prefs::kSyncPromoShowOnFirstRunAllowed, false);
|
| +
|
| + // Do a process-startup browser launch.
|
| + CommandLine dummy(CommandLine::NO_PROGRAM);
|
| + StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
|
| + chrome::startup::IS_FIRST_RUN);
|
| + ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
|
| + browser()->host_desktop_type()));
|
| +
|
| + // This should have created a new browser window.
|
| + Browser* new_browser = FindOneOtherBrowser(browser());
|
| + ASSERT_TRUE(new_browser);
|
| +
|
| + // Verify that the first-run tab is shown and no sync promo has been added.
|
| + TabStripModel* tab_strip = new_browser->tab_strip_model();
|
| + ASSERT_EQ(1, tab_strip->count());
|
| + EXPECT_EQ("title1.html",
|
| + tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
|
| +}
|
| +
|
| +#if defined(ENABLE_CONFIGURATION_POLICY)
|
| +IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
|
| + RestoreOnStartupURLsPolicySpecified) {
|
| + // Simulate the following master_preferences:
|
| + // {
|
| + // "sync_promo": {
|
| + // "show_on_first_run_allowed": true
|
| + // }
|
| + // }
|
| + StartupBrowserCreator browser_creator;
|
| + browser()->profile()->GetPrefs()->SetBoolean(
|
| + prefs::kSyncPromoShowOnFirstRunAllowed, true);
|
| +
|
| + // Set the following user policies:
|
| + // * RestoreOnStartup = RestoreOnStartupIsURLs
|
| + // * RestoreOnStartupURLs = [ "files/title1.html" ]
|
| + policy_map_.Set(policy::key::kRestoreOnStartup,
|
| + policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
|
| + base::Value::CreateIntegerValue(
|
| + SessionStartupPref::kPrefValueURLs));
|
| + base::ListValue startup_urls;
|
| + startup_urls.Append(base::Value::CreateStringValue(
|
| + test_server()->GetURL("files/title1.html").spec()));
|
| + policy_map_.Set(policy::key::kRestoreOnStartupURLs,
|
| + policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
|
| + startup_urls.DeepCopy());
|
| + provider_.UpdateChromePolicy(policy_map_);
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // Do a process-startup browser launch.
|
| + CommandLine dummy(CommandLine::NO_PROGRAM);
|
| + StartupBrowserCreatorImpl launch(base::FilePath(), dummy, &browser_creator,
|
| + chrome::startup::IS_FIRST_RUN);
|
| + ASSERT_TRUE(launch.Launch(browser()->profile(), std::vector<GURL>(), true,
|
| + browser()->host_desktop_type()));
|
| +
|
| + // This should have created a new browser window.
|
| + Browser* new_browser = FindOneOtherBrowser(browser());
|
| + ASSERT_TRUE(new_browser);
|
| +
|
| + // Verify that the URL specified through policy is shown and no sync promo has
|
| + // been added.
|
| + TabStripModel* tab_strip = new_browser->tab_strip_model();
|
| + ASSERT_EQ(1, tab_strip->count());
|
| + EXPECT_EQ("title1.html",
|
| + tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
|
| +}
|
| +#endif // defined(ENABLE_CONFIGURATION_POLICY)
|
| +
|
| +#endif // !defined(OS_LINUX) || !defined(GOOGLE_CHROME_BUILD) ||
|
| + // defined(ENABLE_CONFIGURATION_POLICY)
|
| +
|
| +#endif // !defined(OS_CHROMEOS)
|
|
|