| Index: chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
|
| diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
|
| index 006eda7b705f3eafe5aa4a37ca654a8c37077421..9465960608042e8f7c87b45e99c3fc4fd1cf7008 100644
|
| --- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
|
| +++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
|
| @@ -38,7 +38,9 @@ MetricsRenderFrameObserver::MetricsRenderFrameObserver(
|
| MetricsRenderFrameObserver::~MetricsRenderFrameObserver() {}
|
|
|
| void MetricsRenderFrameObserver::DidChangePerformanceTiming() {
|
| - SendMetrics();
|
| + // Only track timing metrics for main frames.
|
| + if (IsMainFrame())
|
| + SendMetrics();
|
| }
|
|
|
| void MetricsRenderFrameObserver::DidObserveLoadingBehavior(
|
| @@ -47,6 +49,10 @@ void MetricsRenderFrameObserver::DidObserveLoadingBehavior(
|
| page_timing_metrics_sender_->DidObserveLoadingBehavior(behavior);
|
| }
|
|
|
| +void MetricsRenderFrameObserver::FrameDetached() {
|
| + page_timing_metrics_sender_.reset();
|
| +}
|
| +
|
| void MetricsRenderFrameObserver::DidCommitProvisionalLoad(
|
| bool is_new_navigation,
|
| bool is_same_page_navigation) {
|
| @@ -66,8 +72,12 @@ void MetricsRenderFrameObserver::DidCommitProvisionalLoad(
|
| // non-null, we will send metrics for the current page at some later time, as
|
| // those metrics become available.
|
| if (ShouldSendMetrics()) {
|
| - PageLoadTiming timing(GetTiming());
|
| - DCHECK(!timing.navigation_start.is_null());
|
| + PageLoadTiming timing;
|
| + if (IsMainFrame()) {
|
| + // Only populate PageLoadTiming for the main frame.
|
| + timing = GetTiming();
|
| + DCHECK(!timing.navigation_start.is_null());
|
| + }
|
| page_timing_metrics_sender_.reset(
|
| new PageTimingMetricsSender(this, routing_id(), CreateTimer(), timing));
|
| }
|
| @@ -86,10 +96,6 @@ bool MetricsRenderFrameObserver::ShouldSendMetrics() const {
|
| if (HasNoRenderFrame())
|
| return false;
|
| const blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
|
| - // We only track metrics for main frames.
|
| - if (frame->parent())
|
| - return false;
|
| -
|
| const blink::WebDocument& document = frame->document();
|
| return RendererPageTrackDecider(&document, frame->dataSource()).ShouldTrack();
|
| }
|
| @@ -171,4 +177,8 @@ void MetricsRenderFrameObserver::OnDestruct() {
|
| delete this;
|
| }
|
|
|
| +bool MetricsRenderFrameObserver::IsMainFrame() const {
|
| + return render_frame()->IsMainFrame();
|
| +}
|
| +
|
| } // namespace page_load_metrics
|
|
|