Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(839)

Side by Side Diff: chrome/browser/ui/startup/startup_browser_creator_impl_unittest.cc

Issue 2469363002: Tech Debt Repayment for StartupBrowserCreatorImpl Refactor (Closed)
Patch Set: sky comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" 5 #include "chrome/browser/ui/startup/startup_browser_creator_impl.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "chrome/browser/ui/startup/startup_tab_provider.h" 8 #include "chrome/browser/ui/startup/startup_tab_provider.h"
9 #include "chrome/common/url_constants.cc" 9 #include "chrome/common/url_constants.cc"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 11
12 using Creator = StartupBrowserCreatorImpl;
13
12 namespace { 14 namespace {
13 15
14 // Bits for FakeStartupTabProvider options. 16 // Bits for FakeStartupTabProvider options.
15 constexpr uint32_t kOnboardingTabs = 1 << 0; 17 constexpr uint32_t kOnboardingTabs = 1 << 0;
16 constexpr uint32_t kDistributionFirstRunTabs = 1 << 1; 18 constexpr uint32_t kDistributionFirstRunTabs = 1 << 1;
17 constexpr uint32_t kResetTriggerTabs = 1 << 2; 19 constexpr uint32_t kResetTriggerTabs = 1 << 2;
18 constexpr uint32_t kPinnedTabs = 1 << 3; 20 constexpr uint32_t kPinnedTabs = 1 << 3;
19 constexpr uint32_t kPreferencesTabs = 1 << 4; 21 constexpr uint32_t kPreferencesTabs = 1 << 4;
20 constexpr uint32_t kNewTabPageTabs = 1 << 5; 22 constexpr uint32_t kNewTabPageTabs = 1 << 5;
21 23
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 79
78 } // namespace 80 } // namespace
79 81
80 // "Standard" case: Tabs specified in onboarding, reset trigger, pinned tabs, or 82 // "Standard" case: Tabs specified in onboarding, reset trigger, pinned tabs, or
81 // preferences shouldn't interfere with each other. Nothing specified on the 83 // preferences shouldn't interfere with each other. Nothing specified on the
82 // command line. Reset trigger always appears first. 84 // command line. Reset trigger always appears first.
83 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs) { 85 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs) {
84 FakeStartupTabProvider provider(kOnboardingTabs | kResetTriggerTabs | 86 FakeStartupTabProvider provider(kOnboardingTabs | kResetTriggerTabs |
85 kPinnedTabs | kPreferencesTabs | 87 kPinnedTabs | kPreferencesTabs |
86 kNewTabPageTabs); 88 kNewTabPageTabs);
87 StartupBrowserCreatorImpl impl( 89 Creator impl(base::FilePath(),
88 base::FilePath(), base::CommandLine(base::CommandLine::NO_PROGRAM), 90 base::CommandLine(base::CommandLine::NO_PROGRAM),
89 chrome::startup::IS_FIRST_RUN); 91 chrome::startup::IS_FIRST_RUN);
90 92
91 StartupTabs output = 93 StartupTabs output =
92 impl.DetermineStartupTabs(provider, StartupTabs(), false, false); 94 impl.DetermineStartupTabs(provider, StartupTabs(), false, false);
93 ASSERT_EQ(4U, output.size()); 95 ASSERT_EQ(4U, output.size());
94 EXPECT_EQ("reset-trigger", output[0].url.host()); 96 EXPECT_EQ("reset-trigger", output[0].url.host());
95 EXPECT_EQ("onboarding", output[1].url.host()); 97 EXPECT_EQ("onboarding", output[1].url.host());
96 EXPECT_EQ("prefs", output[2].url.host()); 98 EXPECT_EQ("prefs", output[2].url.host());
97 EXPECT_EQ("pinned", output[3].url.host()); 99 EXPECT_EQ("pinned", output[3].url.host());
98 } 100 }
99 101
100 // All content is blocked in Incognito mode, or when recovering from a crash. 102 // All content is blocked in Incognito mode, or when recovering from a crash.
101 // Only the New Tab Page should appear in either case. 103 // Only the New Tab Page should appear in either case.
102 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_IncognitoOrCrash) { 104 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_IncognitoOrCrash) {
103 FakeStartupTabProvider provider(kOnboardingTabs | kDistributionFirstRunTabs | 105 FakeStartupTabProvider provider(kOnboardingTabs | kDistributionFirstRunTabs |
104 kResetTriggerTabs | kPinnedTabs | 106 kResetTriggerTabs | kPinnedTabs |
105 kPreferencesTabs | kNewTabPageTabs); 107 kPreferencesTabs | kNewTabPageTabs);
106 StartupBrowserCreatorImpl impl( 108 Creator impl(base::FilePath(),
107 base::FilePath(), base::CommandLine(base::CommandLine::NO_PROGRAM), 109 base::CommandLine(base::CommandLine::NO_PROGRAM),
108 chrome::startup::IS_FIRST_RUN); 110 chrome::startup::IS_FIRST_RUN);
109 111
110 // Incognito case: 112 // Incognito case:
111 StartupTabs output = 113 StartupTabs output =
112 impl.DetermineStartupTabs(provider, StartupTabs(), true, false); 114 impl.DetermineStartupTabs(provider, StartupTabs(), true, false);
113 ASSERT_EQ(1U, output.size()); 115 ASSERT_EQ(1U, output.size());
114 // Check for the actual NTP URL, rather than the sentinel returned by the 116 // Check for the actual NTP URL, rather than the sentinel returned by the
115 // fake, because the Provider is ignored entirely when short-circuited by 117 // fake, because the Provider is ignored entirely when short-circuited by
116 // incognito/crash. 118 // incognito/crash.
117 EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), output[0].url); 119 EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), output[0].url);
118 120
119 // Crash Recovery case: 121 // Crash Recovery case:
120 output = impl.DetermineStartupTabs(provider, StartupTabs(), false, true); 122 output = impl.DetermineStartupTabs(provider, StartupTabs(), false, true);
121 ASSERT_EQ(1U, output.size()); 123 ASSERT_EQ(1U, output.size());
122 EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), output[0].url); 124 EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), output[0].url);
123 } 125 }
124 126
125 // If Master Preferences specifies content, this should block all other 127 // If Master Preferences specifies content, this should block all other
126 // policies. The only exception is command line URLs, tested below. 128 // policies. The only exception is command line URLs, tested below.
127 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_MasterPrefs) { 129 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_MasterPrefs) {
128 FakeStartupTabProvider provider(kOnboardingTabs | kDistributionFirstRunTabs | 130 FakeStartupTabProvider provider(kOnboardingTabs | kDistributionFirstRunTabs |
129 kResetTriggerTabs | kPinnedTabs | 131 kResetTriggerTabs | kPinnedTabs |
130 kPreferencesTabs | kNewTabPageTabs); 132 kPreferencesTabs | kNewTabPageTabs);
131 StartupBrowserCreatorImpl impl( 133 Creator impl(base::FilePath(),
132 base::FilePath(), base::CommandLine(base::CommandLine::NO_PROGRAM), 134 base::CommandLine(base::CommandLine::NO_PROGRAM),
133 chrome::startup::IS_FIRST_RUN); 135 chrome::startup::IS_FIRST_RUN);
134 136
135 StartupTabs output = 137 StartupTabs output =
136 impl.DetermineStartupTabs(provider, StartupTabs(), false, false); 138 impl.DetermineStartupTabs(provider, StartupTabs(), false, false);
137 ASSERT_EQ(1U, output.size()); 139 ASSERT_EQ(1U, output.size());
138 EXPECT_EQ("distribution", output[0].url.host()); 140 EXPECT_EQ("distribution", output[0].url.host());
139 } 141 }
140 142
141 // URLs specified on the command line should always appear, and should block 143 // URLs specified on the command line should always appear, and should block
142 // all other tabs except the Reset Trigger tab. 144 // all other tabs except the Reset Trigger tab.
143 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_CommandLine) { 145 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_CommandLine) {
144 FakeStartupTabProvider provider(kOnboardingTabs | kDistributionFirstRunTabs | 146 FakeStartupTabProvider provider(kOnboardingTabs | kDistributionFirstRunTabs |
145 kResetTriggerTabs | kPinnedTabs | 147 kResetTriggerTabs | kPinnedTabs |
146 kPreferencesTabs | kNewTabPageTabs); 148 kPreferencesTabs | kNewTabPageTabs);
147 StartupBrowserCreatorImpl impl( 149 Creator impl(base::FilePath(),
148 base::FilePath(), base::CommandLine(base::CommandLine::NO_PROGRAM), 150 base::CommandLine(base::CommandLine::NO_PROGRAM),
149 chrome::startup::IS_FIRST_RUN); 151 chrome::startup::IS_FIRST_RUN);
150 152
151 StartupTabs cmd_line_tabs = {StartupTab(GURL("https://cmd-line"), false)}; 153 StartupTabs cmd_line_tabs = {StartupTab(GURL("https://cmd-line"), false)};
152 154
153 StartupTabs output = 155 StartupTabs output =
154 impl.DetermineStartupTabs(provider, cmd_line_tabs, false, false); 156 impl.DetermineStartupTabs(provider, cmd_line_tabs, false, false);
155 ASSERT_EQ(2U, output.size()); 157 ASSERT_EQ(2U, output.size());
156 EXPECT_EQ("reset-trigger", output[0].url.host()); 158 EXPECT_EQ("reset-trigger", output[0].url.host());
157 EXPECT_EQ("cmd-line", output[1].url.host()); 159 EXPECT_EQ("cmd-line", output[1].url.host());
158 160
159 // Also test that both incognito and crash recovery don't interfere with 161 // Also test that both incognito and crash recovery don't interfere with
160 // command line tabs. 162 // command line tabs.
161 163
162 // Incognito 164 // Incognito
163 output = impl.DetermineStartupTabs(provider, cmd_line_tabs, true, false); 165 output = impl.DetermineStartupTabs(provider, cmd_line_tabs, true, false);
164 ASSERT_EQ(1U, output.size()); 166 ASSERT_EQ(1U, output.size());
165 EXPECT_EQ("cmd-line", output[0].url.host()); 167 EXPECT_EQ("cmd-line", output[0].url.host());
166 168
167 // Crash Recovery 169 // Crash Recovery
168 output = impl.DetermineStartupTabs(provider, cmd_line_tabs, false, true); 170 output = impl.DetermineStartupTabs(provider, cmd_line_tabs, false, true);
169 ASSERT_EQ(1U, output.size()); 171 ASSERT_EQ(1U, output.size());
170 EXPECT_EQ("cmd-line", output[0].url.host()); 172 EXPECT_EQ("cmd-line", output[0].url.host());
171 } 173 }
172 174
173 // New Tab Page should appear alongside pinned tabs and the reset trigger, but 175 // New Tab Page should appear alongside pinned tabs and the reset trigger, but
174 // should be superseded by onboarding tabs and by tabs specified in preferences. 176 // should be superseded by onboarding tabs and by tabs specified in preferences.
175 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_NewTabPage) { 177 TEST(StartupBrowserCreatorImplTest, DetermineStartupTabs_NewTabPage) {
176 FakeStartupTabProvider provider_allows_ntp(kPinnedTabs | kResetTriggerTabs | 178 FakeStartupTabProvider provider_allows_ntp(kPinnedTabs | kResetTriggerTabs |
177 kNewTabPageTabs); 179 kNewTabPageTabs);
178 StartupBrowserCreatorImpl impl( 180 Creator impl(base::FilePath(),
179 base::FilePath(), base::CommandLine(base::CommandLine::NO_PROGRAM), 181 base::CommandLine(base::CommandLine::NO_PROGRAM),
180 chrome::startup::IS_FIRST_RUN); 182 chrome::startup::IS_FIRST_RUN);
181 183
182 StartupTabs output = impl.DetermineStartupTabs(provider_allows_ntp, 184 StartupTabs output = impl.DetermineStartupTabs(provider_allows_ntp,
183 StartupTabs(), false, false); 185 StartupTabs(), false, false);
184 ASSERT_EQ(3U, output.size()); 186 ASSERT_EQ(3U, output.size());
185 EXPECT_EQ("reset-trigger", output[0].url.host()); 187 EXPECT_EQ("reset-trigger", output[0].url.host());
186 EXPECT_EQ("new-tab", output[1].url.host()); 188 EXPECT_EQ("new-tab", output[1].url.host());
187 EXPECT_EQ("pinned", output[2].url.host()); 189 EXPECT_EQ("pinned", output[2].url.host());
188 } 190 }
191
192 TEST(StartupBrowserCreatorImplTest, DetermineBrowserOpenBehavior_Startup) {
193 SessionStartupPref pref_default(SessionStartupPref::Type::DEFAULT);
194 SessionStartupPref pref_last(SessionStartupPref::Type::LAST);
195 SessionStartupPref pref_urls(SessionStartupPref::Type::URLS);
196
197 // The most typical case: startup, not recovering from a crash, no switches.
198 // Test each pref with and without command-line tabs.
199 Creator::BrowserOpenBehavior output = Creator::DetermineBrowserOpenBehavior(
200 pref_default, Creator::PROCESS_STARTUP);
201 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
202
203 output = Creator::DetermineBrowserOpenBehavior(
204 pref_default, Creator::PROCESS_STARTUP | Creator::HAS_CMD_LINE_TABS);
205 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
206
207 output = Creator::DetermineBrowserOpenBehavior(pref_urls,
208 Creator::PROCESS_STARTUP);
209 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
210
211 output = Creator::DetermineBrowserOpenBehavior(
212 pref_urls, Creator::PROCESS_STARTUP | Creator::HAS_CMD_LINE_TABS);
213 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
214
215 output = Creator::DetermineBrowserOpenBehavior(pref_last,
216 Creator::PROCESS_STARTUP);
217 EXPECT_EQ(Creator::BrowserOpenBehavior::SYNCHRONOUS_RESTORE, output);
218
219 output = Creator::DetermineBrowserOpenBehavior(
220 pref_last, Creator::PROCESS_STARTUP | Creator::HAS_CMD_LINE_TABS);
221 EXPECT_EQ(Creator::BrowserOpenBehavior::SYNCHRONOUS_RESTORE, output);
222 }
223
224 TEST(StartupBrowserCreatorImplTest, DetermineBrowserOpenBehavior_CmdLineTabs) {
225 SessionStartupPref pref_default(SessionStartupPref::Type::DEFAULT);
226 SessionStartupPref pref_last(SessionStartupPref::Type::LAST);
227 SessionStartupPref pref_urls(SessionStartupPref::Type::URLS);
228
229 // Command line tabs after startup should prompt use of existing window,
230 // regardless of pref.
231 Creator::BrowserOpenBehavior output = Creator::DetermineBrowserOpenBehavior(
232 pref_default, Creator::HAS_CMD_LINE_TABS);
233 EXPECT_EQ(Creator::BrowserOpenBehavior::USE_EXISTING, output);
234
235 output = Creator::DetermineBrowserOpenBehavior(pref_urls,
236 Creator::HAS_CMD_LINE_TABS);
237 EXPECT_EQ(Creator::BrowserOpenBehavior::USE_EXISTING, output);
238
239 output = Creator::DetermineBrowserOpenBehavior(pref_last,
240 Creator::HAS_CMD_LINE_TABS);
241 EXPECT_EQ(Creator::BrowserOpenBehavior::USE_EXISTING, output);
242
243 // Exception: this can be overridden by passing a switch.
244 output = Creator::DetermineBrowserOpenBehavior(
245 pref_urls, Creator::HAS_NEW_WINDOW_SWITCH | Creator::HAS_CMD_LINE_TABS);
246 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
247 }
248
249 TEST(StartupBrowserCreatorImplTest, DetermineBrowserOpenBehavior_PostCrash) {
250 SessionStartupPref pref_last(SessionStartupPref::Type::LAST);
251
252 // Launching after crash should block session restore.
253 Creator::BrowserOpenBehavior output = Creator::DetermineBrowserOpenBehavior(
254 pref_last, Creator::PROCESS_STARTUP | Creator::IS_POST_CRASH_LAUNCH);
255 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
256
257 // Exception: this can be overridden by passing a switch.
258 output = Creator::DetermineBrowserOpenBehavior(
259 pref_last, Creator::PROCESS_STARTUP | Creator::IS_POST_CRASH_LAUNCH |
260 Creator::HAS_RESTORE_SWITCH);
261 EXPECT_EQ(Creator::BrowserOpenBehavior::SYNCHRONOUS_RESTORE, output);
262 }
263
264 TEST(StartupBrowserCreatorImplTest, DetermineBrowserOpenBehavior_NotStartup) {
265 SessionStartupPref pref_default(SessionStartupPref::Type::DEFAULT);
266 SessionStartupPref pref_last(SessionStartupPref::Type::LAST);
267 SessionStartupPref pref_urls(SessionStartupPref::Type::URLS);
268
269 // Launch after startup without command-line tabs should always create a new
270 // window.
271 Creator::BrowserOpenBehavior output =
272 Creator::DetermineBrowserOpenBehavior(pref_default, 0);
273 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
274
275 output = Creator::DetermineBrowserOpenBehavior(pref_last, 0);
276 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
277
278 output = Creator::DetermineBrowserOpenBehavior(pref_urls, 0);
279 EXPECT_EQ(Creator::BrowserOpenBehavior::NEW, output);
280 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/startup/startup_browser_creator_impl.cc ('k') | chrome/browser/ui/startup/startup_tab_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698