| OLD | NEW | 
|---|
| 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 438 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 449   // passed back to the browser in the DidCommitProvisionalLoad and the | 449   // passed back to the browser in the DidCommitProvisionalLoad and the | 
| 450   // DocumentLoadComplete IPCs. | 450   // DocumentLoadComplete IPCs. | 
| 451   base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks(); | 451   base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks(); | 
| 452   request.setUiStartTime(ui_timestamp.InSecondsF()); | 452   request.setUiStartTime(ui_timestamp.InSecondsF()); | 
| 453   request.setInputPerfMetricReportPolicy( | 453   request.setInputPerfMetricReportPolicy( | 
| 454       static_cast<WebURLRequest::InputToLoadPerfMetricReportPolicy>( | 454       static_cast<WebURLRequest::InputToLoadPerfMetricReportPolicy>( | 
| 455           common_params.report_type)); | 455           common_params.report_type)); | 
| 456   return request; | 456   return request; | 
| 457 } | 457 } | 
| 458 | 458 | 
| 459 void UpdateFrameNavigationTiming(WebFrame* frame, | 459 base::TimeTicks SanitizeNavigationTiming( | 
| 460                                  base::TimeTicks browser_navigation_start, | 460     base::TimeTicks browser_navigation_start) { | 
| 461                                  base::TimeTicks renderer_navigation_start) { |  | 
| 462   // The browser provides the navigation_start time to bootstrap the | 461   // The browser provides the navigation_start time to bootstrap the | 
| 463   // Navigation Timing information for the browser-initiated navigations. In | 462   // Navigation Timing information for the browser-initiated navigations. In | 
| 464   // case of cross-process navigations, this carries over the time of | 463   // case of cross-process navigations, this carries over the time of | 
| 465   // finishing the onbeforeunload handler of the previous page. | 464   // finishing the onbeforeunload handler of the previous page. | 
|  | 465   // |browser_navigation_start| is likely before this process existed, so we | 
|  | 466   // can't use InterProcessTimeTicksConverter. We need at least to ensure | 
|  | 467   // that the browser-side navigation start we set is not later than the one | 
|  | 468   // on the renderer side. | 
|  | 469   base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); | 
| 466   DCHECK(!browser_navigation_start.is_null()); | 470   DCHECK(!browser_navigation_start.is_null()); | 
| 467   if (frame->provisionalDataSource()) { | 471   base::TimeTicks navigation_start = | 
| 468     // |browser_navigation_start| is likely before this process existed, so we | 472       std::min(browser_navigation_start, renderer_navigation_start); | 
| 469     // can't use InterProcessTimeTicksConverter. We need at least to ensure | 473   // TODO(csharrison) UMA log: | 
| 470     // that the browser-side navigation start we set is not later than the one | 474   // |renderer_navigation_start - browser_navigation_start| | 
| 471     // on the renderer side. | 475   return navigation_start; | 
| 472     base::TimeTicks navigation_start = std::min( | 476 } | 
| 473         browser_navigation_start, renderer_navigation_start); | 477 | 
|  | 478 // Update the navigation start based on a better value recieved from the | 
|  | 479 // browser. This can be null if the timestamp should not be updated. | 
|  | 480 void UpdateFrameNavigationTiming(WebFrame* frame, | 
|  | 481                                  base::TimeTicks updated_navigation_start) { | 
|  | 482   if (frame->provisionalDataSource() && !updated_navigation_start.is_null()) { | 
| 474     double navigation_start_seconds = | 483     double navigation_start_seconds = | 
| 475         (navigation_start - base::TimeTicks()).InSecondsF(); | 484         (updated_navigation_start - base::TimeTicks()).InSecondsF(); | 
| 476     frame->provisionalDataSource()->setNavigationStartTime( | 485     frame->provisionalDataSource()->setNavigationStartTime( | 
| 477         navigation_start_seconds); | 486         navigation_start_seconds); | 
| 478     // TODO(clamy): We need to provide additional timing values for the | 487     // TODO(clamy): We need to provide additional timing values for the | 
| 479     // Navigation Timing API to work with browser-side navigations. | 488     // Navigation Timing API to work with browser-side navigations. | 
| 480   } | 489   } | 
| 481 } | 490 } | 
| 482 | 491 | 
|  | 492 | 
| 483 // PlzNavigate | 493 // PlzNavigate | 
| 484 CommonNavigationParams MakeCommonNavigationParams( | 494 CommonNavigationParams MakeCommonNavigationParams( | 
| 485     blink::WebURLRequest* request, | 495     blink::WebURLRequest* request, | 
| 486     bool should_replace_current_entry) { | 496     bool should_replace_current_entry, | 
|  | 497     const base::TimeTicks& navigation_start) { | 
| 487   const RequestExtraData kEmptyData; | 498   const RequestExtraData kEmptyData; | 
| 488   const RequestExtraData* extra_data = | 499   const RequestExtraData* extra_data = | 
| 489       static_cast<RequestExtraData*>(request->extraData()); | 500       static_cast<RequestExtraData*>(request->extraData()); | 
| 490   if (!extra_data) | 501   if (!extra_data) | 
| 491     extra_data = &kEmptyData; | 502     extra_data = &kEmptyData; | 
| 492   Referrer referrer( | 503   Referrer referrer( | 
| 493       GURL(request->httpHeaderField(WebString::fromUTF8("Referer")).latin1()), | 504       GURL(request->httpHeaderField(WebString::fromUTF8("Referer")).latin1()), | 
| 494       request->referrerPolicy()); | 505       request->referrerPolicy()); | 
| 495 | 506 | 
| 496   // Set the ui timestamp for this navigation. Currently the timestamp here is | 507   // Set the ui timestamp for this navigation. Currently the timestamp here is | 
| 497   // only non empty when the navigation was triggered by an Android intent, or | 508   // only non empty when the navigation was triggered by an Android intent, or | 
| 498   // by the user clicking on a link. The timestamp is converted from a double | 509   // by the user clicking on a link. The timestamp is converted from a double | 
| 499   // version supported by blink. It will be passed back to the renderer in the | 510   // version supported by blink. It will be passed back to the renderer in the | 
| 500   // CommitNavigation IPC, and then back to the browser again in the | 511   // CommitNavigation IPC, and then back to the browser again in the | 
| 501   // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs. | 512   // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs. | 
| 502   base::TimeTicks ui_timestamp = | 513   base::TimeTicks ui_timestamp = | 
| 503       base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime()); | 514       base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime()); | 
| 504   FrameMsg_UILoadMetricsReportType::Value report_type = | 515   FrameMsg_UILoadMetricsReportType::Value report_type = | 
| 505       static_cast<FrameMsg_UILoadMetricsReportType::Value>( | 516       static_cast<FrameMsg_UILoadMetricsReportType::Value>( | 
| 506           request->inputPerfMetricReportPolicy()); | 517           request->inputPerfMetricReportPolicy()); | 
| 507   return CommonNavigationParams( | 518   return CommonNavigationParams( | 
| 508       request->url(), referrer, extra_data->transition_type(), | 519       request->url(), referrer, extra_data->transition_type(), | 
| 509       FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry, | 520       FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry, | 
| 510       ui_timestamp, report_type, GURL(), GURL(), LOFI_UNSPECIFIED); | 521       ui_timestamp, report_type, GURL(), GURL(), LOFI_UNSPECIFIED, | 
|  | 522       navigation_start); | 
| 511 } | 523 } | 
| 512 | 524 | 
| 513 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) | 525 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) | 
| 514 media::Context3D GetSharedMainThreadContext3D() { | 526 media::Context3D GetSharedMainThreadContext3D() { | 
| 515   cc::ContextProvider* provider = | 527   cc::ContextProvider* provider = | 
| 516       RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); | 528       RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); | 
| 517   if (!provider) | 529   if (!provider) | 
| 518     return media::Context3D(); | 530     return media::Context3D(); | 
| 519   return media::Context3D(provider->ContextGL(), provider->GrContext()); | 531   return media::Context3D(provider->ContextGL(), provider->GrContext()); | 
| 520 } | 532 } | 
| (...skipping 2171 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2692         WebUserGestureIndicator::isProcessingUserGesture() ? | 2704         WebUserGestureIndicator::isProcessingUserGesture() ? | 
| 2693             NavigationGestureUser : NavigationGestureAuto); | 2705             NavigationGestureUser : NavigationGestureAuto); | 
| 2694   } else if (ds->replacesCurrentHistoryItem()) { | 2706   } else if (ds->replacesCurrentHistoryItem()) { | 
| 2695     // Subframe navigations that don't add session history items must be | 2707     // Subframe navigations that don't add session history items must be | 
| 2696     // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we | 2708     // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we | 
| 2697     // handle loading of error pages. | 2709     // handle loading of error pages. | 
| 2698     static_cast<NavigationStateImpl*>(document_state->navigation_state()) | 2710     static_cast<NavigationStateImpl*>(document_state->navigation_state()) | 
| 2699         ->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME); | 2711         ->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME); | 
| 2700   } | 2712   } | 
| 2701 | 2713 | 
|  | 2714   // Get the renderer navigation start in TimeTicks format. This will be | 
|  | 2715   // lossy because blink converts TimeTicks internal int64 representation to a | 
|  | 2716   // double. | 
|  | 2717   DCHECK(ds->getNavigationStartTime()); | 
|  | 2718   base::TimeTicks navigation_start = base::TimeTicks::FromInternalValue( | 
|  | 2719       ds->getNavigationStartTime() * base::Time::kMicrosecondsPerSecond); | 
|  | 2720   // See if we have a better timestamp from a browser initiated navigation. | 
|  | 2721   // If so, override it. This will be propogated to blink after the request has | 
|  | 2722   // been issued. | 
|  | 2723   if (ds->request().extraData()) { | 
|  | 2724     RequestExtraData* extra_data = | 
|  | 2725         static_cast<RequestExtraData*>(ds->request().extraData()); | 
|  | 2726     if (!extra_data->browser_navigation_start().is_null()) | 
|  | 2727       navigation_start = extra_data->browser_navigation_start(); | 
|  | 2728   } | 
|  | 2729 | 
| 2702   FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), | 2730   FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), | 
| 2703                     DidStartProvisionalLoad(frame)); | 2731                     DidStartProvisionalLoad(frame)); | 
| 2704   FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); | 2732   FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); | 
| 2705 | 2733 | 
| 2706   Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( | 2734   Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( | 
| 2707        routing_id_, ds->request().url())); | 2735       routing_id_, ds->request().url(), navigation_start)); | 
| 2708 } | 2736 } | 
| 2709 | 2737 | 
| 2710 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( | 2738 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( | 
| 2711     blink::WebLocalFrame* frame) { | 2739     blink::WebLocalFrame* frame) { | 
| 2712   DCHECK(!frame_ || frame_ == frame); | 2740   DCHECK(!frame_ || frame_ == frame); | 
| 2713   render_view_->history_controller()->RemoveChildrenForRedirect(this); | 2741   render_view_->history_controller()->RemoveChildrenForRedirect(this); | 
| 2714 } | 2742 } | 
| 2715 | 2743 | 
| 2716 void RenderFrameImpl::didFailProvisionalLoad( | 2744 void RenderFrameImpl::didFailProvisionalLoad( | 
| 2717     blink::WebLocalFrame* frame, | 2745     blink::WebLocalFrame* frame, | 
| (...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3345 | 3373 | 
| 3346   // The request's extra data may indicate that we should set a custom user | 3374   // The request's extra data may indicate that we should set a custom user | 
| 3347   // agent. This needs to be done here, after WebKit is through with setting the | 3375   // agent. This needs to be done here, after WebKit is through with setting the | 
| 3348   // user agent on its own. Similarly, it may indicate that we should set an | 3376   // user agent on its own. Similarly, it may indicate that we should set an | 
| 3349   // X-Requested-With header. This must be done here to avoid breaking CORS | 3377   // X-Requested-With header. This must be done here to avoid breaking CORS | 
| 3350   // checks. | 3378   // checks. | 
| 3351   // PlzNavigate: there may also be a stream url associated with the request. | 3379   // PlzNavigate: there may also be a stream url associated with the request. | 
| 3352   WebString custom_user_agent; | 3380   WebString custom_user_agent; | 
| 3353   WebString requested_with; | 3381   WebString requested_with; | 
| 3354   scoped_ptr<StreamOverrideParameters> stream_override; | 3382   scoped_ptr<StreamOverrideParameters> stream_override; | 
|  | 3383   base::TimeTicks navigation_start; | 
| 3355   if (request.extraData()) { | 3384   if (request.extraData()) { | 
| 3356     RequestExtraData* old_extra_data = | 3385     RequestExtraData* old_extra_data = | 
| 3357         static_cast<RequestExtraData*>(request.extraData()); | 3386         static_cast<RequestExtraData*>(request.extraData()); | 
| 3358 | 3387 | 
|  | 3388     navigation_start = old_extra_data->browser_navigation_start(); | 
| 3359     custom_user_agent = old_extra_data->custom_user_agent(); | 3389     custom_user_agent = old_extra_data->custom_user_agent(); | 
| 3360     if (!custom_user_agent.isNull()) { | 3390     if (!custom_user_agent.isNull()) { | 
| 3361       if (custom_user_agent.isEmpty()) | 3391       if (custom_user_agent.isEmpty()) | 
| 3362         request.clearHTTPHeaderField("User-Agent"); | 3392         request.clearHTTPHeaderField("User-Agent"); | 
| 3363       else | 3393       else | 
| 3364         request.setHTTPHeaderField("User-Agent", custom_user_agent); | 3394         request.setHTTPHeaderField("User-Agent", custom_user_agent); | 
| 3365     } | 3395     } | 
| 3366 | 3396 | 
| 3367     requested_with = old_extra_data->requested_with(); | 3397     requested_with = old_extra_data->requested_with(); | 
| 3368     if (!requested_with.isNull()) { | 3398     if (!requested_with.isNull()) { | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3443   extra_data->set_allow_download( | 3473   extra_data->set_allow_download( | 
| 3444       navigation_state->common_params().allow_download); | 3474       navigation_state->common_params().allow_download); | 
| 3445   extra_data->set_transition_type(transition_type); | 3475   extra_data->set_transition_type(transition_type); | 
| 3446   extra_data->set_should_replace_current_entry(should_replace_current_entry); | 3476   extra_data->set_should_replace_current_entry(should_replace_current_entry); | 
| 3447   extra_data->set_transferred_request_child_id( | 3477   extra_data->set_transferred_request_child_id( | 
| 3448       navigation_state->start_params().transferred_request_child_id); | 3478       navigation_state->start_params().transferred_request_child_id); | 
| 3449   extra_data->set_transferred_request_request_id( | 3479   extra_data->set_transferred_request_request_id( | 
| 3450       navigation_state->start_params().transferred_request_request_id); | 3480       navigation_state->start_params().transferred_request_request_id); | 
| 3451   extra_data->set_service_worker_provider_id(provider_id); | 3481   extra_data->set_service_worker_provider_id(provider_id); | 
| 3452   extra_data->set_stream_override(stream_override.Pass()); | 3482   extra_data->set_stream_override(stream_override.Pass()); | 
|  | 3483   extra_data->set_browser_navigation_start(navigation_start); | 
| 3453   if (request.loFiState() != WebURLRequest::LoFiUnspecified) | 3484   if (request.loFiState() != WebURLRequest::LoFiUnspecified) | 
| 3454     extra_data->set_lofi_state(static_cast<LoFiState>(request.loFiState())); | 3485     extra_data->set_lofi_state(static_cast<LoFiState>(request.loFiState())); | 
| 3455   else if (is_main_frame_ && !navigation_state->request_committed()) | 3486   else if (is_main_frame_ && !navigation_state->request_committed()) | 
| 3456     extra_data->set_lofi_state(navigation_state->common_params().lofi_state); | 3487     extra_data->set_lofi_state(navigation_state->common_params().lofi_state); | 
| 3457   else | 3488   else | 
| 3458     extra_data->set_lofi_state(is_using_lofi_ ? LOFI_ON : LOFI_OFF); | 3489     extra_data->set_lofi_state(is_using_lofi_ ? LOFI_ON : LOFI_OFF); | 
| 3459   request.setExtraData(extra_data); | 3490   request.setExtraData(extra_data); | 
| 3460 | 3491 | 
| 3461   // TODO(creis): Update prefetching to work with out-of-process iframes. | 3492   // TODO(creis): Update prefetching to work with out-of-process iframes. | 
| 3462   WebFrame* top_frame = frame->top(); | 3493   WebFrame* top_frame = frame->top(); | 
| (...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4297   WebURLRequest::CachePolicy cache_policy = | 4328   WebURLRequest::CachePolicy cache_policy = | 
| 4298       WebURLRequest::UseProtocolCachePolicy; | 4329       WebURLRequest::UseProtocolCachePolicy; | 
| 4299   RenderFrameImpl::PrepareRenderViewForNavigation( | 4330   RenderFrameImpl::PrepareRenderViewForNavigation( | 
| 4300       common_params.url, request_params, &is_reload, &cache_policy); | 4331       common_params.url, request_params, &is_reload, &cache_policy); | 
| 4301 | 4332 | 
| 4302   GetContentClient()->SetActiveURL(common_params.url); | 4333   GetContentClient()->SetActiveURL(common_params.url); | 
| 4303 | 4334 | 
| 4304   pending_navigation_params_.reset(new NavigationParams( | 4335   pending_navigation_params_.reset(new NavigationParams( | 
| 4305       common_params, StartNavigationParams(), request_params)); | 4336       common_params, StartNavigationParams(), request_params)); | 
| 4306 | 4337 | 
| 4307   // Inform the browser of the start of the provisional load. This is needed so |  | 
| 4308   // that the load is properly tracked by the WebNavigation API. |  | 
| 4309   Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( | 4338   Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( | 
| 4310       routing_id_, common_params.url)); | 4339       routing_id_, common_params.url, common_params.navigation_start)); | 
| 4311 | 4340 | 
| 4312   // Send the provisional load failure. | 4341   // Send the provisional load failure. | 
| 4313   blink::WebURLError error = | 4342   blink::WebURLError error = | 
| 4314       CreateWebURLError(common_params.url, has_stale_copy_in_cache, error_code); | 4343       CreateWebURLError(common_params.url, has_stale_copy_in_cache, error_code); | 
| 4315   WebURLRequest failed_request = CreateURLRequestForNavigation( | 4344   WebURLRequest failed_request = CreateURLRequestForNavigation( | 
| 4316       common_params, scoped_ptr<StreamOverrideParameters>(), | 4345       common_params, scoped_ptr<StreamOverrideParameters>(), | 
| 4317       frame_->isViewSourceModeEnabled()); | 4346       frame_->isViewSourceModeEnabled()); | 
| 4318   SendFailedProvisionalLoad(failed_request, error, frame_); | 4347   SendFailedProvisionalLoad(failed_request, error, frame_); | 
| 4319 | 4348 | 
| 4320   if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) { | 4349   if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) { | 
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4642   } | 4671   } | 
| 4643 | 4672 | 
| 4644   pending_navigation_params_.reset( | 4673   pending_navigation_params_.reset( | 
| 4645       new NavigationParams(common_params, start_params, request_params)); | 4674       new NavigationParams(common_params, start_params, request_params)); | 
| 4646 | 4675 | 
| 4647   // Create parameters for a standard navigation. | 4676   // Create parameters for a standard navigation. | 
| 4648   blink::WebFrameLoadType load_type = blink::WebFrameLoadType::Standard; | 4677   blink::WebFrameLoadType load_type = blink::WebFrameLoadType::Standard; | 
| 4649   bool should_load_request = false; | 4678   bool should_load_request = false; | 
| 4650   WebHistoryItem item_for_history_navigation; | 4679   WebHistoryItem item_for_history_navigation; | 
| 4651   WebURLRequest request = CreateURLRequestForNavigation( | 4680   WebURLRequest request = CreateURLRequestForNavigation( | 
| 4652       common_params, stream_params.Pass(), frame_->isViewSourceModeEnabled()); | 4681       common_params, stream_params.Pass(), | 
|  | 4682       frame_->isViewSourceModeEnabled()); | 
| 4653 #if defined(OS_ANDROID) | 4683 #if defined(OS_ANDROID) | 
| 4654   request.setHasUserGesture(start_params.has_user_gesture); | 4684   request.setHasUserGesture(start_params.has_user_gesture); | 
| 4655 #endif | 4685 #endif | 
| 4656 | 4686 | 
| 4657   // PlzNavigate: Make sure that Blink's loader will not try to use browser side | 4687   // PlzNavigate: Make sure that Blink's loader will not try to use browser side | 
| 4658   // navigation for this request (since it already went to the browser). | 4688   // navigation for this request (since it already went to the browser). | 
| 4659   if (browser_side_navigation) | 4689   if (browser_side_navigation) | 
| 4660     request.setCheckForBrowserSideNavigation(false); | 4690     request.setCheckForBrowserSideNavigation(false); | 
| 4661 | 4691 | 
| 4662   // If we are reloading, then use the history state of the current frame. | 4692   // If we are reloading, then use the history state of the current frame. | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4767       request.setHTTPBody(http_body); | 4797       request.setHTTPBody(http_body); | 
| 4768     } | 4798     } | 
| 4769 | 4799 | 
| 4770     // A session history navigation should have been accompanied by state. | 4800     // A session history navigation should have been accompanied by state. | 
| 4771     CHECK_EQ(request_params.page_id, -1); | 4801     CHECK_EQ(request_params.page_id, -1); | 
| 4772 | 4802 | 
| 4773     should_load_request = true; | 4803     should_load_request = true; | 
| 4774   } | 4804   } | 
| 4775 | 4805 | 
| 4776   if (should_load_request) { | 4806   if (should_load_request) { | 
| 4777     // Record this before starting the load. We need a lower bound of this | 4807     base::TimeTicks updated_navigation_start; | 
| 4778     // time to sanitize the navigationStart override set below. | 4808     if (load_type == blink::WebFrameLoadType::Standard) { | 
| 4779     base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); | 4809       updated_navigation_start = | 
|  | 4810           SanitizeNavigationTiming(common_params.navigation_start); | 
|  | 4811       static_cast<RequestExtraData*>(request.extraData()) | 
|  | 4812           ->set_browser_navigation_start(updated_navigation_start); | 
|  | 4813     } | 
| 4780 | 4814 | 
| 4781     // Perform a navigation to a data url if needed. | 4815     // Perform a navigation to a data url if needed. | 
| 4782     if (!common_params.base_url_for_data_url.is_empty() || | 4816     if (!common_params.base_url_for_data_url.is_empty() || | 
| 4783         (browser_side_navigation && | 4817         (browser_side_navigation && | 
| 4784          common_params.url.SchemeIs(url::kDataScheme))) { | 4818          common_params.url.SchemeIs(url::kDataScheme))) { | 
| 4785       LoadDataURL(common_params, frame_); | 4819       LoadDataURL(common_params, frame_); | 
| 4786     } else { | 4820     } else { | 
| 4787       // Load the request. | 4821       // Load the request. | 
| 4788       frame_->toWebLocalFrame()->load(request, load_type, | 4822       frame_->toWebLocalFrame()->load(request, load_type, | 
| 4789                                       item_for_history_navigation); | 4823                                       item_for_history_navigation); | 
| 4790     } | 4824     } | 
| 4791 | 4825     // Update the navigationStart value after the request has been made. | 
| 4792     if (load_type == blink::WebFrameLoadType::Standard) { | 4826     UpdateFrameNavigationTiming(frame_, updated_navigation_start); | 
| 4793       UpdateFrameNavigationTiming(frame_, |  | 
| 4794                                   request_params.browser_navigation_start, |  | 
| 4795                                   renderer_navigation_start); |  | 
| 4796     } |  | 
| 4797   } | 4827   } | 
| 4798 | 4828 | 
| 4799   // In case LoadRequest failed before didCreateDataSource was called. | 4829   // In case LoadRequest failed before didCreateDataSource was called. | 
| 4800   pending_navigation_params_.reset(); | 4830   pending_navigation_params_.reset(); | 
| 4801 } | 4831 } | 
| 4802 | 4832 | 
| 4803 void RenderFrameImpl::UpdateEncoding(WebFrame* frame, | 4833 void RenderFrameImpl::UpdateEncoding(WebFrame* frame, | 
| 4804                                      const std::string& encoding_name) { | 4834                                      const std::string& encoding_name) { | 
| 4805   // Only update main frame's encoding_name. | 4835   // Only update main frame's encoding_name. | 
| 4806   if (!frame->parent()) | 4836   if (!frame->parent()) | 
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4977   // Note: At this stage, the goal is to apply all the modifications the | 5007   // Note: At this stage, the goal is to apply all the modifications the | 
| 4978   // renderer wants to make to the request, and then send it to the browser, so | 5008   // renderer wants to make to the request, and then send it to the browser, so | 
| 4979   // that the actual network request can be started. Ideally, all such | 5009   // that the actual network request can be started. Ideally, all such | 
| 4980   // modifications should take place in willSendRequest, and in the | 5010   // modifications should take place in willSendRequest, and in the | 
| 4981   // implementation of willSendRequest for the various InspectorAgents | 5011   // implementation of willSendRequest for the various InspectorAgents | 
| 4982   // (devtools). | 5012   // (devtools). | 
| 4983   // | 5013   // | 
| 4984   // TODO(clamy): Apply devtools override. | 5014   // TODO(clamy): Apply devtools override. | 
| 4985   // TODO(clamy): Make sure that navigation requests are not modified somewhere | 5015   // TODO(clamy): Make sure that navigation requests are not modified somewhere | 
| 4986   // else in blink. | 5016   // else in blink. | 
|  | 5017 | 
|  | 5018   base::TimeTicks navigation_start = base::TimeTicks::Now(); | 
|  | 5019 | 
| 4987   willSendRequest(frame_, 0, *request, blink::WebURLResponse()); | 5020   willSendRequest(frame_, 0, *request, blink::WebURLResponse()); | 
| 4988 | 5021 | 
| 4989   // TODO(clamy): Same-document navigations should not be sent back to the | 5022   // TODO(clamy): Same-document navigations should not be sent back to the | 
| 4990   // browser. | 5023   // browser. | 
| 4991   // TODO(clamy): Data urls should not be sent back to the browser either. | 5024   // TODO(clamy): Data urls should not be sent back to the browser either. | 
| 4992   bool should_replace_current_entry = false; | 5025   bool should_replace_current_entry = false; | 
| 4993   WebDataSource* provisional_data_source = frame_->provisionalDataSource(); | 5026   WebDataSource* provisional_data_source = frame_->provisionalDataSource(); | 
| 4994   WebDataSource* current_data_source = frame_->dataSource(); | 5027   WebDataSource* current_data_source = frame_->dataSource(); | 
| 4995   WebDataSource* data_source = | 5028   WebDataSource* data_source = | 
| 4996       provisional_data_source ? provisional_data_source : current_data_source; | 5029       provisional_data_source ? provisional_data_source : current_data_source; | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 5010   DCHECK(GetFetchRedirectModeForWebURLRequest(*request) == | 5043   DCHECK(GetFetchRedirectModeForWebURLRequest(*request) == | 
| 5011          FetchRedirectMode::MANUAL_MODE); | 5044          FetchRedirectMode::MANUAL_MODE); | 
| 5012   DCHECK(frame_->parent() || | 5045   DCHECK(frame_->parent() || | 
| 5013          GetRequestContextFrameTypeForWebURLRequest(*request) == | 5046          GetRequestContextFrameTypeForWebURLRequest(*request) == | 
| 5014              REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); | 5047              REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); | 
| 5015   DCHECK(!frame_->parent() || | 5048   DCHECK(!frame_->parent() || | 
| 5016          GetRequestContextFrameTypeForWebURLRequest(*request) == | 5049          GetRequestContextFrameTypeForWebURLRequest(*request) == | 
| 5017              REQUEST_CONTEXT_FRAME_TYPE_NESTED); | 5050              REQUEST_CONTEXT_FRAME_TYPE_NESTED); | 
| 5018 | 5051 | 
| 5019   Send(new FrameHostMsg_BeginNavigation( | 5052   Send(new FrameHostMsg_BeginNavigation( | 
| 5020       routing_id_, | 5053       routing_id_, MakeCommonNavigationParams( | 
| 5021       MakeCommonNavigationParams(request, should_replace_current_entry), | 5054                        request, should_replace_current_entry, navigation_start), | 
| 5022       BeginNavigationParams( | 5055       BeginNavigationParams( | 
| 5023           request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), | 5056           request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), | 
| 5024           GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture(), | 5057           GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture(), | 
| 5025           request->skipServiceWorker(), | 5058           request->skipServiceWorker(), | 
| 5026           GetRequestContextTypeForWebURLRequest(*request)), | 5059           GetRequestContextTypeForWebURLRequest(*request)), | 
| 5027       GetRequestBodyForWebURLRequest(*request))); | 5060       GetRequestBodyForWebURLRequest(*request))); | 
| 5028 } | 5061 } | 
| 5029 | 5062 | 
| 5030 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params, | 5063 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params, | 
| 5031                                   WebFrame* frame) { | 5064                                   WebFrame* frame) { | 
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5284   mojo::ServiceProviderPtr service_provider; | 5317   mojo::ServiceProviderPtr service_provider; | 
| 5285   mojo::URLRequestPtr request(mojo::URLRequest::New()); | 5318   mojo::URLRequestPtr request(mojo::URLRequest::New()); | 
| 5286   request->url = mojo::String::From(url); | 5319   request->url = mojo::String::From(url); | 
| 5287   mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), | 5320   mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), | 
| 5288                                     nullptr, nullptr, | 5321                                     nullptr, nullptr, | 
| 5289                                     base::Bind(&OnGotContentHandlerID)); | 5322                                     base::Bind(&OnGotContentHandlerID)); | 
| 5290   return service_provider.Pass(); | 5323   return service_provider.Pass(); | 
| 5291 } | 5324 } | 
| 5292 | 5325 | 
| 5293 }  // namespace content | 5326 }  // namespace content | 
| OLD | NEW | 
|---|