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; |