| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 4167222969def20c760b86eb6e739add6fd9986a..09c5e0d42a29debcf7b7e7064c6d52c68fe1660b 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -565,11 +565,8 @@ WebURLRequest CreateURLRequestForNavigation(
|
| // clamping it to renderer_navigation_start, initialized earlier in the call
|
| // stack.
|
| base::TimeTicks SanitizeNavigationTiming(
|
| - blink::WebFrameLoadType load_type,
|
| const base::TimeTicks& browser_navigation_start,
|
| const base::TimeTicks& renderer_navigation_start) {
|
| - if (load_type != blink::WebFrameLoadType::Standard)
|
| - return base::TimeTicks();
|
| DCHECK(!browser_navigation_start.is_null());
|
| base::TimeTicks navigation_start =
|
| std::min(browser_navigation_start, renderer_navigation_start);
|
| @@ -3670,6 +3667,21 @@ void RenderFrameImpl::didHandleOnloadEvents(blink::WebLocalFrame* frame) {
|
| }
|
| }
|
|
|
| +void RenderFrameImpl::didHandleOnBeforeUnloadEvent(bool eventListenerCalled) {
|
| + // If there are pending navigation params, then the beforeunload event was
|
| + // caused by a same-process browser-initiated navigation, and the
|
| + // navigation_start was recorded before dispatching beforeunload, which means
|
| + // it should not be used, and the right timestamp is |Now|.
|
| + // If this is the first navigation in the frame, and the initial document did
|
| + // not have a beforeunload handler, then it is likely a cross-process
|
| + // navigation, and the browser timestamp is the right one.
|
| + if (pending_navigation_params_ &&
|
| + (eventListenerCalled || !current_history_item_.isNull())) {
|
| + pending_navigation_params_->common_params.navigation_start =
|
| + base::TimeTicks::Now();
|
| + }
|
| +}
|
| +
|
| void RenderFrameImpl::didFailLoad(blink::WebLocalFrame* frame,
|
| const blink::WebURLError& error,
|
| blink::WebHistoryCommitType commit_type) {
|
| @@ -5468,13 +5480,11 @@ void RenderFrameImpl::NavigateInternal(
|
| pending_navigation_params_.reset(
|
| new NavigationParams(common_params, start_params, request_params));
|
|
|
| - // 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.
|
| + // Sanitize navigation start and store in |pending_navigation_params_|.
|
| + // It will be picked up in UpdateNavigationState.
|
| pending_navigation_params_->common_params.navigation_start =
|
| - base::TimeTicks();
|
| + SanitizeNavigationTiming(common_params.navigation_start,
|
| + renderer_navigation_start);
|
|
|
| // Create parameters for a standard navigation, indicating whether it should
|
| // replace the current NavigationEntry.
|
| @@ -5598,11 +5608,6 @@ void RenderFrameImpl::NavigateInternal(
|
| }
|
|
|
| if (should_load_request) {
|
| - // Sanitize navigation start now that we know the load_type.
|
| - pending_navigation_params_->common_params.navigation_start =
|
| - SanitizeNavigationTiming(load_type, common_params.navigation_start,
|
| - renderer_navigation_start);
|
| -
|
| // PlzNavigate: check if the navigation being committed originated as a
|
| // client redirect.
|
| bool is_client_redirect =
|
| @@ -6041,12 +6046,7 @@ void RenderFrameImpl::UpdateNavigationState(DocumentState* document_state,
|
| return;
|
| }
|
|
|
| - // If this is a browser-initiated load that doesn't override
|
| - // navigation_start, set it here.
|
| - if (pending_navigation_params_->common_params.navigation_start.is_null()) {
|
| - pending_navigation_params_->common_params.navigation_start =
|
| - base::TimeTicks::Now();
|
| - }
|
| + DCHECK(!pending_navigation_params_->common_params.navigation_start.is_null());
|
| document_state->set_navigation_state(CreateNavigationStateFromPending());
|
|
|
| // The |set_was_load_data_with_base_url_request| state should not change for
|
|
|