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

Unified Diff: chrome/browser/page_load_metrics/page_load_tracker.cc

Issue 2737563007: Add support for tracking loading behavior of child frames. (Closed)
Patch Set: stop observing if started in background Created 3 years, 9 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/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..aff76c3883f8488d590aed1e93dcc77e4bc6a0c1 100644
--- a/chrome/browser/page_load_metrics/page_load_tracker.cc
+++ b/chrome/browser/page_load_metrics/page_load_tracker.cc
@@ -255,7 +255,8 @@ void DispatchObserverTimingCallbacks(PageLoadMetricsObserver* observer,
const PageLoadTiming& new_timing,
const PageLoadMetadata& last_metadata,
const PageLoadExtraInfo& extra_info) {
- if (extra_info.metadata.behavior_flags != last_metadata.behavior_flags)
+ if (extra_info.main_frame_metadata.behavior_flags !=
+ last_metadata.behavior_flags)
observer->OnLoadingBehaviorObserved(extra_info);
if (last_timing != new_timing)
observer->OnTimingUpdate(new_timing, extra_info);
@@ -506,6 +507,22 @@ void PageLoadTracker::NotifyClientRedirectTo(
}
}
+void PageLoadTracker::UpdateChildFrameMetadata(
+ 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_frame_metadata_.behavior_flags;
+ child_frame_metadata_.behavior_flags |= child_metadata.behavior_flags;
+ if (last_child_loading_behavior_flags == child_frame_metadata_.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.
@@ -517,22 +534,23 @@ bool PageLoadTracker::UpdateTiming(const PageLoadTiming& new_timing,
timing_.navigation_start == new_timing.navigation_start;
// 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;
+ (main_frame_metadata_.behavior_flags & new_metadata.behavior_flags) ==
+ main_frame_metadata_.behavior_flags;
if (IsValidPageLoadTiming(new_timing) && valid_timing_descendent &&
valid_behavior_descendent) {
DCHECK(did_commit_); // OnCommit() must be called first.
// There are some subtle ordering constraints here. GetPageLoadMetricsInfo()
// must be called before DispatchObserverTimingCallbacks, but its
- // implementation depends on the state of metadata_, so we need to update
- // metadata_ before calling GetPageLoadMetricsInfo. Thus, we make a copy of
- // timing here, update timing_ and metadata_, and then proceed to dispatch
- // the observer timing callbacks.
+ // implementation depends on the state of main_frame_metadata_, so we need
+ // to update main_frame_metadata_ before calling GetPageLoadMetricsInfo.
+ // Thus, we make a copy of timing here, update timing_ and
+ // main_frame_metadata_, and then proceed to dispatch the observer timing
+ // callbacks.
const PageLoadTiming last_timing = timing_;
timing_ = new_timing;
- const PageLoadMetadata last_metadata = metadata_;
- metadata_ = new_metadata;
+ const PageLoadMetadata last_metadata = main_frame_metadata_;
+ main_frame_metadata_ = new_metadata;
const PageLoadExtraInfo info = ComputePageLoadExtraInfo();
for (const auto& observer : observers_) {
DispatchObserverTimingCallbacks(observer.get(), last_timing, new_timing,
@@ -615,11 +633,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, main_frame_metadata_, child_frame_metadata_);
}
bool PageLoadTracker::HasMatchingNavigationRequestID(

Powered by Google App Engine
This is Rietveld 408576698