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

Unified Diff: components/page_load_metrics/browser/metrics_web_contents_observer.cc

Issue 1857443002: Plumb experiment flags through page_load_metrics and add a new observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@page_load_experiments
Patch Set: remove todo and fix up a test script Created 4 years, 8 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: components/page_load_metrics/browser/metrics_web_contents_observer.cc
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
index 7b411cc1ba264e2b17abd428b475a8a145a236f6..e1cc10d9451f1870f0929bd2c4c9f3ab61b24851 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -333,7 +333,8 @@ void PageLoadTracker::Redirect(content::NavigationHandle* navigation_handle) {
}
}
-bool PageLoadTracker::UpdateTiming(const PageLoadTiming& new_timing) {
+bool PageLoadTracker::UpdateTiming(const PageLoadTiming& new_timing,
+ const PageLoadMetadata& new_metadata) {
// Throw away IPCs that are not relevant to the current navigation.
// Two timing structures cannot refer to the same navigation if they indicate
// that a navigation started at different times, so a new timing struct with a
@@ -341,8 +342,14 @@ bool PageLoadTracker::UpdateTiming(const PageLoadTiming& new_timing) {
bool valid_timing_descendent =
timing_.navigation_start.is_null() ||
timing_.navigation_start == new_timing.navigation_start;
- if (IsValidPageLoadTiming(new_timing) && valid_timing_descendent) {
+ // Ensure flags sent previously are still present in the new metadata fields.
+ bool valid_behavior_descendent =
+ (metadata_.behavior_flags & new_metadata.behavior_flags) ==
+ metadata_.behavior_flags;
+ if (IsValidPageLoadTiming(new_timing) && valid_timing_descendent &&
+ valid_behavior_descendent) {
timing_ = new_timing;
+ metadata_ = new_metadata;
return true;
}
return false;
@@ -383,10 +390,10 @@ PageLoadExtraInfo PageLoadTracker::GetPageLoadMetricsInfo() {
} else {
DCHECK(commit_time_.is_null());
}
- return PageLoadExtraInfo(first_background_time, first_foreground_time,
- started_in_foreground_,
- commit_time_.is_null() ? GURL() : url_,
- time_to_commit, abort_type_, time_to_abort);
+ return PageLoadExtraInfo(
+ first_background_time, first_foreground_time, started_in_foreground_,
+ commit_time_.is_null() ? GURL() : url_, time_to_commit, abort_type_,
+ time_to_abort, metadata_);
}
void PageLoadTracker::NotifyAbort(UserAbortType abort_type,
@@ -688,7 +695,8 @@ MetricsWebContentsObserver::NotifyAbortedProvisionalLoadsNewNavigation(
void MetricsWebContentsObserver::OnTimingUpdated(
content::RenderFrameHost* render_frame_host,
- const PageLoadTiming& timing) {
+ const PageLoadTiming& timing,
+ const PageLoadMetadata& metadata) {
bool error = false;
if (!committed_load_ || !committed_load_->renderer_tracked()) {
RecordInternalError(ERR_IPC_WITH_NO_RELEVANT_LOAD);
@@ -713,7 +721,7 @@ void MetricsWebContentsObserver::OnTimingUpdated(
if (error)
return;
- if (!committed_load_->UpdateTiming(timing)) {
+ if (!committed_load_->UpdateTiming(timing, metadata)) {
// If the page load tracker cannot update its timing, something is wrong
// with the IPC (it's from another load, or it's invalid in some other way).
// We expect this to be a rare occurrence.

Powered by Google App Engine
This is Rietveld 408576698