Index: net/http/http_network_transaction.cc |
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc |
index dd538e27b7e6ba85016deb4b5d98f1280b863a19..6771eb713877664cfa0b7edbb0cefb015a5afdd5 100644 |
--- a/net/http/http_network_transaction.cc |
+++ b/net/http/http_network_transaction.cc |
@@ -862,6 +862,23 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) { |
} |
DCHECK(response_.headers); |
+ // Server-induced fallback is supported only if this is a PAC configured |
+ // proxy. |
+ if (response_.was_fetched_via_proxy && proxy_info_.did_use_pac_script()) { |
+ if (response_.headers != NULL && |
+ response_.headers->HasHeaderValue("connection", "proxy-bypass")) { |
+ ProxyService* proxy_service = session_->proxy_service(); |
+ if (proxy_service->Fallback(&proxy_info_, net_log_)) { |
+ // Only retry in the case of GETs. We don't want to resubmit a POST |
+ // if the proxy took some action. |
+ if (request_->method == "GET") { |
+ ResetConnectionAndRequestForResend(); |
+ return OK; |
+ } |
+ } |
+ } |
+ } |
+ |
// Like Net.HttpResponseCode, but only for MAIN_FRAME loads. |
if (request_->load_flags & LOAD_MAIN_FRAME) { |
const int response_code = response_.headers->response_code(); |