Chromium Code Reviews| 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. |
|
Charlie Harrison
2017/03/09 16:21:29
Can we ensure this in unit tests?
Bryan McQuade
2017/03/09 17:36:32
good idea, done
|
| + 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 |