| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 67808f7c0bd71a187e3f060cf5b42505f2992423..f8c5afa3813259675d63cc3326165b50e68b20ef 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -2721,6 +2721,8 @@ void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
|
| // Start time is only set after request time.
|
| document_state->set_start_load_time(Time::Now());
|
|
|
| + NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>(
|
| + document_state->navigation_state());
|
| bool is_top_most = !frame->parent();
|
| if (is_top_most) {
|
| render_view_->set_navigation_gesture(
|
| @@ -2730,16 +2732,19 @@ void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
|
| // Subframe navigations that don't add session history items must be
|
| // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we
|
| // handle loading of error pages.
|
| - static_cast<NavigationStateImpl*>(document_state->navigation_state())
|
| - ->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME);
|
| + navigation_state->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME);
|
| }
|
|
|
| + base::TimeTicks navigation_start =
|
| + navigation_state->common_params().navigation_start;
|
| + DCHECK(!navigation_start.is_null());
|
| +
|
| FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
|
| DidStartProvisionalLoad(frame));
|
| FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad());
|
|
|
| - Send(new FrameHostMsg_DidStartProvisionalLoad(routing_id_,
|
| - ds->request().url()));
|
| + Send(new FrameHostMsg_DidStartProvisionalLoad(
|
| + routing_id_, ds->request().url(), navigation_start));
|
| }
|
|
|
| void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
|
| @@ -4350,8 +4355,8 @@ void RenderFrameImpl::OnFailedNavigation(
|
|
|
| // Inform the browser of the start of the provisional load. This is needed so
|
| // that the load is properly tracked by the WebNavigation API.
|
| - Send(
|
| - new FrameHostMsg_DidStartProvisionalLoad(routing_id_, common_params.url));
|
| + Send(new FrameHostMsg_DidStartProvisionalLoad(
|
| + routing_id_, common_params.url, common_params.navigation_start));
|
|
|
| // Send the provisional load failure.
|
| blink::WebURLError error =
|
| @@ -4685,6 +4690,14 @@ void RenderFrameImpl::NavigateInternal(
|
| pending_navigation_params_->common_params.navigation_start =
|
| base::TimeTicks();
|
|
|
| + // Unless the load is a WebFrameLoadType::Standard, this should remain
|
| + // uninitialized. It will be updated when the load type is determined to be
|
| + // Standard, or after the previous document's unload handler has been
|
| + // triggered. This occurs in UpdateNavigationState.
|
| + // TODO(csharrison) See if we can always use the browser timestamp.
|
| + pending_navigation_params_->common_params.navigation_start =
|
| + base::TimeTicks();
|
| +
|
| // Create parameters for a standard navigation.
|
| blink::WebFrameLoadType load_type = blink::WebFrameLoadType::Standard;
|
| bool should_load_request = false;
|
|
|