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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2356093002: Move navigation specific logic in wilSendRequest to a separate method
Patch Set: Created 4 years, 3 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698