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

Unified Diff: chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc

Issue 2924673004: Add UKM metric tracking for various page load metric observers. (Closed)
Patch Set: update Created 3 years, 5 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/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
index e83ed8cef2503a2c2476f4565f5a02fe64877c33..db7ec7303d7eae517ff5c66635ba55b95b8ed4e0 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
@@ -9,8 +9,11 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
+#include "base/metrics/metrics_hashes.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
+#include "chrome/common/page_load_metrics/page_load_metrics_messages.h"
+#include "chrome/test/base/testing_browser_process.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
@@ -58,6 +61,7 @@ PageLoadMetricsObserverTestHarness::~PageLoadMetricsObserverTestHarness() {}
void PageLoadMetricsObserverTestHarness::SetUp() {
ChromeRenderViewHostTestHarness::SetUp();
+ ukm_tester_.SetUp();
SetContents(CreateTestWebContents());
NavigateAndCommit(GURL("http://www.google.com"));
observer_ = MetricsWebContentsObserver::CreateForWebContents(
@@ -146,6 +150,109 @@ void PageLoadMetricsObserverTestHarness::NavigateWithPageTransitionAndCommit(
content::WebContentsTester::For(web_contents())->CommitPendingNavigation();
}
+void PageLoadMetricsObserverTestHarness::UkmTester::SetUp() {
+ TestingBrowserProcess::GetGlobal()->SetUkmRecorder(&test_ukm_recorder_);
+}
+
+const ukm::UkmSource*
+PageLoadMetricsObserverTestHarness::UkmTester::GetSourceForUrl(
+ const char* url) const {
+ std::vector<const ukm::UkmSource*> matching_sources = GetSourcesForUrl(url);
+ EXPECT_LE(1ul, matching_sources.size());
+ return matching_sources.empty() ? nullptr : matching_sources.back();
+}
+
+std::vector<const ukm::UkmSource*>
+PageLoadMetricsObserverTestHarness::UkmTester::GetSourcesForUrl(
+ const char* url) const {
+ std::vector<const ukm::UkmSource*> matching_sources;
+ for (const auto& candidate : test_ukm_recorder_.GetSources()) {
+ if (candidate.second->url() == url)
+ matching_sources.push_back(candidate.second.get());
+ }
+ return matching_sources;
+}
+
+std::vector<const ukm::mojom::UkmEntry*>
+PageLoadMetricsObserverTestHarness::UkmTester::GetEntriesForSourceID(
+ ukm::SourceId source_id,
+ const char* event) const {
+ std::vector<const ukm::mojom::UkmEntry*> entries;
+ for (size_t i = 0; i < entries_count(); ++i) {
+ const ukm::mojom::UkmEntry* entry = test_ukm_recorder_.GetEntry(i);
+ if (entry->source_id == source_id &&
+ entry->event_hash == base::HashMetricName(event)) {
+ entries.push_back(entry);
+ }
+ }
+ return entries;
+}
+
+// static
+ukm::mojom::UkmEntryPtr
+PageLoadMetricsObserverTestHarness::UkmTester::GetMergedEntry(
+ const std::vector<const ukm::mojom::UkmEntry*>& entries) {
+ EXPECT_FALSE(entries.empty());
+ 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
+PageLoadMetricsObserverTestHarness::UkmTester::GetMergedEntryForSourceID(
+ ukm::SourceId source_id,
+ const char* event) const {
+ ukm::mojom::UkmEntryPtr entry =
+ GetMergedEntry(GetEntriesForSourceID(source_id, event));
+ EXPECT_EQ(source_id, entry->source_id);
+ EXPECT_EQ(base::HashMetricName(event), entry->event_hash);
+ return entry;
+}
+
+bool PageLoadMetricsObserverTestHarness::UkmTester::HasEntry(
+ const ukm::UkmSource& source,
+ const char* event) const {
+ return !GetEntriesForSourceID(source.id(), event).empty();
+}
+
+int PageLoadMetricsObserverTestHarness::UkmTester::CountMetrics(
+ const ukm::UkmSource& source,
+ const char* event) const {
+ ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source.id(), event);
+ return entry.get() ? entry->metrics.size() : 0;
+}
+
+bool PageLoadMetricsObserverTestHarness::UkmTester::HasMetric(
+ const ukm::UkmSource& source,
+ const char* event,
+ const char* name) const {
+ ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source.id(), event);
+ return ukm::TestUkmRecorder::FindMetric(entry.get(), name) != nullptr;
+}
+
+void PageLoadMetricsObserverTestHarness::UkmTester::ExpectMetric(
+ const ukm::UkmSource& source,
+ const char* event,
+ const char* name,
+ int64_t expected_value) const {
+ ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source.id(), event);
+ const ukm::mojom::UkmMetric* metric =
+ ukm::TestUkmRecorder::FindMetric(entry.get(), name);
+ EXPECT_NE(nullptr, metric) << "Failed to find metric: " << name;
+ EXPECT_EQ(expected_value, metric->value);
+}
+
const char PageLoadMetricsObserverTestHarness::kResourceUrl[] =
"https://www.example.com/resource";

Powered by Google App Engine
This is Rietveld 408576698