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

Unified Diff: chrome/browser/previews/previews_infobar_delegate_unittest.cc

Issue 2952343004: Adding previews information to PLM UKM (Closed)
Patch Set: stop observing on background Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698