Chromium Code Reviews| Index: chrome/browser/banners/app_banner_manager_browsertest.cc |
| diff --git a/chrome/browser/banners/app_banner_manager_browsertest.cc b/chrome/browser/banners/app_banner_manager_browsertest.cc |
| index c4a174a8801dc04c8639af6386e00a875bc885be..616d4a4d4f832b90181fa4c6a478ee0696e2ccb4 100644 |
| --- a/chrome/browser/banners/app_banner_manager_browsertest.cc |
| +++ b/chrome/browser/banners/app_banner_manager_browsertest.cc |
| @@ -31,7 +31,7 @@ class AppBannerManagerTest : public AppBannerManager { |
| public: |
| explicit AppBannerManagerTest(content::WebContents* web_contents) |
| : AppBannerManager(web_contents) {} |
| - ~AppBannerManagerTest() override {} |
| + ~AppBannerManagerTest() override { } |
|
benwells
2016/08/11 04:47:34
Nit: leave as {}
dominickn
2016/08/11 07:00:19
Done.
|
| bool will_show() { return will_show_.get() && *will_show_; } |
| @@ -60,6 +60,9 @@ class AppBannerManagerTest : public AppBannerManager { |
| } |
| void ShowBanner() override { |
| + // Fake the call to TrackInstallableErrorCode here - this is usually called |
| + // in platform-specific code which is not exposed here. |
| + TrackInstallableErrorCode(SHOWING_WEB_APP_BANNER); |
| ASSERT_FALSE(will_show_.get()); |
| will_show_.reset(new bool(true)); |
| base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure_); |
| @@ -101,7 +104,6 @@ class AppBannerManagerBrowserTest : public InProcessBrowserTest { |
| base::RunLoop& run_loop, |
| ui::PageTransition transition, |
| bool expected_to_show) { |
| - base::HistogramTester histograms; |
| manager->set_page_transition_(transition); |
| manager->RequestAppBanner(url, false, run_loop.QuitClosure()); |
| run_loop.Run(); |
| @@ -110,14 +112,15 @@ class AppBannerManagerBrowserTest : public InProcessBrowserTest { |
| ASSERT_FALSE(manager->is_active()); |
| // If showing the banner, ensure that the minutes histogram is recorded. |
| - histograms.ExpectTotalCount(banners::kMinutesHistogram, |
| + histograms_.ExpectTotalCount(banners::kMinutesHistogram, |
| (manager->will_show() ? 1 : 0)); |
| } |
| void RunBannerTest(const std::string& url, |
| ui::PageTransition transition, |
| unsigned int unshown_repetitions, |
| - bool expectation) { |
| + InstallableErrorCode expected_code_for_histogram, |
| + bool expected_to_show) { |
| std::string valid_page(url); |
| GURL test_url = embedded_test_server()->GetURL(valid_page); |
| content::WebContents* web_contents = |
| @@ -130,6 +133,7 @@ class AppBannerManagerBrowserTest : public InProcessBrowserTest { |
| base::RunLoop run_loop; |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| run_loop, transition, false); |
| + CheckInstallableErrorCodeHistogram(INSUFFICIENT_ENGAGEMENT, i+1, i+1); |
|
gone
2016/08/10 21:02:51
Should be consistent about the i+1 vs i + 1 below.
dominickn
2016/08/11 07:00:19
Done.
|
| AppBannerManager::SetTimeDeltaForTesting(i + 1); |
| } |
| @@ -137,40 +141,55 @@ class AppBannerManagerBrowserTest : public InProcessBrowserTest { |
| ui_test_utils::NavigateToURL(browser(), test_url); |
| base::RunLoop run_loop; |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| - run_loop, transition, expectation); |
| + run_loop, transition, expected_to_show); |
| + // Navigate to ensure the InstallableErrorCodeHistogram is logged. |
| + ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); |
| + CheckInstallableErrorCodeHistogram(expected_code_for_histogram, 1, |
| + unshown_repetitions + 1); |
| } |
| + |
| + void CheckInstallableErrorCodeHistogram(InstallableErrorCode expected_code, |
| + int expected_count, int total_count) { |
| + histograms_.ExpectBucketCount(banners::kInstallableErrorCodeHistogram, |
| + expected_code, expected_count); |
| + histograms_.ExpectTotalCount(banners::kInstallableErrorCodeHistogram, |
| + total_count); |
| + } |
| + |
| + private: |
| + base::HistogramTester histograms_; |
| }; |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerCreatedDirect) { |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_TYPED, |
| - 1, true); |
| + 1, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedDirectLargerTotal) { |
| AppBannerSettingsHelper::SetTotalEngagementToTrigger(4); |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_TYPED, |
| - 3, true); |
| + 3, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedDirectSmallerTotal) { |
| AppBannerSettingsHelper::SetTotalEngagementToTrigger(1); |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_TYPED, |
| - 0, true); |
| + 0, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedDirectSingle) { |
| AppBannerSettingsHelper::SetEngagementWeights(2, 1); |
| RunBannerTest("/banners/manifest_test_page.html", |
| - ui::PAGE_TRANSITION_GENERATED, 0, true); |
| + ui::PAGE_TRANSITION_GENERATED, 0, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedDirectMultiple) { |
| AppBannerSettingsHelper::SetEngagementWeights(0.5, 1); |
| RunBannerTest("/banners/manifest_test_page.html", |
| - ui::PAGE_TRANSITION_GENERATED, 3, true); |
| + ui::PAGE_TRANSITION_GENERATED, 3, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| @@ -178,7 +197,7 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| AppBannerSettingsHelper::SetEngagementWeights(0.5, 1); |
| AppBannerSettingsHelper::SetTotalEngagementToTrigger(3); |
| RunBannerTest("/banners/manifest_test_page.html", |
| - ui::PAGE_TRANSITION_GENERATED, 5, true); |
| + ui::PAGE_TRANSITION_GENERATED, 5, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| @@ -186,41 +205,41 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| AppBannerSettingsHelper::SetEngagementWeights(0.5, 1); |
| AppBannerSettingsHelper::SetTotalEngagementToTrigger(1); |
| RunBannerTest("/banners/manifest_test_page.html", |
| - ui::PAGE_TRANSITION_GENERATED, 1, true); |
| + ui::PAGE_TRANSITION_GENERATED, 1, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedIndirect) { |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_LINK, 1, |
| - true); |
| + SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedIndirectLargerTotal) { |
| AppBannerSettingsHelper::SetTotalEngagementToTrigger(5); |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_LINK, 4, |
| - true); |
| + SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedIndirectSmallerTotal) { |
| AppBannerSettingsHelper::SetTotalEngagementToTrigger(1); |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_LINK, 0, |
| - true); |
| + SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedIndirectSingle) { |
| AppBannerSettingsHelper::SetEngagementWeights(1, 3); |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_RELOAD, |
| - 0, true); |
| + 0, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerCreatedIndirectMultiple) { |
| AppBannerSettingsHelper::SetEngagementWeights(1, 0.5); |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_LINK, 3, |
| - true); |
| + SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| @@ -228,7 +247,7 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| AppBannerSettingsHelper::SetEngagementWeights(1, 0.5); |
| AppBannerSettingsHelper::SetTotalEngagementToTrigger(4); |
| RunBannerTest("/banners/manifest_test_page.html", ui::PAGE_TRANSITION_LINK, 7, |
| - true); |
| + SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| @@ -249,6 +268,7 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| ui_test_utils::NavigateToURL(browser(), test_url); |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| run_loop, ui::PAGE_TRANSITION_TYPED, false); |
| + CheckInstallableErrorCodeHistogram(INSUFFICIENT_ENGAGEMENT, 1, 1); |
| } |
| // Add an indirect nav on day 1 which is ignored. |
| @@ -257,6 +277,7 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| ui_test_utils::NavigateToURL(browser(), test_url); |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| run_loop, ui::PAGE_TRANSITION_LINK, false); |
| + CheckInstallableErrorCodeHistogram(INSUFFICIENT_ENGAGEMENT, 2, 2); |
| AppBannerManager::SetTimeDeltaForTesting(1); |
| } |
| @@ -266,6 +287,7 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| ui_test_utils::NavigateToURL(browser(), test_url); |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| run_loop, ui::PAGE_TRANSITION_MANUAL_SUBFRAME, false); |
| + CheckInstallableErrorCodeHistogram(INSUFFICIENT_ENGAGEMENT, 3, 3); |
| } |
| // Add a direct nav on day 2 which overrides. |
| @@ -274,6 +296,7 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| ui_test_utils::NavigateToURL(browser(), test_url); |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| run_loop, ui::PAGE_TRANSITION_GENERATED, false); |
| + CheckInstallableErrorCodeHistogram(INSUFFICIENT_ENGAGEMENT, 4, 4); |
| AppBannerManager::SetTimeDeltaForTesting(2); |
| } |
| @@ -283,6 +306,7 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| ui_test_utils::NavigateToURL(browser(), test_url); |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| run_loop, ui::PAGE_TRANSITION_GENERATED, false); |
| + CheckInstallableErrorCodeHistogram(INSUFFICIENT_ENGAGEMENT, 5, 5); |
| AppBannerManager::SetTimeDeltaForTesting(3); |
| } |
| @@ -292,62 +316,65 @@ IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| ui_test_utils::NavigateToURL(browser(), test_url); |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| run_loop, ui::PAGE_TRANSITION_FORM_SUBMIT, false); |
| + CheckInstallableErrorCodeHistogram(INSUFFICIENT_ENGAGEMENT, 6, 6); |
| } |
| + |
| // Add a direct nav on day 4 which should trigger the banner. |
| { |
| base::RunLoop run_loop; |
| ui_test_utils::NavigateToURL(browser(), test_url); |
| RequestAppBanner(manager.get(), web_contents->GetLastCommittedURL(), |
| run_loop, ui::PAGE_TRANSITION_TYPED, true); |
| + CheckInstallableErrorCodeHistogram(SHOWING_WEB_APP_BANNER, 1, 7); |
| } |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerNoTypeInManifest) { |
| RunBannerTest("/banners/manifest_no_type_test_page.html", |
| - ui::PAGE_TRANSITION_TYPED, 1, true); |
| + ui::PAGE_TRANSITION_TYPED, 1, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, |
| WebAppBannerNoTypeInManifestCapsExtension) { |
| RunBannerTest("/banners/manifest_no_type_caps_test_page.html", |
| - ui::PAGE_TRANSITION_TYPED, 1, true); |
| + ui::PAGE_TRANSITION_TYPED, 1, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, NoManifest) { |
| RunBannerTest("/banners/no_manifest_test_page.html", |
| - ui::PAGE_TRANSITION_TYPED, 1, false); |
| + ui::PAGE_TRANSITION_TYPED, 0, NO_MANIFEST, false); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, MissingManifest) { |
| - RunBannerTest("/banners/manifest_bad_link.html", ui::PAGE_TRANSITION_TYPED, 1, |
| - false); |
| + RunBannerTest("/banners/manifest_bad_link.html", ui::PAGE_TRANSITION_TYPED, 0, |
| + MANIFEST_EMPTY, false); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, CancelBannerDirect) { |
| RunBannerTest("/banners/cancel_test_page.html", ui::PAGE_TRANSITION_TYPED, 1, |
| - false); |
| + RENDERER_CANCELLED, false); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, CancelBannerIndirect) { |
| AppBannerSettingsHelper::SetEngagementWeights(1, 0.5); |
| - RunBannerTest("/banners/cancel_test_page.html", ui::PAGE_TRANSITION_TYPED, 3, |
| - false); |
| + RunBannerTest("/banners/cancel_test_page.html", ui::PAGE_TRANSITION_LINK, 3, |
| + RENDERER_CANCELLED, false); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBanner) { |
| RunBannerTest("/banners/prompt_test_page.html", ui::PAGE_TRANSITION_TYPED, 1, |
| - true); |
| + SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, PromptBannerInHandler) { |
| RunBannerTest("/banners/prompt_in_handler_test_page.html", |
| - ui::PAGE_TRANSITION_TYPED, 1, true); |
| + ui::PAGE_TRANSITION_TYPED, 1, SHOWING_WEB_APP_BANNER, true); |
| } |
| IN_PROC_BROWSER_TEST_F(AppBannerManagerBrowserTest, WebAppBannerInIFrame) { |
| - RunBannerTest("/banners/iframe_test_page.html", ui::PAGE_TRANSITION_TYPED, 1, |
| - false); |
| + RunBannerTest("/banners/iframe_test_page.html", ui::PAGE_TRANSITION_TYPED, 0, |
| + NO_MANIFEST, false); |
| } |
| } // namespace banners |