| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 27ee8d887a52d8fb345f4d6732a7dec40965a50b..2cb7da531edfa807d4556e4eadb83d4a5344850b 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -428,6 +428,18 @@ static WebReferrerPolicy GetReferrerPolicyFromRequest(
|
| frame->document().referrerPolicy();
|
| }
|
|
|
| +static RequestExtraData* GetExtraDataFromRequest(
|
| + const WebURLRequest& request) {
|
| + webkit_glue::WebURLRequestExtraDataImpl* extra_data_base =
|
| + static_cast<webkit_glue::WebURLRequestExtraDataImpl*>(
|
| + request.extraData());
|
| + if(extra_data_base &&
|
| + extra_data_base->type_id() == RequestExtraData::kType)
|
| + return reinterpret_cast<RequestExtraData*>(extra_data_base);
|
| + else
|
| + return NULL;
|
| +}
|
| +
|
| static WebURLResponseExtraDataImpl* GetExtraDataFromResponse(
|
| const WebURLResponse& response) {
|
| return static_cast<WebURLResponseExtraDataImpl*>(
|
| @@ -3404,7 +3416,6 @@ void RenderViewImpl::didCompleteClientRedirect(
|
|
|
| void RenderViewImpl::didCreateDataSource(WebFrame* frame, WebDataSource* ds) {
|
| bool content_initiated = !pending_navigation_params_.get();
|
| -
|
| DocumentState* document_state = DocumentState::FromDataSource(ds);
|
| if (!document_state) {
|
| document_state = new DocumentState;
|
| @@ -4000,6 +4011,31 @@ void RenderViewImpl::assignIdentifierToRequest(
|
| // Ignore
|
| }
|
|
|
| +void RenderViewImpl::willRequestAfterPreconnect(WebFrame* frame,
|
| + WebURLRequest& request) {
|
| + WebString custom_user_agent;
|
| +
|
| + if(request.extraData()) {
|
| + // This will only be called before willSendRequest, so only ExtraData
|
| + // members we have to copy here is on WebURLRequestExtraDataImpl.
|
| + webkit_glue::WebURLRequestExtraDataImpl* old_extra_data =
|
| + static_cast<webkit_glue::WebURLRequestExtraDataImpl*>(
|
| + request.extraData());
|
| + DCHECK(webkit_glue::WebURLRequestExtraDataImpl::kType ==
|
| + old_extra_data->type_id());
|
| +
|
| + custom_user_agent = old_extra_data->custom_user_agent();
|
| + }
|
| +
|
| + bool was_after_preconnect_request = true;
|
| + // The args after |was_after_preconnect_request| are not used, and set to
|
| + // correct values at |willSendRequest|.
|
| + request.setExtraData(
|
| + new RequestExtraData(WebKit::WebReferrerPolicyDefault, custom_user_agent,
|
| + was_after_preconnect_request, true, 0, false, -1,
|
| + true, PAGE_TRANSITION_LINK, -1, -1));
|
| +}
|
| +
|
| void RenderViewImpl::willSendRequest(WebFrame* frame,
|
| unsigned identifier,
|
| WebURLRequest& request,
|
| @@ -4064,9 +4100,16 @@ void RenderViewImpl::willSendRequest(WebFrame* frame,
|
| }
|
| }
|
|
|
| + bool was_after_preconnect_request = false;
|
| + RequestExtraData* old_extra_data = GetExtraDataFromRequest(request);
|
| + if(old_extra_data)
|
| + was_after_preconnect_request =
|
| + old_extra_data->was_after_preconnect_request();
|
| +
|
| request.setExtraData(
|
| new RequestExtraData(referrer_policy,
|
| custom_user_agent,
|
| + was_after_preconnect_request,
|
| (frame == top_frame),
|
| frame->identifier(),
|
| frame->parent() == top_frame,
|
| @@ -4078,11 +4121,15 @@ void RenderViewImpl::willSendRequest(WebFrame* frame,
|
|
|
| DocumentState* top_document_state =
|
| DocumentState::FromDataSource(top_data_source);
|
| - // TODO(gavinp): separate out prefetching and prerender field trials
|
| - // if the rel=prerender rel type is sticking around.
|
| - if (top_document_state &&
|
| - request.targetType() == WebURLRequest::TargetIsPrefetch)
|
| - top_document_state->set_was_prefetcher(true);
|
| + if (top_document_state) {
|
| + // TODO(gavinp): separate out prefetching and prerender field trials
|
| + // if the rel=prerender rel type is sticking around.
|
| + if(request.targetType() == WebURLRequest::TargetIsPrefetch)
|
| + top_document_state->set_was_prefetcher(true);
|
| +
|
| + if(was_after_preconnect_request)
|
| + top_document_state->set_was_after_preconnect_request(true);
|
| + }
|
|
|
| request.setRequestorID(routing_id_);
|
| request.setHasUserGesture(WebUserGestureIndicator::isProcessingUserGesture());
|
|
|