| Index: chrome/browser/previews/previews_infobar_delegate_unittest.cc
|
| diff --git a/chrome/browser/previews/previews_infobar_delegate_unittest.cc b/chrome/browser/previews/previews_infobar_delegate_unittest.cc
|
| index 107da1d9e9a50ab2046207a4a3e93e6cc09aefa6..a277854d81d618bc4ec82725523c99865bf61389 100644
|
| --- a/chrome/browser/previews/previews_infobar_delegate_unittest.cc
|
| +++ b/chrome/browser/previews/previews_infobar_delegate_unittest.cc
|
| @@ -13,6 +13,7 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "base/metrics/field_trial.h"
|
| #include "base/metrics/field_trial_params.h"
|
| +#include "base/metrics/metrics_hashes.h"
|
| #include "base/optional.h"
|
| #include "base/test/histogram_tester.h"
|
| #include "base/test/scoped_feature_list.h"
|
| @@ -23,6 +24,8 @@
|
| #include "chrome/browser/loader/chrome_navigation_data.h"
|
| #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"
|
| #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h"
|
| +#include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
|
| +#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
|
| #include "chrome/browser/previews/previews_infobar_tab_helper.h"
|
| #include "chrome/grit/generated_resources.h"
|
| #include "chrome/test/base/chrome_render_view_host_test_harness.h"
|
| @@ -42,6 +45,8 @@
|
| #include "components/previews/core/previews_experiments.h"
|
| #include "components/previews/core/previews_features.h"
|
| #include "components/proxy_config/proxy_config_pref_names.h"
|
| +#include "components/ukm/test_ukm_recorder.h"
|
| +#include "components/ukm/ukm_source.h"
|
| #include "components/variations/variations_associated_data.h"
|
| #include "content/public/browser/navigation_entry.h"
|
| #include "content/public/browser/navigation_handle.h"
|
| @@ -117,13 +122,14 @@ class TestPreviewsWebContentsObserver
|
|
|
| DEFINE_WEB_CONTENTS_USER_DATA_KEY(TestPreviewsWebContentsObserver);
|
|
|
| -class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness {
|
| +class PreviewsInfoBarDelegateUnitTest
|
| + : public page_load_metrics::PageLoadMetricsObserverTestHarness {
|
| protected:
|
| PreviewsInfoBarDelegateUnitTest()
|
| : field_trial_list_(new base::FieldTrialList(nullptr)) {}
|
|
|
| void SetUp() override {
|
| - ChromeRenderViewHostTestHarness::SetUp();
|
| + PageLoadMetricsObserverTestHarness::SetUp();
|
| InfoBarService::CreateForWebContents(web_contents());
|
| PreviewsInfoBarTabHelper::CreateForWebContents(web_contents());
|
| TestPreviewsWebContentsObserver::CreateForWebContents(web_contents());
|
| @@ -154,6 +160,8 @@ class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness {
|
| TestingBrowserProcess::GetGlobal()->SetLocalState(
|
| drp_test_context_->pref_service());
|
| network_time::NetworkTimeTracker::RegisterPrefs(registry);
|
| +
|
| + TestingBrowserProcess::GetGlobal()->SetUkmRecorder(&test_ukm_recorder_);
|
| }
|
|
|
| void TearDown() override {
|
| @@ -204,6 +212,65 @@ class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness {
|
| InfoBarService* infobar_service() {
|
| return InfoBarService::FromWebContents(web_contents());
|
| }
|
| + size_t ukm_source_count() { return test_ukm_recorder_.sources_count(); }
|
| +
|
| + size_t ukm_entry_count() { return test_ukm_recorder_.entries_count(); }
|
| +
|
| + const ukm::UkmSource* GetUkmSourceForUrl(const char* url) {
|
| + return test_ukm_recorder_.GetSourceForUrl(url);
|
| + }
|
| +
|
| + const ukm::mojom::UkmEntry* GetUkmEntry(size_t entry_index) {
|
| + return test_ukm_recorder_.GetEntry(entry_index);
|
| + }
|
| +
|
| + std::vector<const ukm::mojom::UkmEntry*> GetUkmEntriesForSourceID(
|
| + ukm::SourceId source_id) {
|
| + std::vector<const ukm::mojom::UkmEntry*> entries;
|
| + for (size_t i = 0; i < ukm_entry_count(); ++i) {
|
| + const ukm::mojom::UkmEntry* entry = GetUkmEntry(i);
|
| + if (entry->source_id == source_id)
|
| + entries.push_back(entry);
|
| + }
|
| + return entries;
|
| + }
|
| +
|
| + ukm::mojom::UkmEntryPtr GetMergedEntry(
|
| + const std::vector<const ukm::mojom::UkmEntry*>& entries) {
|
| + ukm::mojom::UkmEntryPtr merged_entry = ukm::mojom::UkmEntry::New();
|
| + for (const auto* entry : entries) {
|
| + if (merged_entry->event_hash) {
|
| + EXPECT_EQ(merged_entry->source_id, entry->source_id);
|
| + EXPECT_EQ(merged_entry->event_hash, entry->event_hash);
|
| + } else {
|
| + merged_entry->event_hash = entry->event_hash;
|
| + merged_entry->source_id = entry->source_id;
|
| + }
|
| + for (const auto& metric : entry->metrics) {
|
| + merged_entry->metrics.emplace_back(metric->Clone());
|
| + }
|
| + }
|
| + return merged_entry;
|
| + }
|
| +
|
| + ukm::mojom::UkmEntryPtr GetMergedEntryForSourceID(ukm::SourceId source_id) {
|
| + ukm::mojom::UkmEntryPtr entry =
|
| + GetMergedEntry(GetUkmEntriesForSourceID(source_id));
|
| + return entry;
|
| + }
|
| +
|
| + void ExpectOptOutUKM(bool expect, ukm::SourceId source_id) {
|
| + ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source_id);
|
| + const ukm::mojom::UkmMetric* metric =
|
| + ukm::TestUkmRecorder::FindMetric(entry.get(), "opt_out");
|
| + if (!expect) {
|
| + EXPECT_FALSE(metric);
|
| + } else {
|
| + EXPECT_EQ(entry->source_id, source_id);
|
| + EXPECT_TRUE(metric->value);
|
| + EXPECT_EQ(entry->event_hash, base::HashMetricName("Previews"));
|
| + }
|
| + }
|
|
|
| std::unique_ptr<data_reduction_proxy::DataReductionProxyTestContext>
|
| drp_test_context_;
|
| @@ -211,6 +278,8 @@ class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness {
|
| base::Optional<bool> user_opt_out_;
|
| std::unique_ptr<base::FieldTrialList> field_trial_list_;
|
| base::test::ScopedFeatureList scoped_feature_list_;
|
| +
|
| + ukm::TestUkmRecorder test_ukm_recorder_;
|
| };
|
|
|
| TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestNavigationDismissal) {
|
| @@ -261,6 +330,12 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestReloadDismissal) {
|
| ui::PAGE_TRANSITION_RELOAD, std::string());
|
| content::WebContentsTester::For(web_contents())->CommitPendingNavigation();
|
|
|
| + ukm::SourceId source_id =
|
| + page_load_metrics::MetricsWebContentsObserver::FromWebContents(
|
| + web_contents())
|
| + ->GetUKMSourceForCommittedLoad()
|
| + .value();
|
| +
|
| EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| EXPECT_FALSE(user_opt_out_.value());
|
|
|
| @@ -277,6 +352,8 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestReloadDismissal) {
|
| EXPECT_EQ(0u, data_reduction_proxy_settings->data_reduction_proxy_service()
|
| ->pingback_client()
|
| ->OptOutsSizeForTesting());
|
| +
|
| + ExpectOptOutUKM(false, source_id);
|
| }
|
|
|
| TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestUserDismissal) {
|
| @@ -336,6 +413,11 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLoFi) {
|
| // Call Reload and CommitPendingNavigation to force DidFinishNavigation.
|
| web_contents()->GetController().Reload(content::ReloadType::NORMAL, true);
|
| content::WebContentsTester::For(web_contents())->CommitPendingNavigation();
|
| + ukm::SourceId source_id =
|
| + page_load_metrics::MetricsWebContentsObserver::FromWebContents(
|
| + web_contents())
|
| + ->GetUKMSourceForCommittedLoad()
|
| + .value();
|
|
|
| ConfirmInfoBarDelegate* infobar =
|
| CreateInfoBar(previews::PreviewsType::LOFI, base::Time(),
|
| @@ -360,6 +442,11 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLoFi) {
|
| EXPECT_EQ(1u, data_reduction_proxy_settings->data_reduction_proxy_service()
|
| ->pingback_client()
|
| ->OptOutsSizeForTesting());
|
| + EXPECT_EQ(1u, data_reduction_proxy_settings->data_reduction_proxy_service()
|
| + ->pingback_client()
|
| + ->OptOutsSizeForTesting());
|
| +
|
| + ExpectOptOutUKM(true, source_id);
|
| }
|
| }
|
|
|
| @@ -367,6 +454,11 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLitePage) {
|
| base::HistogramTester tester;
|
|
|
| NavigateAndCommit(GURL(kTestUrl));
|
| + ukm::SourceId source_id =
|
| + page_load_metrics::MetricsWebContentsObserver::FromWebContents(
|
| + web_contents())
|
| + ->GetUKMSourceForCommittedLoad()
|
| + .value();
|
|
|
| ConfirmInfoBarDelegate* infobar =
|
| CreateInfoBar(previews::PreviewsType::LITE_PAGE, base::Time(),
|
| @@ -394,6 +486,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLitePage) {
|
| EXPECT_EQ(1u, data_reduction_proxy_settings->data_reduction_proxy_service()
|
| ->pingback_client()
|
| ->OptOutsSizeForTesting());
|
| + ExpectOptOutUKM(true, source_id);
|
| }
|
|
|
| TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestShownOncePerNavigation) {
|
| @@ -529,6 +622,11 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, OfflineInfobarDisablesLoFi) {
|
| ->set_should_have_page_id(false);
|
|
|
| NavigateAndCommit(GURL(kTestUrl));
|
| + ukm::SourceId source_id =
|
| + page_load_metrics::MetricsWebContentsObserver::FromWebContents(
|
| + web_contents())
|
| + ->GetUKMSourceForCommittedLoad()
|
| + .value();
|
|
|
| ConfirmInfoBarDelegate* infobar =
|
| CreateInfoBar(previews::PreviewsType::OFFLINE, base::Time(),
|
| @@ -555,6 +653,8 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, OfflineInfobarDisablesLoFi) {
|
| EXPECT_EQ(0u, data_reduction_proxy_settings->data_reduction_proxy_service()
|
| ->pingback_client()
|
| ->OptOutsSizeForTesting());
|
| +
|
| + ExpectOptOutUKM(false, source_id);
|
| }
|
|
|
| TEST_F(PreviewsInfoBarDelegateUnitTest, PingbackClientClearedTabClosed) {
|
|
|