Index: chrome/browser/page_load_metrics/page_load_tracker.cc |
diff --git a/chrome/browser/page_load_metrics/page_load_tracker.cc b/chrome/browser/page_load_metrics/page_load_tracker.cc |
index f6d8e104267d9e300da4da1dadab01eac9151889..bdd1dab2910077179b18f3b61e052e64a13388e1 100644 |
--- a/chrome/browser/page_load_metrics/page_load_tracker.cc |
+++ b/chrome/browser/page_load_metrics/page_load_tracker.cc |
@@ -303,6 +303,7 @@ PageLoadTracker::PageLoadTracker( |
started_in_foreground_(in_foreground), |
page_transition_(navigation_handle->GetPageTransition()), |
user_initiated_info_(user_initiated_info), |
+ child_loading_behavior_flags_(0), |
aborted_chain_size_(aborted_chain_size), |
aborted_chain_size_same_url_(aborted_chain_size_same_url), |
embedder_interface_(embedder_interface) { |
@@ -506,6 +507,21 @@ void PageLoadTracker::NotifyClientRedirectTo( |
} |
} |
+void PageLoadTracker::UpdateChildMetadata( |
+ const PageLoadMetadata& child_metadata) { |
+ // Merge the child loading behavior flags with any we've already observed, |
+ // possibly from other child frames. |
+ const int last_child_loading_behavior_flags = child_loading_behavior_flags_; |
+ child_loading_behavior_flags_ |= child_metadata.behavior_flags; |
+ if (last_child_loading_behavior_flags == child_loading_behavior_flags_) |
+ return; |
+ |
+ PageLoadExtraInfo extra_info(ComputePageLoadExtraInfo()); |
+ for (const auto& observer : observers_) { |
+ observer->OnLoadingBehaviorObserved(extra_info); |
+ } |
+} |
+ |
bool PageLoadTracker::UpdateTiming(const PageLoadTiming& new_timing, |
const PageLoadMetadata& new_metadata) { |
// Throw away IPCs that are not relevant to the current navigation. |
@@ -615,11 +631,11 @@ PageLoadExtraInfo PageLoadTracker::ComputePageLoadExtraInfo() { |
(!page_end_user_initiated_info_.browser_initiated && |
!page_end_user_initiated_info_.user_gesture && |
!page_end_user_initiated_info_.user_input_event)); |
- return PageLoadExtraInfo(navigation_start_, first_background_time, |
- first_foreground_time, started_in_foreground_, |
- user_initiated_info_, url(), start_url_, did_commit_, |
- page_end_reason_, page_end_user_initiated_info_, |
- page_end_time, metadata_); |
+ return PageLoadExtraInfo( |
+ navigation_start_, first_background_time, first_foreground_time, |
+ started_in_foreground_, user_initiated_info_, url(), start_url_, |
+ did_commit_, page_end_reason_, page_end_user_initiated_info_, |
+ page_end_time, metadata_, child_loading_behavior_flags_); |
} |
bool PageLoadTracker::HasMatchingNavigationRequestID( |