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

Unified Diff: net/url_request/url_request_http_job.cc

Issue 154473002: Support redirectUrl at onHeadersReceived in WebRequest / DWR API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 6 years, 10 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
Index: net/url_request/url_request_http_job.cc
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 947686cb9f2d9184310d031780b0c46fb5265d62..f8bdad52636876ae4fdeadbcf531c74504cd733c 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -289,6 +289,12 @@ void URLRequestHttpJob::Kill() {
void URLRequestHttpJob::NotifyHeadersComplete() {
DCHECK(!response_info_);
+ if (override_redirect_url_.is_valid()) {
+ // Ignore the remainder of the response and let NotifyHeadersComplete handle
+ // the redirect.
+ URLRequestJob::NotifyHeadersComplete();
+ return;
+ }
response_info_ = transaction_->GetResponseInfo();
// Save boolean, as we'll need this info at destruction time, and filters may
@@ -805,9 +811,11 @@ void URLRequestHttpJob::OnStartCompleted(int result) {
// |on_headers_received_callback_| or
// |NetworkDelegate::URLRequestDestroyed()| has been called.
OnCallToDelegate();
+ override_redirect_url_ = GURL();
int error = network_delegate()->NotifyHeadersReceived(
request_,
on_headers_received_callback_,
+ &override_redirect_url_,
headers.get(),
&override_response_headers_);
if (error != net::OK) {
@@ -1030,6 +1038,16 @@ Filter* URLRequestHttpJob::SetupFilter() const {
? Filter::Factory(encoding_types, *filter_context_) : NULL;
}
+bool URLRequestHttpJob::IsRedirectResponse(GURL* location,
+ int* http_status_code) {
battre 2014/02/12 11:54:48 nit: indentation.
+ if (override_redirect_url_.is_valid()) {
+ *location = GURL(override_redirect_url_);
+ *http_status_code = 307;
+ return true;
+ }
+ return URLRequestJob::IsRedirectResponse(location, http_status_code);
+}
+
bool URLRequestHttpJob::IsSafeRedirect(const GURL& location) {
// HTTP is always safe.
// TODO(pauljensen): Remove once crbug.com/146591 is fixed.
@@ -1037,6 +1055,10 @@ bool URLRequestHttpJob::IsSafeRedirect(const GURL& location) {
(location.scheme() == "http" || location.scheme() == "https")) {
return true;
}
+ // A redirect override specified by the delegate is always safe.
+ if (override_redirect_url_.is_valid()) {
+ return true;
+ }
// Query URLRequestJobFactory as to whether |location| would be safe to
// redirect to.
return request_->context()->job_factory() &&

Powered by Google App Engine
This is Rietveld 408576698