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

Side by Side Diff: net/spdy/spdy_proxy_client_socket.cc

Issue 1391053002: [net/http auth] Make HttpAuthHandler challenge handling asynchronous. Base URL: https://chromium.googlesource.com/chromium/src.git@auth-handler-init-split
Patch Set: Created 5 years, 2 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
« no previous file with comments | « net/spdy/spdy_proxy_client_socket.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/spdy/spdy_proxy_client_socket.h" 5 #include "net/spdy/spdy_proxy_client_socket.h"
6 6
7 #include <algorithm> // min 7 #include <algorithm> // min
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 // HttpProxyClientSocket. 316 // HttpProxyClientSocket.
317 net_log_.BeginEvent( 317 net_log_.BeginEvent(
318 NetLog::TYPE_HTTP_TRANSACTION_TUNNEL_READ_HEADERS); 318 NetLog::TYPE_HTTP_TRANSACTION_TUNNEL_READ_HEADERS);
319 } 319 }
320 break; 320 break;
321 case STATE_READ_REPLY_COMPLETE: 321 case STATE_READ_REPLY_COMPLETE:
322 rv = DoReadReplyComplete(rv); 322 rv = DoReadReplyComplete(rv);
323 net_log_.EndEventWithNetErrorCode( 323 net_log_.EndEventWithNetErrorCode(
324 NetLog::TYPE_HTTP_TRANSACTION_TUNNEL_READ_HEADERS, rv); 324 NetLog::TYPE_HTTP_TRANSACTION_TUNNEL_READ_HEADERS, rv);
325 break; 325 break;
326 case STATE_HANDLE_PROXY_AUTH_CHALLENGE:
327 rv = DoHandleProxyAuthChallenge();
328 break;
329 case STATE_HANDLE_PROXY_AUTH_CHALLENGE_COMPLETE:
330 rv = DoHandleProxyAuthChallengeComplete(rv);
331 break;
326 default: 332 default:
327 NOTREACHED() << "bad state"; 333 NOTREACHED() << "bad state";
328 rv = ERR_UNEXPECTED; 334 rv = ERR_UNEXPECTED;
329 break; 335 break;
330 } 336 }
331 } while (rv != ERR_IO_PENDING && next_state_ != STATE_DISCONNECTED && 337 } while (rv != ERR_IO_PENDING && next_state_ != STATE_DISCONNECTED &&
332 next_state_ != STATE_OPEN); 338 next_state_ != STATE_OPEN);
333 return rv; 339 return rv;
334 } 340 }
335 341
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 } 419 }
414 420
415 redirect_has_load_timing_info_ = 421 redirect_has_load_timing_info_ =
416 spdy_stream_->GetLoadTimingInfo(&redirect_load_timing_info_); 422 spdy_stream_->GetLoadTimingInfo(&redirect_load_timing_info_);
417 // Note that this triggers a RST_STREAM_CANCEL. 423 // Note that this triggers a RST_STREAM_CANCEL.
418 spdy_stream_->DetachDelegate(); 424 spdy_stream_->DetachDelegate();
419 next_state_ = STATE_DISCONNECTED; 425 next_state_ = STATE_DISCONNECTED;
420 return ERR_HTTPS_PROXY_TUNNEL_RESPONSE; 426 return ERR_HTTPS_PROXY_TUNNEL_RESPONSE;
421 427
422 case 407: // Proxy Authentication Required 428 case 407: // Proxy Authentication Required
423 next_state_ = STATE_OPEN; 429 next_state_ = STATE_HANDLE_PROXY_AUTH_CHALLENGE;
424 if (!SanitizeProxyAuth(&response_)) { 430 return OK;
425 LogBlockedTunnelResponse();
426 return ERR_TUNNEL_CONNECTION_FAILED;
427 }
428 return HandleProxyAuthChallenge(auth_.get(), &response_, net_log_);
429 431
430 default: 432 default:
431 // Ignore response to avoid letting the proxy impersonate the target 433 // Ignore response to avoid letting the proxy impersonate the target
432 // server. (See http://crbug.com/137891.) 434 // server. (See http://crbug.com/137891.)
433 LogBlockedTunnelResponse(); 435 LogBlockedTunnelResponse();
434 return ERR_TUNNEL_CONNECTION_FAILED; 436 return ERR_TUNNEL_CONNECTION_FAILED;
435 } 437 }
436 } 438 }
437 439
440 int SpdyProxyClientSocket::DoHandleProxyAuthChallenge() {
441 if (!SanitizeProxyAuth(&response_)) {
442 LogBlockedTunnelResponse();
443 return ERR_TUNNEL_CONNECTION_FAILED;
444 }
445 next_state_ = STATE_HANDLE_PROXY_AUTH_CHALLENGE_COMPLETE;
446 return auth_->HandleAuthChallenge(
447 response_, base::Bind(&SpdyProxyClientSocket::OnIOComplete,
448 weak_factory_.GetWeakPtr()),
449 net_log_);
450 }
451
452 int SpdyProxyClientSocket::DoHandleProxyAuthChallengeComplete(int result) {
453 next_state_ = STATE_OPEN;
454 if (result != OK)
455 return result;
456 if (auth_->HaveAuthHandler()) {
457 response_.auth_challenge = auth_->auth_info();
458 return ERR_PROXY_AUTH_REQUESTED;
459 }
460 return ERR_PROXY_AUTH_UNSUPPORTED;
461 }
462
438 // SpdyStream::Delegate methods: 463 // SpdyStream::Delegate methods:
439 // Called when SYN frame has been sent. 464 // Called when SYN frame has been sent.
440 // Returns true if no more data to be sent after SYN frame. 465 // Returns true if no more data to be sent after SYN frame.
441 void SpdyProxyClientSocket::OnRequestHeadersSent() { 466 void SpdyProxyClientSocket::OnRequestHeadersSent() {
442 DCHECK_EQ(next_state_, STATE_SEND_REQUEST_COMPLETE); 467 DCHECK_EQ(next_state_, STATE_SEND_REQUEST_COMPLETE);
443 468
444 OnIOComplete(OK); 469 OnIOComplete(OK);
445 } 470 }
446 471
447 SpdyResponseHeadersStatus SpdyProxyClientSocket::OnResponseHeadersUpdated( 472 SpdyResponseHeadersStatus SpdyProxyClientSocket::OnResponseHeadersUpdated(
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 } else if (!read_callback_.is_null()) { 553 } else if (!read_callback_.is_null()) {
529 // If we have a read_callback_, the we need to make sure we call it back. 554 // If we have a read_callback_, the we need to make sure we call it back.
530 OnDataReceived(scoped_ptr<SpdyBuffer>()); 555 OnDataReceived(scoped_ptr<SpdyBuffer>());
531 } 556 }
532 // This may have been deleted by read_callback_, so check first. 557 // This may have been deleted by read_callback_, so check first.
533 if (weak_ptr.get() && !write_callback.is_null()) 558 if (weak_ptr.get() && !write_callback.is_null())
534 write_callback.Run(ERR_CONNECTION_CLOSED); 559 write_callback.Run(ERR_CONNECTION_CLOSED);
535 } 560 }
536 561
537 } // namespace net 562 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_proxy_client_socket.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698