| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 48f0183ed0ba72e1ae632028c1a41d224b87eec7..3bc9d26e7cdbcf5a6c987471ece3614feb46c753 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -3961,13 +3961,12 @@ void RenderFrameImpl::saveImageFromDataURL(const blink::WebString& data_url) {
|
| }
|
| }
|
|
|
| -void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
|
| - blink::WebURLRequest& request) {
|
| - DCHECK_EQ(frame_, frame);
|
| - // The request my be empty during tests.
|
| - if (request.url().isEmpty())
|
| - return;
|
| -
|
| +// Navigation specific logic belonging in willSendRequest.
|
| +void RenderFrameImpl::WillSendNavigationRequest(
|
| + blink::WebLocalFrame* frame,
|
| + blink::WebURLRequest& request,
|
| + blink::WebDataSource* data_source,
|
| + RequestExtraData* new_extra_data) {
|
| // Set the first party for cookies url if it has not been set yet (new
|
| // requests). This value will be updated during redirects, consistent with
|
| // https://tools.ietf.org/html/draft-west-first-party-cookies-04#section-2.1.1
|
| @@ -3989,14 +3988,45 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
|
| request.setRequestorOrigin(frame->document().getSecurityOrigin());
|
| }
|
|
|
| + std::unique_ptr<StreamOverrideParameters> stream_override;
|
| + if (request.getExtraData()) {
|
| + stream_override = static_cast<RequestExtraData*>(request.getExtraData())
|
| + ->TakeStreamOverrideOwnership();
|
| + }
|
| +
|
| + // Add an empty HTTP origin header for non GET methods if none is currently
|
| + // present.
|
| + request.addHTTPOriginIfNeeded(WebString());
|
| +
|
| + // Attach |should_replace_current_entry| state to requests so that, should
|
| + // this navigation later require a request transfer, all state is preserved
|
| + // when it is re-created in the new process.
|
| + new_extra_data->set_should_replace_current_entry(
|
| + data_source->replacesCurrentHistoryItem());
|
| +
|
| + DCHECK(stream_override || !IsBrowserSideNavigationEnabled());
|
| + new_extra_data->set_stream_override(std::move(stream_override));
|
| +}
|
| +
|
| +void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
|
| + blink::WebURLRequest& request) {
|
| + DCHECK_EQ(frame_, frame);
|
| + // The request my be empty during tests.
|
| + if (request.url().isEmpty())
|
| + return;
|
| +
|
| WebDataSource* provisional_data_source = frame->provisionalDataSource();
|
| WebDataSource* data_source =
|
| provisional_data_source ? provisional_data_source : frame->dataSource();
|
|
|
| DocumentState* document_state = DocumentState::FromDataSource(data_source);
|
| DCHECK(document_state);
|
| +
|
| InternalDocumentStateData* internal_data =
|
| InternalDocumentStateData::FromDocumentState(document_state);
|
| + if (internal_data->is_cache_policy_override_set())
|
| + request.setCachePolicy(internal_data->cache_policy_override());
|
| +
|
| NavigationStateImpl* navigation_state =
|
| static_cast<NavigationStateImpl*>(document_state->navigation_state());
|
| ui::PageTransition transition_type = navigation_state->GetTransitionType();
|
| @@ -4016,18 +4046,14 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
|
| request.setURL(WebURL(new_url));
|
| }
|
|
|
| - if (internal_data->is_cache_policy_override_set())
|
| - request.setCachePolicy(internal_data->cache_policy_override());
|
| -
|
| // The request's extra data may indicate that we should set a custom user
|
| // agent. This needs to be done here, after WebKit is through with setting the
|
| // user agent on its own. Similarly, it may indicate that we should set an
|
| // X-Requested-With header. This must be done here to avoid breaking CORS
|
| // checks.
|
| - // PlzNavigate: there may also be a stream url associated with the request.
|
| + // This is used by pepper.
|
| WebString custom_user_agent;
|
| WebString requested_with;
|
| - std::unique_ptr<StreamOverrideParameters> stream_override;
|
| if (request.getExtraData()) {
|
| RequestExtraData* old_extra_data =
|
| static_cast<RequestExtraData*>(request.getExtraData());
|
| @@ -4047,18 +4073,8 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
|
| else
|
| request.setHTTPHeaderField("X-Requested-With", requested_with);
|
| }
|
| - stream_override = old_extra_data->TakeStreamOverrideOwnership();
|
| }
|
|
|
| - // Add an empty HTTP origin header for non GET methods if none is currently
|
| - // present.
|
| - request.addHTTPOriginIfNeeded(WebString());
|
| -
|
| - // Attach |should_replace_current_entry| state to requests so that, should
|
| - // this navigation later require a request transfer, all state is preserved
|
| - // when it is re-created in the new process.
|
| - bool should_replace_current_entry = data_source->replacesCurrentHistoryItem();
|
| -
|
| int provider_id = kInvalidServiceWorkerProviderId;
|
| if (request.getFrameType() == blink::WebURLRequest::FrameTypeTopLevel ||
|
| request.getFrameType() == blink::WebURLRequest::FrameTypeNested) {
|
| @@ -4086,10 +4102,13 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
|
| blink::WebURLRequest::SkipServiceWorker::Controlling);
|
| }
|
|
|
| + RequestExtraData* extra_data = new RequestExtraData();
|
| + if (request.getFrameType() != WebURLRequest::FrameTypeNone)
|
| + WillSendNavigationRequest(frame, request, data_source, extra_data);
|
| +
|
| WebFrame* parent = frame->parent();
|
| int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1;
|
|
|
| - RequestExtraData* extra_data = new RequestExtraData();
|
| extra_data->set_visibility_state(visibilityState());
|
| extra_data->set_custom_user_agent(custom_user_agent);
|
| extra_data->set_requested_with(requested_with);
|
| @@ -4102,13 +4121,11 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
|
| extra_data->set_allow_download(
|
| navigation_state->common_params().allow_download);
|
| extra_data->set_transition_type(transition_type);
|
| - extra_data->set_should_replace_current_entry(should_replace_current_entry);
|
| extra_data->set_transferred_request_child_id(
|
| navigation_state->start_params().transferred_request_child_id);
|
| extra_data->set_transferred_request_request_id(
|
| navigation_state->start_params().transferred_request_request_id);
|
| extra_data->set_service_worker_provider_id(provider_id);
|
| - extra_data->set_stream_override(std::move(stream_override));
|
| bool is_prefetch =
|
| GetContentClient()->renderer()->IsPrefetchOnly(this, request);
|
| extra_data->set_is_prefetch(is_prefetch);
|
| @@ -4118,6 +4135,7 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
|
| WebString error;
|
| extra_data->set_initiated_in_secure_context(
|
| frame->document().isSecureContext(error));
|
| +
|
| request.setExtraData(extra_data);
|
|
|
| if (request.getLoFiState() == WebURLRequest::LoFiUnspecified) {
|
|
|