OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" | |
6 | |
7 #include "base/command_line.h" | |
8 #include "chrome/browser/ui/startup/startup_tab_provider.h" | |
9 #include "chrome/common/url_constants.cc" | |
10 #include "testing/gmock/include/gmock/gmock.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | |
12 | |
13 class StartupBrowserCreatorImplTest : public testing::Test {}; | |
14 | |
15 class MockStartupTabProvider : public StartupTabProvider { | |
16 public: | |
17 MOCK_METHOD0(GetOnboardingTabs, StartupTabs()); | |
18 MOCK_METHOD1(GetMasterPreferencesTabs, | |
19 StartupTabs(StartupBrowserCreator* browser_creator)); | |
20 MOCK_METHOD1(GetResetTriggerTabs, StartupTabs(Profile* profile)); | |
21 MOCK_METHOD0(GetPinnedTabs, StartupTabs()); | |
22 MOCK_METHOD0(GetPreferencesTabs, StartupTabs()); | |
23 }; | |
24 | |
25 // Helper method which modifies the given MockStartupTabProvider, such that for | |
26 // each boolean argument passed as true, the corresponding mock getter method | |
27 // returns a sentinel value. (By default, the mock getters return empty | |
28 // vectors.) | |
29 void PrepMockProvider(MockStartupTabProvider* provider, | |
30 bool onboarding, | |
31 bool master_preferences, | |
32 bool reset_trigger, | |
33 bool pinned, | |
34 bool preferences) { | |
35 if (onboarding) { | |
36 StartupTab onboarding_tab{GURL("https://onboarding"), false}; | |
grt (UTC plus 2)
2016/09/09 11:40:30
nit: prefer ctor syntax over uniform syntax as per
| |
37 StartupTabs onboarding_result; | |
grt (UTC plus 2)
2016/09/09 11:40:30
better yet, roll these three lines into one:
S
| |
38 onboarding_result.push_back(onboarding_tab); | |
39 ON_CALL(*provider, GetOnboardingTabs()) | |
grt (UTC plus 2)
2016/09/09 11:40:30
by using ON_CALL, this mock object isn't actually
| |
40 .WillByDefault(testing::Return(onboarding_result)); | |
41 } | |
42 | |
43 if (master_preferences) { | |
44 StartupTab master_prefs_tab{GURL("https://master-prefs"), false}; | |
45 StartupTabs master_prefs_result; | |
46 master_prefs_result.push_back(master_prefs_tab); | |
47 ON_CALL(*provider, GetMasterPreferencesTabs(testing::_)) | |
48 .WillByDefault(testing::Return(master_prefs_result)); | |
49 } | |
50 | |
51 if (reset_trigger) { | |
52 StartupTab reset_trigger_tab{GURL("https://reset-trigger"), false}; | |
53 StartupTabs reset_trigger_result; | |
54 reset_trigger_result.push_back(reset_trigger_tab); | |
55 ON_CALL(*provider, GetResetTriggerTabs(testing::_)) | |
56 .WillByDefault(testing::Return(reset_trigger_result)); | |
57 } | |
58 | |
59 if (pinned) { | |
60 StartupTab pinned_tab{GURL("https://pinned"), true}; | |
61 StartupTabs pinned_result; | |
62 pinned_result.push_back(pinned_tab); | |
63 ON_CALL(*provider, GetPinnedTabs()) | |
64 .WillByDefault(testing::Return(pinned_result)); | |
65 } | |
66 | |
67 if (preferences) { | |
68 StartupTab preferences_tab{GURL("https://prefs"), false}; | |
69 StartupTabs preferences_result; | |
70 preferences_result.push_back(preferences_tab); | |
71 ON_CALL(*provider, GetPreferencesTabs()) | |
72 .WillByDefault(testing::Return(preferences_result)); | |
73 } | |
74 } | |
75 | |
76 // "Standard" case: Tabs specified in onboarding, reset trigger, pinned tabs, or | |
77 // preferences shouldn't interfere with other content. Pinned tabs appear first. | |
78 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs) { | |
79 MockStartupTabProvider provider; | |
80 PrepMockProvider(&provider, true, false, true, true, true); | |
grt (UTC plus 2)
2016/09/09 11:40:30
while PrepMockProvider may reduce pure lines-of-co
| |
81 base::CommandLine dummy(base::CommandLine::NO_PROGRAM); | |
grt (UTC plus 2)
2016/09/09 11:40:30
inline this in the call below rather than introduc
| |
82 StartupBrowserCreatorImpl impl(base::FilePath(), dummy, | |
83 chrome::startup::IS_FIRST_RUN); | |
84 | |
85 StartupTabs output = impl.DetermineStartupTabs(&provider, false, false); | |
86 ASSERT_EQ(4U, output.size()); | |
87 EXPECT_EQ("pinned", output[0].url.host()); | |
88 EXPECT_EQ("onboarding", output[1].url.host()); | |
89 EXPECT_EQ("reset-trigger", output[2].url.host()); | |
90 EXPECT_EQ("prefs", output[3].url.host()); | |
91 } | |
92 | |
93 // All content is blocked in Incognito mode, or when recovering from a crash. | |
94 // Only the New Tab Page should appear in either case. | |
95 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_IncognitoOrCrash) { | |
96 MockStartupTabProvider provider; | |
97 PrepMockProvider(&provider, true, true, true, true, true); | |
98 base::CommandLine dummy(base::CommandLine::NO_PROGRAM); | |
99 StartupBrowserCreatorImpl impl(base::FilePath(), dummy, | |
100 chrome::startup::IS_FIRST_RUN); | |
101 | |
102 // Incognito | |
103 StartupTabs output = impl.DetermineStartupTabs(&provider, true, false); | |
104 ASSERT_EQ(1U, output.size()); | |
105 EXPECT_EQ(GURL(chrome::kChromeUINewTabURL).host(), output[0].url.host()); | |
106 | |
107 // Crash Recovery | |
108 output = impl.DetermineStartupTabs(&provider, false, true); | |
109 ASSERT_EQ(1U, output.size()); | |
110 EXPECT_EQ(GURL(chrome::kChromeUINewTabURL).host(), output[0].url.host()); | |
111 } | |
112 | |
113 // If Master Preferences specifies content, this should block all other | |
114 // policies. | |
115 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_MasterPrefs) { | |
116 MockStartupTabProvider provider; | |
117 PrepMockProvider(&provider, true, true, true, true, true); | |
118 base::CommandLine dummy(base::CommandLine::NO_PROGRAM); | |
119 StartupBrowserCreatorImpl impl(base::FilePath(), dummy, | |
120 chrome::startup::IS_FIRST_RUN); | |
121 | |
122 StartupTabs output = impl.DetermineStartupTabs(&provider, false, false); | |
123 ASSERT_EQ(1U, output.size()); | |
124 EXPECT_EQ("master-prefs", output[0].url.host()); | |
125 } | |
OLD | NEW |