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

Side by Side 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: Pass allowed_unsafe_redirect_url via delegate parameter instead of HttpResponseHeaders + fragment t… Created 6 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/url_request/url_request_http_job.h" 5 #include "net/url_request/url_request_http_job.h"
6 6
7 #include "base/base_switches.h" 7 #include "base/base_switches.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 } 798 }
799 } 799 }
800 800
801 if (result == OK) { 801 if (result == OK) {
802 scoped_refptr<HttpResponseHeaders> headers = GetResponseHeaders(); 802 scoped_refptr<HttpResponseHeaders> headers = GetResponseHeaders();
803 if (network_delegate()) { 803 if (network_delegate()) {
804 // Note that |this| may not be deleted until 804 // Note that |this| may not be deleted until
805 // |on_headers_received_callback_| or 805 // |on_headers_received_callback_| or
806 // |NetworkDelegate::URLRequestDestroyed()| has been called. 806 // |NetworkDelegate::URLRequestDestroyed()| has been called.
807 OnCallToDelegate(); 807 OnCallToDelegate();
808 if (!allowed_unsafe_redirect_url_.is_empty())
809 allowed_unsafe_redirect_url_ = GURL();
mmenke 2014/03/21 18:15:04 Should just always clear it here. Code size and r
robwu 2014/03/25 00:04:00 Done.
808 int error = network_delegate()->NotifyHeadersReceived( 810 int error = network_delegate()->NotifyHeadersReceived(
809 request_, 811 request_,
810 on_headers_received_callback_, 812 on_headers_received_callback_,
811 headers.get(), 813 headers.get(),
812 &override_response_headers_); 814 &override_response_headers_,
815 &allowed_unsafe_redirect_url_);
813 if (error != net::OK) { 816 if (error != net::OK) {
814 if (error == net::ERR_IO_PENDING) { 817 if (error == net::ERR_IO_PENDING) {
815 awaiting_callback_ = true; 818 awaiting_callback_ = true;
816 } else { 819 } else {
817 std::string source("delegate"); 820 std::string source("delegate");
818 request_->net_log().AddEvent(NetLog::TYPE_CANCELLED, 821 request_->net_log().AddEvent(NetLog::TYPE_CANCELLED,
819 NetLog::StringCallback("source", 822 NetLog::StringCallback("source",
820 &source)); 823 &source));
821 OnCallToDelegateComplete(); 824 OnCallToDelegateComplete();
822 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, error)); 825 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, error));
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 ? Filter::Factory(encoding_types, *filter_context_) : NULL; 1033 ? Filter::Factory(encoding_types, *filter_context_) : NULL;
1031 } 1034 }
1032 1035
1033 bool URLRequestHttpJob::IsSafeRedirect(const GURL& location) { 1036 bool URLRequestHttpJob::IsSafeRedirect(const GURL& location) {
1034 // HTTP is always safe. 1037 // HTTP is always safe.
1035 // TODO(pauljensen): Remove once crbug.com/146591 is fixed. 1038 // TODO(pauljensen): Remove once crbug.com/146591 is fixed.
1036 if (location.is_valid() && 1039 if (location.is_valid() &&
1037 (location.scheme() == "http" || location.scheme() == "https")) { 1040 (location.scheme() == "http" || location.scheme() == "https")) {
1038 return true; 1041 return true;
1039 } 1042 }
1043 // Delegates may mark an URL as safe for redirection.
1044 if (allowed_unsafe_redirect_url_.is_valid()) {
1045 GURL::Replacements replacements;
1046 replacements.ClearRef();
1047 if (allowed_unsafe_redirect_url_.ReplaceComponents(replacements) ==
1048 location.ReplaceComponents(replacements)) {
1049 return true;
1050 }
1051 }
1040 // Query URLRequestJobFactory as to whether |location| would be safe to 1052 // Query URLRequestJobFactory as to whether |location| would be safe to
1041 // redirect to. 1053 // redirect to.
1042 return request_->context()->job_factory() && 1054 return request_->context()->job_factory() &&
1043 request_->context()->job_factory()->IsSafeRedirectTarget(location); 1055 request_->context()->job_factory()->IsSafeRedirectTarget(location);
1044 } 1056 }
1045 1057
1046 bool URLRequestHttpJob::NeedsAuth() { 1058 bool URLRequestHttpJob::NeedsAuth() {
1047 int code = GetResponseCode(); 1059 int code = GetResponseCode();
1048 if (code == -1) 1060 if (code == -1)
1049 return false; 1061 return false;
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
1466 return override_response_headers_.get() ? 1478 return override_response_headers_.get() ?
1467 override_response_headers_.get() : 1479 override_response_headers_.get() :
1468 transaction_->GetResponseInfo()->headers.get(); 1480 transaction_->GetResponseInfo()->headers.get();
1469 } 1481 }
1470 1482
1471 void URLRequestHttpJob::NotifyURLRequestDestroyed() { 1483 void URLRequestHttpJob::NotifyURLRequestDestroyed() {
1472 awaiting_callback_ = false; 1484 awaiting_callback_ = false;
1473 } 1485 }
1474 1486
1475 } // namespace net 1487 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698