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) { |