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

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

Issue 2633603002: Disable app banners in incognito. (Closed)
Patch Set: Comment + rebase 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
146 // If in incognito, ensure that nothing is recorded.
144 // If showing the banner, ensure that the minutes histogram is recorded. 147 // If showing the banner, ensure that the minutes histogram is recorded.
145 histograms.ExpectTotalCount(banners::kMinutesHistogram, 148 if (browser->profile()->IsOffTheRecord()) {
146 (manager->will_show() ? 1 : 0)); 149 histograms.ExpectTotalCount(banners::kMinutesHistogram, 0);
147 histograms.ExpectUniqueSample(banners::kInstallableStatusCodeHistogram, 150 histograms.ExpectTotalCount(banners::kInstallableStatusCodeHistogram, 0);
148 expected_code_for_histogram, 1); 151 } else {
149 EXPECT_FALSE(manager->need_to_log_status()); 152 histograms.ExpectTotalCount(banners::kMinutesHistogram,
153 (manager->will_show() ? 1 : 0));
154 histograms.ExpectUniqueSample(banners::kInstallableStatusCodeHistogram,
155 expected_code_for_histogram, 1);
156 EXPECT_FALSE(manager->need_to_log_status());
157 }
150 } 158 }
151 }; 159 };
152 160
153 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerCreated) { 161 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerCreated) {
154 std::vector<double> engagement_scores{0, 10}; 162 std::vector<double> engagement_scores{0, 10};
155 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 163 RunBannerTest(browser(), "/banners/manifest_test_page.html",
156 SHOWING_WEB_APP_BANNER, true); 164 engagement_scores, SHOWING_WEB_APP_BANNER, true);
157 } 165 }
158 166
159 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 167 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
160 WebAppBannerCreatedImmediately) { 168 WebAppBannerCreatedImmediately) {
161 std::vector<double> engagement_scores{10}; 169 std::vector<double> engagement_scores{10};
162 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 170 RunBannerTest(browser(), "/banners/manifest_test_page.html",
163 SHOWING_WEB_APP_BANNER, true); 171 engagement_scores, SHOWING_WEB_APP_BANNER, true);
164 } 172 }
165 173
166 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 174 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
167 WebAppBannerCreatedAfterSeveralVisits) { 175 WebAppBannerCreatedAfterSeveralVisits) {
168 std::vector<double> engagement_scores{0, 1, 2, 3, 4, 5, 10}; 176 std::vector<double> engagement_scores{0, 1, 2, 3, 4, 5, 10};
169 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 177 RunBannerTest(browser(), "/banners/manifest_test_page.html",
170 SHOWING_WEB_APP_BANNER, true); 178 engagement_scores, SHOWING_WEB_APP_BANNER, true);
171 } 179 }
172 180
173 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 181 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
174 WebAppBannerNotSeenAfterShowing) { 182 WebAppBannerNotSeenAfterShowing) {
175 std::vector<double> engagement_scores{0, 10}; 183 std::vector<double> engagement_scores{0, 10};
176 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 184 RunBannerTest(browser(), "/banners/manifest_test_page.html",
177 SHOWING_WEB_APP_BANNER, true); 185 engagement_scores, SHOWING_WEB_APP_BANNER, true);
178 186
179 AppBannerManager::SetTimeDeltaForTesting(1); 187 AppBannerManager::SetTimeDeltaForTesting(1);
180 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 188 RunBannerTest(browser(), "/banners/manifest_test_page.html",
181 PREVIOUSLY_IGNORED, false); 189 engagement_scores, PREVIOUSLY_IGNORED, false);
182 190
183 AppBannerManager::SetTimeDeltaForTesting(13); 191 AppBannerManager::SetTimeDeltaForTesting(13);
184 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 192 RunBannerTest(browser(), "/banners/manifest_test_page.html",
185 PREVIOUSLY_IGNORED, false); 193 engagement_scores, PREVIOUSLY_IGNORED, false);
186 194
187 AppBannerManager::SetTimeDeltaForTesting(14); 195 AppBannerManager::SetTimeDeltaForTesting(14);
188 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 196 RunBannerTest(browser(), "/banners/manifest_test_page.html",
189 SHOWING_WEB_APP_BANNER, true); 197 engagement_scores, SHOWING_WEB_APP_BANNER, true);
190 198
191 AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(90, 2); 199 AppBannerSettingsHelper::SetDaysAfterDismissAndIgnoreToTrigger(90, 2);
192 200
193 AppBannerManager::SetTimeDeltaForTesting(16); 201 AppBannerManager::SetTimeDeltaForTesting(16);
194 RunBannerTest("/banners/manifest_test_page.html", engagement_scores, 202 RunBannerTest(browser(), "/banners/manifest_test_page.html",
195 SHOWING_WEB_APP_BANNER, true); 203 engagement_scores, SHOWING_WEB_APP_BANNER, true);
196 } 204 }
197 205
198 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 206 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
199 WebAppBannerNoTypeInManifest) { 207 WebAppBannerNoTypeInManifest) {
200 std::vector<double> engagement_scores{0, 10}; 208 std::vector<double> engagement_scores{0, 10};
201 RunBannerTest(GetURLOfPageWithServiceWorkerAndManifest( 209 RunBannerTest(browser(), GetURLOfPageWithServiceWorkerAndManifest(
202 "/banners/manifest_no_type.json"), 210 "/banners/manifest_no_type.json"),
203 engagement_scores, SHOWING_WEB_APP_BANNER, true); 211 engagement_scores, SHOWING_WEB_APP_BANNER, true);
204 } 212 }
205 213
206 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, 214 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest,
207 WebAppBannerNoTypeInManifestCapsExtension) { 215 WebAppBannerNoTypeInManifestCapsExtension) {
208 std::vector<double> engagement_scores{0, 10}; 216 std::vector<double> engagement_scores{0, 10};
209 RunBannerTest(GetURLOfPageWithServiceWorkerAndManifest( 217 RunBannerTest(browser(), GetURLOfPageWithServiceWorkerAndManifest(
210 "/banners/manifest_no_type_caps.json"), 218 "/banners/manifest_no_type_caps.json"),
211 engagement_scores, SHOWING_WEB_APP_BANNER, true); 219 engagement_scores, SHOWING_WEB_APP_BANNER, true);
212 } 220 }
213 221
214 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, NoManifest) { 222 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, NoManifest) {
215 std::vector<double> engagement_scores{10}; 223 std::vector<double> engagement_scores{10};
216 RunBannerTest("/banners/no_manifest_test_page.html", engagement_scores, 224 RunBannerTest(browser(), "/banners/no_manifest_test_page.html",
217 NO_MANIFEST, false); 225 engagement_scores, NO_MANIFEST, false);
218 } 226 }
219 227
220 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, MissingManifest) { 228 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, MissingManifest) {
221 std::vector<double> engagement_scores{10}; 229 std::vector<double> engagement_scores{10};
222 RunBannerTest(GetURLOfPageWithServiceWorkerAndManifest( 230 RunBannerTest(browser(), GetURLOfPageWithServiceWorkerAndManifest(
223 "/banners/manifest_missing.json"), 231 "/banners/manifest_missing.json"),
224 engagement_scores, MANIFEST_EMPTY, false); 232 engagement_scores, MANIFEST_EMPTY, false);
225 } 233 }
226 234
227 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, CancelBannerDirect) { 235 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, CancelBannerDirect) {
228 std::vector<double> engagement_scores{10}; 236 std::vector<double> engagement_scores{10};
229 RunBannerTest("/banners/cancel_test_page.html", engagement_scores, 237 RunBannerTest(browser(), "/banners/cancel_test_page.html", engagement_scores,
230 RENDERER_CANCELLED, false); 238 RENDERER_CANCELLED, false);
231 } 239 }
232 240
233 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBanner) { 241 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBanner) {
234 std::vector<double> engagement_scores{0, 5, 10}; 242 std::vector<double> engagement_scores{0, 5, 10};
235 RunBannerTest("/banners/prompt_test_page.html", engagement_scores, 243 RunBannerTest(browser(), "/banners/prompt_test_page.html", engagement_scores,
236 SHOWING_WEB_APP_BANNER, true); 244 SHOWING_WEB_APP_BANNER, true);
237 } 245 }
238 246
239 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBannerInHandler) { 247 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBannerInHandler) {
240 std::vector<double> engagement_scores{0, 2, 5, 10}; 248 std::vector<double> engagement_scores{0, 2, 5, 10};
241 RunBannerTest("/banners/prompt_in_handler_test_page.html", engagement_scores, 249 RunBannerTest(browser(), "/banners/prompt_in_handler_test_page.html",
242 SHOWING_WEB_APP_BANNER, true); 250 engagement_scores, SHOWING_WEB_APP_BANNER, true);
243 } 251 }
244 252
245 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerInIFrame) { 253 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerInIFrame) {
246 std::vector<double> engagement_scores{10}; 254 std::vector<double> engagement_scores{10};
247 RunBannerTest("/banners/iframe_test_page.html", engagement_scores, 255 RunBannerTest(browser(), "/banners/iframe_test_page.html", engagement_scores,
248 NO_MANIFEST, false); 256 NO_MANIFEST, false);
249 } 257 }
250 258
259 IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, DoesNotShowInIncognito) {
260 std::vector<double> engagement_scores{10};
261 Browser* incognito_browser =
262 OpenURLOffTheRecord(browser()->profile(), GURL("about:blank"));
263 RunBannerTest(incognito_browser, "/banners/manifest_test_page.html",
264 engagement_scores, IN_INCOGNITO, false);
265 }
266
251 } // namespace banners 267 } // namespace banners
OLDNEW
« no previous file with comments | « chrome/browser/banners/app_banner_manager.cc ('k') | chrome/browser/banners/app_banner_metrics.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698