Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 1427633004: Send navigation_start to the browser in DidStartProvisionalLoad IPC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@navigation_start_renderer
Patch Set: Conflict Resolution: FrameHostMsg_DidStartProvisionalLoad Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 2703 matching lines...) Expand 10 before | Expand all | Expand 10 after
2714 2714
2715 // Update the request time if WebKit has better knowledge of it. 2715 // Update the request time if WebKit has better knowledge of it.
2716 if (document_state->request_time().is_null() && 2716 if (document_state->request_time().is_null() &&
2717 triggering_event_time != 0.0) { 2717 triggering_event_time != 0.0) {
2718 document_state->set_request_time(Time::FromDoubleT(triggering_event_time)); 2718 document_state->set_request_time(Time::FromDoubleT(triggering_event_time));
2719 } 2719 }
2720 2720
2721 // Start time is only set after request time. 2721 // Start time is only set after request time.
2722 document_state->set_start_load_time(Time::Now()); 2722 document_state->set_start_load_time(Time::Now());
2723 2723
2724 NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>(
2725 document_state->navigation_state());
2724 bool is_top_most = !frame->parent(); 2726 bool is_top_most = !frame->parent();
2725 if (is_top_most) { 2727 if (is_top_most) {
2726 render_view_->set_navigation_gesture( 2728 render_view_->set_navigation_gesture(
2727 WebUserGestureIndicator::isProcessingUserGesture() ? 2729 WebUserGestureIndicator::isProcessingUserGesture() ?
2728 NavigationGestureUser : NavigationGestureAuto); 2730 NavigationGestureUser : NavigationGestureAuto);
2729 } else if (ds->replacesCurrentHistoryItem()) { 2731 } else if (ds->replacesCurrentHistoryItem()) {
2730 // Subframe navigations that don't add session history items must be 2732 // Subframe navigations that don't add session history items must be
2731 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we 2733 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we
2732 // handle loading of error pages. 2734 // handle loading of error pages.
2733 static_cast<NavigationStateImpl*>(document_state->navigation_state()) 2735 navigation_state->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME);
2734 ->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME);
2735 } 2736 }
2736 2737
2738 base::TimeTicks navigation_start =
2739 navigation_state->common_params().navigation_start;
2740 DCHECK(!navigation_start.is_null());
2741
2737 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), 2742 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
2738 DidStartProvisionalLoad(frame)); 2743 DidStartProvisionalLoad(frame));
2739 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); 2744 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad());
2740 2745
2741 Send(new FrameHostMsg_DidStartProvisionalLoad(routing_id_, 2746 Send(new FrameHostMsg_DidStartProvisionalLoad(
2742 ds->request().url())); 2747 routing_id_, ds->request().url(), navigation_start));
2743 } 2748 }
2744 2749
2745 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( 2750 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
2746 blink::WebLocalFrame* frame) { 2751 blink::WebLocalFrame* frame) {
2747 DCHECK(!frame_ || frame_ == frame); 2752 DCHECK(!frame_ || frame_ == frame);
2748 2753
2749 // We don't use HistoryController in OOPIF enabled modes. 2754 // We don't use HistoryController in OOPIF enabled modes.
2750 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) 2755 if (SiteIsolationPolicy::UseSubframeNavigationEntries())
2751 return; 2756 return;
2752 2757
(...skipping 1590 matching lines...) Expand 10 before | Expand all | Expand 10 after
4343 RenderFrameImpl::PrepareRenderViewForNavigation( 4348 RenderFrameImpl::PrepareRenderViewForNavigation(
4344 common_params.url, request_params, &is_reload, &cache_policy); 4349 common_params.url, request_params, &is_reload, &cache_policy);
4345 4350
4346 GetContentClient()->SetActiveURL(common_params.url); 4351 GetContentClient()->SetActiveURL(common_params.url);
4347 4352
4348 pending_navigation_params_.reset(new NavigationParams( 4353 pending_navigation_params_.reset(new NavigationParams(
4349 common_params, StartNavigationParams(), request_params)); 4354 common_params, StartNavigationParams(), request_params));
4350 4355
4351 // Inform the browser of the start of the provisional load. This is needed so 4356 // Inform the browser of the start of the provisional load. This is needed so
4352 // that the load is properly tracked by the WebNavigation API. 4357 // that the load is properly tracked by the WebNavigation API.
4353 Send( 4358 Send(new FrameHostMsg_DidStartProvisionalLoad(
4354 new FrameHostMsg_DidStartProvisionalLoad(routing_id_, common_params.url)); 4359 routing_id_, common_params.url, common_params.navigation_start));
4355 4360
4356 // Send the provisional load failure. 4361 // Send the provisional load failure.
4357 blink::WebURLError error = 4362 blink::WebURLError error =
4358 CreateWebURLError(common_params.url, has_stale_copy_in_cache, error_code); 4363 CreateWebURLError(common_params.url, has_stale_copy_in_cache, error_code);
4359 WebURLRequest failed_request = CreateURLRequestForNavigation( 4364 WebURLRequest failed_request = CreateURLRequestForNavigation(
4360 common_params, scoped_ptr<StreamOverrideParameters>(), 4365 common_params, scoped_ptr<StreamOverrideParameters>(),
4361 frame_->isViewSourceModeEnabled()); 4366 frame_->isViewSourceModeEnabled());
4362 SendFailedProvisionalLoad(failed_request, error, frame_); 4367 SendFailedProvisionalLoad(failed_request, error, frame_);
4363 4368
4364 if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) { 4369 if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) {
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
4678 new NavigationParams(common_params, start_params, request_params)); 4683 new NavigationParams(common_params, start_params, request_params));
4679 4684
4680 // Unless the load is a WebFrameLoadType::Standard, this should remain 4685 // Unless the load is a WebFrameLoadType::Standard, this should remain
4681 // uninitialized. It will be updated when the load type is determined to be 4686 // uninitialized. It will be updated when the load type is determined to be
4682 // Standard, or after the previous document's unload handler has been 4687 // Standard, or after the previous document's unload handler has been
4683 // triggered. This occurs in UpdateNavigationState. 4688 // triggered. This occurs in UpdateNavigationState.
4684 // TODO(csharrison) See if we can always use the browser timestamp. 4689 // TODO(csharrison) See if we can always use the browser timestamp.
4685 pending_navigation_params_->common_params.navigation_start = 4690 pending_navigation_params_->common_params.navigation_start =
4686 base::TimeTicks(); 4691 base::TimeTicks();
4687 4692
4693 // Unless the load is a WebFrameLoadType::Standard, this should remain
4694 // uninitialized. It will be updated when the load type is determined to be
4695 // Standard, or after the previous document's unload handler has been
4696 // triggered. This occurs in UpdateNavigationState.
4697 // TODO(csharrison) See if we can always use the browser timestamp.
4698 pending_navigation_params_->common_params.navigation_start =
4699 base::TimeTicks();
4700
4688 // Create parameters for a standard navigation. 4701 // Create parameters for a standard navigation.
4689 blink::WebFrameLoadType load_type = blink::WebFrameLoadType::Standard; 4702 blink::WebFrameLoadType load_type = blink::WebFrameLoadType::Standard;
4690 bool should_load_request = false; 4703 bool should_load_request = false;
4691 WebHistoryItem item_for_history_navigation; 4704 WebHistoryItem item_for_history_navigation;
4692 WebURLRequest request = CreateURLRequestForNavigation( 4705 WebURLRequest request = CreateURLRequestForNavigation(
4693 common_params, stream_params.Pass(), frame_->isViewSourceModeEnabled()); 4706 common_params, stream_params.Pass(), frame_->isViewSourceModeEnabled());
4694 #if defined(OS_ANDROID) 4707 #if defined(OS_ANDROID)
4695 request.setHasUserGesture(start_params.has_user_gesture); 4708 request.setHasUserGesture(start_params.has_user_gesture);
4696 #endif 4709 #endif
4697 4710
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
5360 media::ConvertToSwitchOutputDeviceCB(web_callbacks); 5373 media::ConvertToSwitchOutputDeviceCB(web_callbacks);
5361 scoped_refptr<media::AudioOutputDevice> device = 5374 scoped_refptr<media::AudioOutputDevice> device =
5362 AudioDeviceFactory::NewOutputDevice(routing_id_, 0, sink_id.utf8(), 5375 AudioDeviceFactory::NewOutputDevice(routing_id_, 0, sink_id.utf8(),
5363 security_origin); 5376 security_origin);
5364 media::OutputDeviceStatus status = device->GetDeviceStatus(); 5377 media::OutputDeviceStatus status = device->GetDeviceStatus();
5365 device->Stop(); 5378 device->Stop();
5366 callback.Run(status); 5379 callback.Run(status);
5367 } 5380 }
5368 5381
5369 } // namespace content 5382 } // namespace content
OLDNEW
« no previous file with comments | « content/public/browser/navigation_handle.cc ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698