Stop creating ThrottlingURLLoaders for redirect
RenderFrameImpl::WillSendRequest creates ThrottlingURLLoaders for
redirects, which is weird because ThrottleURLLoader's lifetime spans
across redirects.
Bug: 1112310
Change-Id: Ib40f45cb0f044fea23cf5499ea94f421ad482c56
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2335293
Reviewed-by: Kinuko Yasuda <[email protected]>
Reviewed-by: Dominic Farolino <[email protected]>
Commit-Queue: Yutaka Hirano <[email protected]>
Cr-Commit-Position: refs/heads/master@{#795384}
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 5b85a0c8..9ab84b4d 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4582,17 +4582,19 @@
}
}
-void RenderFrameImpl::WillSendRequest(blink::WebURLRequest& request) {
+void RenderFrameImpl::WillSendRequest(blink::WebURLRequest& request,
+ ForRedirect for_redirect) {
// This method is called for subresources, while transition type is
// a navigation concept. We pass ui::PAGE_TRANSITION_LINK as default one.
WillSendRequestInternal(request, /*for_main_frame=*/false,
- ui::PAGE_TRANSITION_LINK);
+ ui::PAGE_TRANSITION_LINK, for_redirect);
}
void RenderFrameImpl::WillSendRequestInternal(
blink::WebURLRequest& request,
bool for_main_frame,
- ui::PageTransition transition_type) {
+ ui::PageTransition transition_type,
+ ForRedirect for_redirect) {
if (render_view_->renderer_preferences_.enable_do_not_track) {
request.SetHttpHeaderField(blink::WebString::FromUTF8(kDoNotTrackHeader),
"1");
@@ -4652,7 +4654,8 @@
// The RenderThreadImpl or its URLLoaderThrottleProvider member may not be
// valid in some tests.
RenderThreadImpl* render_thread = RenderThreadImpl::current();
- if (render_thread && render_thread->url_loader_throttle_provider()) {
+ if (!for_redirect && render_thread &&
+ render_thread->url_loader_throttle_provider()) {
extra_data->set_url_loader_throttles(
render_thread->url_loader_throttle_provider()->CreateThrottles(
routing_id_, request));
@@ -6006,7 +6009,8 @@
// TODO(clamy): Make sure that navigation requests are not modified somewhere
// else in blink.
bool for_main_frame = !frame_->Parent();
- WillSendRequestInternal(request, for_main_frame, transition_type);
+ WillSendRequestInternal(request, for_main_frame, transition_type,
+ ForRedirect(false));
if (!info->url_request.GetExtraData())
info->url_request.SetExtraData(base::MakeRefCounted<RequestExtraData>());
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index e5e67da..ede4600 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -707,7 +707,8 @@
void FocusedElementChanged(const blink::WebElement& element) override;
void OnMainFrameIntersectionChanged(
const blink::WebRect& intersect_rect) override;
- void WillSendRequest(blink::WebURLRequest& request) override;
+ void WillSendRequest(blink::WebURLRequest& request,
+ ForRedirect for_redirect) override;
void DidLoadResourceFromMemoryCache(
const blink::WebURLRequest& request,
const blink::WebURLResponse& response) override;
@@ -1108,7 +1109,8 @@
// |transition_type| corresponds to the document which triggered this request.
void WillSendRequestInternal(blink::WebURLRequest& request,
bool for_main_frame,
- ui::PageTransition transition_type);
+ ui::PageTransition transition_type,
+ ForRedirect for_redirect);
// Returns the URL being loaded by the |frame_|'s request.
GURL GetLoadingUrl() const;
diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc
index 7f230d8..f043795f 100644
--- a/content/renderer/render_frame_impl_browsertest.cc
+++ b/content/renderer/render_frame_impl_browsertest.cc
@@ -452,7 +452,8 @@
for (const auto& test_case : kTestCases) {
WebURLRequest request;
request.SetUrl(GURL(test_case.original));
- GetMainRenderFrame()->WillSendRequest(request);
+ GetMainRenderFrame()->WillSendRequest(
+ request, blink::WebLocalFrameClient::ForRedirect(false));
EXPECT_EQ(test_case.transformed, request.Url().GetString().Utf8());
}
}