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

Side by Side Diff: chrome/browser/banners/app_banner_manager_browsertest.cc

Issue 2633603002: Disable app banners in incognito. (Closed)
Patch Set: Created 3 years, 11 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 <vector> 5 #include <vector>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/test/histogram_tester.h" 9 #include "base/test/histogram_tester.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
11 #include "chrome/browser/banners/app_banner_manager.h" 11 #include "chrome/browser/banners/app_banner_manager.h"
12 #include "chrome/browser/banners/app_banner_metrics.h" 12 #include "chrome/browser/banners/app_banner_metrics.h"
13 #include "chrome/browser/banners/app_banner_settings_helper.h" 13 #include "chrome/browser/banners/app_banner_settings_helper.h"
14 #include "chrome/browser/engagement/site_engagement_service.h" 14 #include "chrome/browser/engagement/site_engagement_service.h"
15 #include "chrome/browser/installable/installable_logging.h" 15 #include "chrome/browser/installable/installable_logging.h"
16 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/ui/browser.h" 17 #include "chrome/browser/ui/browser.h"
17 #include "chrome/browser/ui/tabs/tab_strip_model.h" 18 #include "chrome/browser/ui/tabs/tab_strip_model.h"
18 #include "chrome/common/chrome_switches.h" 19 #include "chrome/common/chrome_switches.h"
19 #include "chrome/test/base/in_process_browser_test.h" 20 #include "chrome/test/base/in_process_browser_test.h"
20 #include "chrome/test/base/ui_test_utils.h" 21 #include "chrome/test/base/ui_test_utils.h"
21 #include "net/test/embedded_test_server/embedded_test_server.h" 22 #include "net/test/embedded_test_server/embedded_test_server.h"
22 23
23 namespace banners { 24 namespace banners {
24 25
25 // Browser tests for web app banners. 26 // Browser tests for web app banners.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 89
89 protected: 90 protected:
90 // Returns a test server URL to a page controlled by a service worker with 91 // Returns a test server URL to a page controlled by a service worker with
91 // |manifest_url| injected as the manifest tag. 92 // |manifest_url| injected as the manifest tag.
92 std::string GetURLOfPageWithServiceWorkerAndManifest( 93 std::string GetURLOfPageWithServiceWorkerAndManifest(
93 const std::string& manifest_url) { 94 const std::string& manifest_url) {
94 return "/banners/manifest_test_page.html?manifest=" + 95 return "/banners/manifest_test_page.html?manifest=" +
95 embedded_test_server()->GetURL(manifest_url).spec(); 96 embedded_test_server()->GetURL(manifest_url).spec();
96 } 97 }
97 98
98 void RunBannerTest(const std::string& url, 99 void RunBannerTest(Browser* browser,
100 const std::string& url,
99 const std::vector<double>& engagement_scores, 101 const std::vector<double>& engagement_scores,
100 InstallableStatusCode expected_code_for_histogram, 102 InstallableStatusCode expected_code_for_histogram,
101 bool expected_to_show) { 103 bool expected_to_show) {
102 base::HistogramTester histograms; 104 base::HistogramTester histograms;
103 GURL test_url = embedded_test_server()->GetURL(url); 105 GURL test_url = embedded_test_server()->GetURL(url);
104 content::WebContents* web_contents = 106 content::WebContents* web_contents =
105 browser()->tab_strip_model()->GetActiveWebContents(); 107 browser->tab_strip_model()->GetActiveWebContents();
106 std::unique_ptr<AppBannerManagerTest> manager( 108 std::unique_ptr<AppBannerManagerTest> manager(
107 new AppBannerManagerTest(web_contents)); 109 new AppBannerManagerTest(web_contents));
108 110
109 // Loop through the vector of engagement scores. We only expect the banner 111 // Loop through the vector of engagement scores. We only expect the banner
110 // pipeline to trigger on the last one; otherwise, nothing is expected to 112 // pipeline to trigger on the last one; otherwise, nothing is expected to
111 // happen. 113 // happen.
112 int iterations = 0; 114 int iterations = 0;
113 SiteEngagementService* service = 115 SiteEngagementService* service =
114 SiteEngagementService::Get(browser()->profile()); 116 SiteEngagementService::Get(browser->profile());
115 for (double engagement : engagement_scores) { 117 for (double engagement : engagement_scores) {
116 if (iterations > 0) { 118 if (iterations > 0) {
117 ui_test_utils::NavigateToURL(browser(), test_url); 119 ui_test_utils::NavigateToURL(browser, test_url);
118 120
119 EXPECT_EQ(false, manager->will_show()); 121 EXPECT_EQ(false, manager->will_show());
120 EXPECT_FALSE(manager->is_active()); 122 EXPECT_FALSE(manager->is_active());
121 123
122 histograms.ExpectTotalCount(banners::kMinutesHistogram, 0); 124 histograms.ExpectTotalCount(banners::kMinutesHistogram, 0);
123 histograms.ExpectTotalCount(banners::kInstallableStatusCodeHistogram, 125 histograms.ExpectTotalCount(banners::kInstallableStatusCodeHistogram,
124 0); 126 0);
125 } 127 }
126 service->ResetScoreForURL(test_url, engagement); 128 service->ResetScoreForURL(test_url, engagement);
127 ++iterations; 129 ++iterations;
128 } 130 }
129 131
130 // On the final loop, we expect the banner pipeline to trigger - the 132 // On the final loop, we expect the banner pipeline to trigger - the
131 // navigation should generate the final engagement to show the banner. Spin 133 // navigation should generate the final engagement to show the banner. Spin
132 // the run loop, which should be quit by either Stop() or ShowBanner(). 134 // the run loop, which should be quit by either Stop() or ShowBanner().
133 base::RunLoop run_loop; 135 base::RunLoop run_loop;
134 manager->Prepare(run_loop.QuitClosure()); 136 manager->Prepare(run_loop.QuitClosure());
135 ui_test_utils::NavigateToURL(browser(), test_url); 137 ui_test_utils::NavigateToURL(browser, test_url);
136 run_loop.Run(); 138 run_loop.Run();
137 139
138 EXPECT_EQ(expected_to_show, manager->will_show()); 140 EXPECT_EQ(expected_to_show, manager->will_show());
139 EXPECT_FALSE(manager->is_active()); 141 EXPECT_FALSE(manager->is_active());
140 142
141 // Navigate to ensure the InstallableStatusCodeHistogram is logged. 143 // Navigate to ensure the InstallableStatusCodeHistogram is logged.
142 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); 144 ui_test_utils::NavigateToURL(browser, GURL("about:blank"));
143 145
144 // If showing the banner, ensure that the minutes histogram is recorded. 146 // If showing the banner, ensure that the minutes histogram is recorded.
145 histograms.ExpectTotalCount(banners::kMinutesHistogram, 147 // Only check histograms in non-incognito.
146 (manager->will_show() ? 1 : 0)); 148 if (!browser->profile()->IsOffTheRecord()) {
benwells 2017/01/13 04:48:16 Can you add an expectation that there are zero his
dominickn 2017/01/13 04:55:32 I feel that doesn't belong here. I don't know of a
benwells 2017/01/13 04:59:06 Recording metrics in incognito happens, but that i
dominickn 2017/01/13 05:29:53 Oh I understand. Done (and even caught a bug whils
147 histograms.ExpectUniqueSample(banners::kInstallableStatusCodeHistogram, 149 histograms.ExpectTotalCount(banners::kMinutesHistogram,
148 expected_code_for_histogram, 1); 150 (manager->will_show() ? 1 : 0));
149 EXPECT_FALSE(manager->need_to_log_status()); 151 histograms.ExpectUniqueSample(banners::kInstallableStatusCodeHistogram,
152 expected_code_for_histogram, 1);
153 EXPECT_FALSE(manager->need_to_log_status());
154 }
150 } 155 }
151 }; 156 };
152 157
153 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerCreated) { 158 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerCreated) {
154 std::vector<double> engagement_scores{0, 10}; 159 std::vector<double> engagement_scores{0, 10};
155 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 160 RunBannerTest(browser(), "/banners/manifest_test_page.html",
156 SHOWING_WEB_APP_BANNER, true); 161 engagement_scores, SHOWING_WEB_APP_BANNER, true);
157 } 162 }
158 163
159 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 164 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
160 WebAppBannerCreatedImmediately) { 165 WebAppBannerCreatedImmediately) {
161 std::vector<double> engagement_scores{10}; 166 std::vector<double> engagement_scores{10};
162 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 167 RunBannerTest(browser(), "/banners/manifest_test_page.html",
163 SHOWING_WEB_APP_BANNER, true); 168 engagement_scores, SHOWING_WEB_APP_BANNER, true);
164 } 169 }
165 170
166 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 171 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
167 WebAppBannerCreatedAfterSeveralVisits) { 172 WebAppBannerCreatedAfterSeveralVisits) {
168 std::vector<double> engagement_scores{0, 1, 2, 3, 4, 5, 10}; 173 std::vector<double> engagement_scores{0, 1, 2, 3, 4, 5, 10};
169 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 174 RunBannerTest(browser(), "/banners/manifest_test_page.html",
170 SHOWING_WEB_APP_BANNER, true); 175 engagement_scores, SHOWING_WEB_APP_BANNER, true);
171 } 176 }
172 177
173 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 178 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
174 WebAppBannerNotSeenAfterShowing) { 179 WebAppBannerNotSeenAfterShowing) {
175 std::vector<double> engagement_scores{0, 10}; 180 std::vector<double> engagement_scores{0, 10};
176 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 181 RunBannerTest(browser(), "/banners/manifest_test_page.html",
177 SHOWING_WEB_APP_BANNER, true); 182 engagement_scores, SHOWING_WEB_APP_BANNER, true);
178 183
179 AppBannerManager::SetTimeDeltaForTesting(1); 184 AppBannerManager::SetTimeDeltaForTesting(1);
180 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 185 RunBannerTest(browser(), "/banners/manifest_test_page.html",
181 PREVIOUSLY_IGNORED, false); 186 engagement_scores, PREVIOUSLY_IGNORED, false);
182 187
183 AppBannerManager::SetTimeDeltaForTesting(13); 188 AppBannerManager::SetTimeDeltaForTesting(13);
184 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 189 RunBannerTest(browser(), "/banners/manifest_test_page.html",
185 PREVIOUSLY_IGNORED, false); 190 engagement_scores, PREVIOUSLY_IGNORED, false);
186 191
187 AppBannerManager::SetTimeDeltaForTesting(14); 192 AppBannerManager::SetTimeDeltaForTesting(14);
188 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 193 RunBannerTest(browser(), "/banners/manifest_test_page.html",
189 SHOWING_WEB_APP_BANNER, true); 194 engagement_scores, SHOWING_WEB_APP_BANNER, true);
190 195
191 AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(90, 2); 196 AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(90, 2);
192 197
193 AppBannerManager::SetTimeDeltaForTesting(16); 198 AppBannerManager::SetTimeDeltaForTesting(16);
194 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 199 RunBannerTest(browser(), "/banners/manifest_test_page.html",
195 SHOWING_WEB_APP_BANNER, true); 200 engagement_scores, SHOWING_WEB_APP_BANNER, true);
196 } 201 }
197 202
198 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 203 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
199 WebAppBannerNoTypeInManifest) { 204 WebAppBannerNoTypeInManifest) {
200 std::vector<double> engagement_scores{0, 10}; 205 std::vector<double> engagement_scores{0, 10};
201 RunBannerTest(GetURLOfPageWithServiceWorkerAndManifest( 206 RunBannerTest(browser(), GetURLOfPageWithServiceWorkerAndManifest(
202 "/banners/manifest_no_type.json"), 207 "/banners/manifest_no_type.json"),
203 engagement_scores, SHOWING_WEB_APP_BANNER, true); 208 engagement_scores, SHOWING_WEB_APP_BANNER, true);
204 } 209 }
205 210
206 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 211 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
207 WebAppBannerNoTypeInManifestCapsExtension) { 212 WebAppBannerNoTypeInManifestCapsExtension) {
208 std::vector<double> engagement_scores{0, 10}; 213 std::vector<double> engagement_scores{0, 10};
209 RunBannerTest(GetURLOfPageWithServiceWorkerAndManifest( 214 RunBannerTest(browser(), GetURLOfPageWithServiceWorkerAndManifest(
210 "/banners/manifest_no_type_caps.json"), 215 "/banners/manifest_no_type_caps.json"),
211 engagement_scores, SHOWING_WEB_APP_BANNER, true); 216 engagement_scores, SHOWING_WEB_APP_BANNER, true);
212 } 217 }
213 218
214 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, NoManifest) { 219 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, NoManifest) {
215 std::vector<double> engagement_scores{10}; 220 std::vector<double> engagement_scores{10};
216 RunBannerTest("/banners/no_manifest_test_page.html", engagement_scores, 221 RunBannerTest(browser(), "/banners/no_manifest_test_page.html",
217 NO_MANIFEST, false); 222 engagement_scores, NO_MANIFEST, false);
218 } 223 }
219 224
220 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, MissingManifest) { 225 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, MissingManifest) {
221 std::vector<double> engagement_scores{10}; 226 std::vector<double> engagement_scores{10};
222 RunBannerTest(GetURLOfPageWithServiceWorkerAndManifest( 227 RunBannerTest(browser(), GetURLOfPageWithServiceWorkerAndManifest(
223 "/banners/manifest_missing.json"), 228 "/banners/manifest_missing.json"),
224 engagement_scores, MANIFEST_EMPTY, false); 229 engagement_scores, MANIFEST_EMPTY, false);
225 } 230 }
226 231
227 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, CancelBannerDirect) { 232 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, CancelBannerDirect) {
228 std::vector<double> engagement_scores{10}; 233 std::vector<double> engagement_scores{10};
229 RunBannerTest("/banners/cancel_test_page.html", engagement_scores, 234 RunBannerTest(browser(), "/banners/cancel_test_page.html", engagement_scores,
230 RENDERER_CANCELLED, false); 235 RENDERER_CANCELLED, false);
231 } 236 }
232 237
233 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBanner) { 238 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBanner) {
234 std::vector<double> engagement_scores{0, 5, 10}; 239 std::vector<double> engagement_scores{0, 5, 10};
235 RunBannerTest("/banners/prompt_test_page.html", engagement_scores, 240 RunBannerTest(browser(), "/banners/prompt_test_page.html", engagement_scores,
236 SHOWING_WEB_APP_BANNER, true); 241 SHOWING_WEB_APP_BANNER, true);
237 } 242 }
238 243
239 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBannerInHandler) { 244 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBannerInHandler) {
240 std::vector<double> engagement_scores{0, 2, 5, 10}; 245 std::vector<double> engagement_scores{0, 2, 5, 10};
241 RunBannerTest("/banners/prompt_in_handler_test_page.html", engagement_scores, 246 RunBannerTest(browser(), "/banners/prompt_in_handler_test_page.html",
242 SHOWING_WEB_APP_BANNER, true); 247 engagement_scores, SHOWING_WEB_APP_BANNER, true);
243 } 248 }
244 249
245 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerInIFrame) { 250 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerInIFrame) {
246 std::vector<double> engagement_scores{10}; 251 std::vector<double> engagement_scores{10};
247 RunBannerTest("/banners/iframe_test_page.html", engagement_scores, 252 RunBannerTest(browser(), "/banners/iframe_test_page.html", engagement_scores,
248 NO_MANIFEST, false); 253 NO_MANIFEST, false);
249 } 254 }
250 255
256 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, DoesNotShowInIncognito) {
257 std::vector<double> engagement_scores{10};
258 Browser* incognito_browser =
259 OpenURLOffTheRecord(browser()->profile(), GURL("about:blank"));
260 RunBannerTest(incognito_browser, "/banners/manifest_test_page.html",
261 engagement_scores, IN_INCOGNITO, false);
262 }
263
251 } // namespace banners 264 } // namespace banners
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698