| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
| 6 | 6 |
| 7 #include "base/scoped_ptr.h" | 7 #include "base/scoped_ptr.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/field_trial.h" | 9 #include "base/field_trial.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 | 370 |
| 371 int HttpNetworkTransaction::DoLoop(int result) { | 371 int HttpNetworkTransaction::DoLoop(int result) { |
| 372 DCHECK(next_state_ != STATE_NONE); | 372 DCHECK(next_state_ != STATE_NONE); |
| 373 | 373 |
| 374 int rv = result; | 374 int rv = result; |
| 375 do { | 375 do { |
| 376 State state = next_state_; | 376 State state = next_state_; |
| 377 next_state_ = STATE_NONE; | 377 next_state_ = STATE_NONE; |
| 378 switch (state) { | 378 switch (state) { |
| 379 case STATE_RESOLVE_PROXY: | 379 case STATE_RESOLVE_PROXY: |
| 380 DCHECK(rv == OK); | 380 DCHECK_EQ(OK, rv); |
| 381 TRACE_EVENT_BEGIN("http.resolve_proxy", request_, request_->url.spec()); | 381 TRACE_EVENT_BEGIN("http.resolve_proxy", request_, request_->url.spec()); |
| 382 rv = DoResolveProxy(); | 382 rv = DoResolveProxy(); |
| 383 break; | 383 break; |
| 384 case STATE_RESOLVE_PROXY_COMPLETE: | 384 case STATE_RESOLVE_PROXY_COMPLETE: |
| 385 rv = DoResolveProxyComplete(rv); | 385 rv = DoResolveProxyComplete(rv); |
| 386 TRACE_EVENT_END("http.resolve_proxy", request_, request_->url.spec()); | 386 TRACE_EVENT_END("http.resolve_proxy", request_, request_->url.spec()); |
| 387 break; | 387 break; |
| 388 case STATE_INIT_CONNECTION: | 388 case STATE_INIT_CONNECTION: |
| 389 DCHECK(rv == OK); | 389 DCHECK_EQ(OK, rv); |
| 390 TRACE_EVENT_BEGIN("http.init_conn", request_, request_->url.spec()); | 390 TRACE_EVENT_BEGIN("http.init_conn", request_, request_->url.spec()); |
| 391 rv = DoInitConnection(); | 391 rv = DoInitConnection(); |
| 392 break; | 392 break; |
| 393 case STATE_INIT_CONNECTION_COMPLETE: | 393 case STATE_INIT_CONNECTION_COMPLETE: |
| 394 rv = DoInitConnectionComplete(rv); | 394 rv = DoInitConnectionComplete(rv); |
| 395 TRACE_EVENT_END("http.init_conn", request_, request_->url.spec()); | 395 TRACE_EVENT_END("http.init_conn", request_, request_->url.spec()); |
| 396 break; | 396 break; |
| 397 case STATE_RESOLVE_HOST: | 397 case STATE_RESOLVE_HOST: |
| 398 DCHECK(rv == OK); | 398 DCHECK_EQ(OK, rv); |
| 399 TRACE_EVENT_BEGIN("http.resolve_host", request_, request_->url.spec()); | 399 TRACE_EVENT_BEGIN("http.resolve_host", request_, request_->url.spec()); |
| 400 rv = DoResolveHost(); | 400 rv = DoResolveHost(); |
| 401 break; | 401 break; |
| 402 case STATE_RESOLVE_HOST_COMPLETE: | 402 case STATE_RESOLVE_HOST_COMPLETE: |
| 403 rv = DoResolveHostComplete(rv); | 403 rv = DoResolveHostComplete(rv); |
| 404 TRACE_EVENT_END("http.resolve_host", request_, request_->url.spec()); | 404 TRACE_EVENT_END("http.resolve_host", request_, request_->url.spec()); |
| 405 break; | 405 break; |
| 406 case STATE_CONNECT: | 406 case STATE_CONNECT: |
| 407 DCHECK(rv == OK); | 407 DCHECK_EQ(OK, rv); |
| 408 TRACE_EVENT_BEGIN("http.connect", request_, request_->url.spec()); | 408 TRACE_EVENT_BEGIN("http.connect", request_, request_->url.spec()); |
| 409 rv = DoConnect(); | 409 rv = DoConnect(); |
| 410 break; | 410 break; |
| 411 case STATE_CONNECT_COMPLETE: | 411 case STATE_CONNECT_COMPLETE: |
| 412 rv = DoConnectComplete(rv); | 412 rv = DoConnectComplete(rv); |
| 413 TRACE_EVENT_END("http.connect", request_, request_->url.spec()); | 413 TRACE_EVENT_END("http.connect", request_, request_->url.spec()); |
| 414 break; | 414 break; |
| 415 case STATE_SSL_CONNECT_OVER_TUNNEL: | 415 case STATE_SSL_CONNECT_OVER_TUNNEL: |
| 416 DCHECK(rv == OK); | 416 DCHECK_EQ(OK, rv); |
| 417 TRACE_EVENT_BEGIN("http.ssl_tunnel", request_, request_->url.spec()); | 417 TRACE_EVENT_BEGIN("http.ssl_tunnel", request_, request_->url.spec()); |
| 418 rv = DoSSLConnectOverTunnel(); | 418 rv = DoSSLConnectOverTunnel(); |
| 419 break; | 419 break; |
| 420 case STATE_SSL_CONNECT_OVER_TUNNEL_COMPLETE: | 420 case STATE_SSL_CONNECT_OVER_TUNNEL_COMPLETE: |
| 421 rv = DoSSLConnectOverTunnelComplete(rv); | 421 rv = DoSSLConnectOverTunnelComplete(rv); |
| 422 TRACE_EVENT_END("http.ssl_tunnel", request_, request_->url.spec()); | 422 TRACE_EVENT_END("http.ssl_tunnel", request_, request_->url.spec()); |
| 423 break; | 423 break; |
| 424 case STATE_WRITE_HEADERS: | 424 case STATE_WRITE_HEADERS: |
| 425 DCHECK(rv == OK); | 425 DCHECK_EQ(OK, rv); |
| 426 TRACE_EVENT_BEGIN("http.write_headers", request_, request_->url.spec()); | 426 TRACE_EVENT_BEGIN("http.write_headers", request_, request_->url.spec()); |
| 427 rv = DoWriteHeaders(); | 427 rv = DoWriteHeaders(); |
| 428 break; | 428 break; |
| 429 case STATE_WRITE_HEADERS_COMPLETE: | 429 case STATE_WRITE_HEADERS_COMPLETE: |
| 430 rv = DoWriteHeadersComplete(rv); | 430 rv = DoWriteHeadersComplete(rv); |
| 431 TRACE_EVENT_END("http.write_headers", request_, request_->url.spec()); | 431 TRACE_EVENT_END("http.write_headers", request_, request_->url.spec()); |
| 432 break; | 432 break; |
| 433 case STATE_WRITE_BODY: | 433 case STATE_WRITE_BODY: |
| 434 DCHECK(rv == OK); | 434 DCHECK_EQ(OK, rv); |
| 435 TRACE_EVENT_BEGIN("http.write_body", request_, request_->url.spec()); | 435 TRACE_EVENT_BEGIN("http.write_body", request_, request_->url.spec()); |
| 436 rv = DoWriteBody(); | 436 rv = DoWriteBody(); |
| 437 break; | 437 break; |
| 438 case STATE_WRITE_BODY_COMPLETE: | 438 case STATE_WRITE_BODY_COMPLETE: |
| 439 rv = DoWriteBodyComplete(rv); | 439 rv = DoWriteBodyComplete(rv); |
| 440 TRACE_EVENT_END("http.write_body", request_, request_->url.spec()); | 440 TRACE_EVENT_END("http.write_body", request_, request_->url.spec()); |
| 441 break; | 441 break; |
| 442 case STATE_READ_HEADERS: | 442 case STATE_READ_HEADERS: |
| 443 DCHECK(rv == OK); | 443 DCHECK_EQ(OK, rv); |
| 444 TRACE_EVENT_BEGIN("http.read_headers", request_, request_->url.spec()); | 444 TRACE_EVENT_BEGIN("http.read_headers", request_, request_->url.spec()); |
| 445 rv = DoReadHeaders(); | 445 rv = DoReadHeaders(); |
| 446 break; | 446 break; |
| 447 case STATE_READ_HEADERS_COMPLETE: | 447 case STATE_READ_HEADERS_COMPLETE: |
| 448 rv = DoReadHeadersComplete(rv); | 448 rv = DoReadHeadersComplete(rv); |
| 449 TRACE_EVENT_END("http.read_headers", request_, request_->url.spec()); | 449 TRACE_EVENT_END("http.read_headers", request_, request_->url.spec()); |
| 450 break; | 450 break; |
| 451 case STATE_READ_BODY: | 451 case STATE_READ_BODY: |
| 452 DCHECK(rv == OK); | 452 DCHECK_EQ(OK, rv); |
| 453 TRACE_EVENT_BEGIN("http.read_body", request_, request_->url.spec()); | 453 TRACE_EVENT_BEGIN("http.read_body", request_, request_->url.spec()); |
| 454 rv = DoReadBody(); | 454 rv = DoReadBody(); |
| 455 break; | 455 break; |
| 456 case STATE_READ_BODY_COMPLETE: | 456 case STATE_READ_BODY_COMPLETE: |
| 457 rv = DoReadBodyComplete(rv); | 457 rv = DoReadBodyComplete(rv); |
| 458 TRACE_EVENT_END("http.read_body", request_, request_->url.spec()); | 458 TRACE_EVENT_END("http.read_body", request_, request_->url.spec()); |
| 459 break; | 459 break; |
| 460 case STATE_DRAIN_BODY_FOR_AUTH_RESTART: | 460 case STATE_DRAIN_BODY_FOR_AUTH_RESTART: |
| 461 DCHECK(rv == OK); | 461 DCHECK_EQ(OK, rv); |
| 462 TRACE_EVENT_BEGIN("http.drain_body_for_auth_restart", | 462 TRACE_EVENT_BEGIN("http.drain_body_for_auth_restart", |
| 463 request_, request_->url.spec()); | 463 request_, request_->url.spec()); |
| 464 rv = DoDrainBodyForAuthRestart(); | 464 rv = DoDrainBodyForAuthRestart(); |
| 465 break; | 465 break; |
| 466 case STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE: | 466 case STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE: |
| 467 rv = DoDrainBodyForAuthRestartComplete(rv); | 467 rv = DoDrainBodyForAuthRestartComplete(rv); |
| 468 TRACE_EVENT_END("http.drain_body_for_auth_restart", | 468 TRACE_EVENT_END("http.drain_body_for_auth_restart", |
| 469 request_, request_->url.spec()); | 469 request_, request_->url.spec()); |
| 470 break; | 470 break; |
| 471 default: | 471 default: |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 using_tunnel_ = !proxy_info_.is_direct() && using_ssl_; | 520 using_tunnel_ = !proxy_info_.is_direct() && using_ssl_; |
| 521 | 521 |
| 522 // Build the string used to uniquely identify connections of this type. | 522 // Build the string used to uniquely identify connections of this type. |
| 523 std::string connection_group; | 523 std::string connection_group; |
| 524 if (using_proxy_ || using_tunnel_) | 524 if (using_proxy_ || using_tunnel_) |
| 525 connection_group = "proxy/" + proxy_info_.proxy_server().ToURI() + "/"; | 525 connection_group = "proxy/" + proxy_info_.proxy_server().ToURI() + "/"; |
| 526 if (!using_proxy_) | 526 if (!using_proxy_) |
| 527 connection_group.append(request_->url.GetOrigin().spec()); | 527 connection_group.append(request_->url.GetOrigin().spec()); |
| 528 | 528 |
| 529 DCHECK(!connection_group.empty()); | 529 DCHECK(!connection_group.empty()); |
| 530 return connection_.Init(connection_group, &io_callback_); | 530 return connection_.Init(connection_group, request_->priority, &io_callback_); |
| 531 } | 531 } |
| 532 | 532 |
| 533 int HttpNetworkTransaction::DoInitConnectionComplete(int result) { | 533 int HttpNetworkTransaction::DoInitConnectionComplete(int result) { |
| 534 if (result < 0) | 534 if (result < 0) |
| 535 return result; | 535 return result; |
| 536 | 536 |
| 537 DCHECK(connection_.is_initialized()); | 537 DCHECK(connection_.is_initialized()); |
| 538 | 538 |
| 539 // Set the reused_socket_ flag to indicate that we are using a keep-alive | 539 // Set the reused_socket_ flag to indicate that we are using a keep-alive |
| 540 // connection. This flag is used to handle errors that occur while we are | 540 // connection. This flag is used to handle errors that occur while we are |
| (...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1512 if (target == HttpAuth::AUTH_PROXY) { | 1512 if (target == HttpAuth::AUTH_PROXY) { |
| 1513 auth_info->host = ASCIIToWide(proxy_info_.proxy_server().host_and_port()); | 1513 auth_info->host = ASCIIToWide(proxy_info_.proxy_server().host_and_port()); |
| 1514 } else { | 1514 } else { |
| 1515 DCHECK(target == HttpAuth::AUTH_SERVER); | 1515 DCHECK(target == HttpAuth::AUTH_SERVER); |
| 1516 auth_info->host = ASCIIToWide(request_->url.host()); | 1516 auth_info->host = ASCIIToWide(request_->url.host()); |
| 1517 } | 1517 } |
| 1518 response_.auth_challenge = auth_info; | 1518 response_.auth_challenge = auth_info; |
| 1519 } | 1519 } |
| 1520 | 1520 |
| 1521 } // namespace net | 1521 } // namespace net |
| OLD | NEW |