| Index: chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc
|
| diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc b/chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..74bf9ad725ff39c013c18f147561b0f4445162d7
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc
|
| @@ -0,0 +1,123 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/ui/startup/startup_browser_creator_impl.h"
|
| +
|
| +#include "base/command_line.h"
|
| +#include "chrome/browser/ui/startup/startup_tab_provider.h"
|
| +#include "chrome/common/url_constants.cc"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +class StartupBrowserCreatorImplTest : public testing::Test {};
|
| +
|
| +// Bits for FakeStartupTabProvider options.
|
| +constexpr uint32_t kOnboardingTabs = 0x01;
|
| +constexpr uint32_t kDistributionFirstRunTabs = 0x02;
|
| +constexpr uint32_t kResetTriggerTabs = 0x04;
|
| +constexpr uint32_t kPinnedTabs = 0x08;
|
| +constexpr uint32_t kPreferencesTabs = 0x10;
|
| +
|
| +class FakeStartupTabProvider : public StartupTabProvider {
|
| + public:
|
| + // For each option passed, the corresponding adder below will add a sentinel
|
| + // tab and return true. For options not passed, the adder will return false.
|
| + explicit FakeStartupTabProvider(uint32_t options) : options_(options) {}
|
| +
|
| + bool AddOnboardingTabs(StartupTabs* tabs) const override {
|
| + if (options_ & kOnboardingTabs) {
|
| + tabs->push_back(StartupTab(GURL("https://onboarding"), false));
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + bool AddDistributionFirstRunTabs(StartupBrowserCreator* browser_creator,
|
| + StartupTabs* tabs) const override {
|
| + if (options_ & kDistributionFirstRunTabs) {
|
| + tabs->push_back(StartupTab(GURL("https://distribution"), false));
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + bool AddResetTriggerTabs(Profile* profile, StartupTabs* tabs) const override {
|
| + if (options_ & kResetTriggerTabs) {
|
| + tabs->push_back(StartupTab(GURL("https://reset-trigger"), false));
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + bool AddPinnedTabs(StartupTabs* tabs) const override {
|
| + if (options_ & kPinnedTabs) {
|
| + tabs->push_back(StartupTab(GURL("https://pinned"), true));
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + bool AddPreferencesTabs(StartupTabs* tabs) const override {
|
| + if (options_ & kPreferencesTabs) {
|
| + tabs->push_back(StartupTab(GURL("https://prefs"), false));
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + private:
|
| + const uint32_t options_;
|
| +};
|
| +
|
| +// "Standard" case: Tabs specified in onboarding, reset trigger, pinned tabs, or
|
| +// preferences shouldn't interfere with other content. Pinned tabs appear first.
|
| +TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs) {
|
| + FakeStartupTabProvider provider(kOnboardingTabs | kResetTriggerTabs |
|
| + kPinnedTabs | kPreferencesTabs);
|
| + StartupBrowserCreatorImpl impl(
|
| + base::FilePath(), base::CommandLine(base::CommandLine::NO_PROGRAM),
|
| + chrome::startup::IS_FIRST_RUN);
|
| +
|
| + StartupTabs output = impl.DetermineStartupTabs(&provider, false, false);
|
| + ASSERT_EQ(4U, output.size());
|
| + EXPECT_EQ("pinned", output[0].url.host());
|
| + EXPECT_EQ("onboarding", output[1].url.host());
|
| + EXPECT_EQ("reset-trigger", output[2].url.host());
|
| + EXPECT_EQ("prefs", output[3].url.host());
|
| +}
|
| +
|
| +// All content is blocked in Incognito mode, or when recovering from a crash.
|
| +// Only the New Tab Page should appear in either case.
|
| +TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_IncognitoOrCrash) {
|
| + FakeStartupTabProvider provider(kOnboardingTabs | kDistributionFirstRunTabs |
|
| + kResetTriggerTabs | kPinnedTabs |
|
| + kPreferencesTabs);
|
| + StartupBrowserCreatorImpl impl(
|
| + base::FilePath(), base::CommandLine(base::CommandLine::NO_PROGRAM),
|
| + chrome::startup::IS_FIRST_RUN);
|
| +
|
| + // Incognito
|
| + StartupTabs output = impl.DetermineStartupTabs(&provider, true, false);
|
| + ASSERT_EQ(1U, output.size());
|
| + EXPECT_EQ(GURL(chrome::kChromeUINewTabURL).host(), output[0].url.host());
|
| +
|
| + // Crash Recovery
|
| + output = impl.DetermineStartupTabs(&provider, false, true);
|
| + ASSERT_EQ(1U, output.size());
|
| + EXPECT_EQ(GURL(chrome::kChromeUINewTabURL).host(), output[0].url.host());
|
| +}
|
| +
|
| +// If Master Preferences specifies content, this should block all other
|
| +// policies.
|
| +TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_MasterPrefs) {
|
| + FakeStartupTabProvider provider(kOnboardingTabs | kDistributionFirstRunTabs |
|
| + kResetTriggerTabs | kPinnedTabs |
|
| + kPreferencesTabs);
|
| + StartupBrowserCreatorImpl impl(
|
| + base::FilePath(), base::CommandLine(base::CommandLine::NO_PROGRAM),
|
| + chrome::startup::IS_FIRST_RUN);
|
| +
|
| + StartupTabs output = impl.DetermineStartupTabs(&provider, false, false);
|
| + ASSERT_EQ(1U, output.size());
|
| + EXPECT_EQ("distribution", output[0].url.host());
|
| +}
|
|
|