| OLD | NEW |
| 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/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 case STATE_GENERATE_PROXY_AUTH_TOKEN_COMPLETE: | 527 case STATE_GENERATE_PROXY_AUTH_TOKEN_COMPLETE: |
| 528 rv = DoGenerateProxyAuthTokenComplete(rv); | 528 rv = DoGenerateProxyAuthTokenComplete(rv); |
| 529 break; | 529 break; |
| 530 case STATE_GENERATE_SERVER_AUTH_TOKEN: | 530 case STATE_GENERATE_SERVER_AUTH_TOKEN: |
| 531 DCHECK_EQ(OK, rv); | 531 DCHECK_EQ(OK, rv); |
| 532 rv = DoGenerateServerAuthToken(); | 532 rv = DoGenerateServerAuthToken(); |
| 533 break; | 533 break; |
| 534 case STATE_GENERATE_SERVER_AUTH_TOKEN_COMPLETE: | 534 case STATE_GENERATE_SERVER_AUTH_TOKEN_COMPLETE: |
| 535 rv = DoGenerateServerAuthTokenComplete(rv); | 535 rv = DoGenerateServerAuthTokenComplete(rv); |
| 536 break; | 536 break; |
| 537 case STATE_INIT_REQUEST_BODY: |
| 538 DCHECK_EQ(OK, rv); |
| 539 rv = DoInitRequestBody(); |
| 540 break; |
| 541 case STATE_INIT_REQUEST_BODY_COMPLETE: |
| 542 rv = DoInitRequestBodyComplete(rv); |
| 543 break; |
| 537 case STATE_BUILD_REQUEST: | 544 case STATE_BUILD_REQUEST: |
| 538 DCHECK_EQ(OK, rv); | 545 DCHECK_EQ(OK, rv); |
| 539 net_log_.BeginEvent(NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST); | 546 net_log_.BeginEvent(NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST); |
| 540 rv = DoBuildRequest(); | 547 rv = DoBuildRequest(); |
| 541 break; | 548 break; |
| 542 case STATE_BUILD_REQUEST_COMPLETE: | 549 case STATE_BUILD_REQUEST_COMPLETE: |
| 543 rv = DoBuildRequestComplete(rv); | 550 rv = DoBuildRequestComplete(rv); |
| 544 break; | 551 break; |
| 545 case STATE_SEND_REQUEST: | 552 case STATE_SEND_REQUEST: |
| 546 DCHECK_EQ(OK, rv); | 553 DCHECK_EQ(OK, rv); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 if (!ShouldApplyServerAuth()) | 689 if (!ShouldApplyServerAuth()) |
| 683 return OK; | 690 return OK; |
| 684 return auth_controllers_[target]->MaybeGenerateAuthToken(request_, | 691 return auth_controllers_[target]->MaybeGenerateAuthToken(request_, |
| 685 io_callback_, | 692 io_callback_, |
| 686 net_log_); | 693 net_log_); |
| 687 } | 694 } |
| 688 | 695 |
| 689 int HttpNetworkTransaction::DoGenerateServerAuthTokenComplete(int rv) { | 696 int HttpNetworkTransaction::DoGenerateServerAuthTokenComplete(int rv) { |
| 690 DCHECK_NE(ERR_IO_PENDING, rv); | 697 DCHECK_NE(ERR_IO_PENDING, rv); |
| 691 if (rv == OK) | 698 if (rv == OK) |
| 692 next_state_ = STATE_BUILD_REQUEST; | 699 next_state_ = STATE_INIT_REQUEST_BODY; |
| 693 return rv; | 700 return rv; |
| 694 } | 701 } |
| 695 | 702 |
| 696 void HttpNetworkTransaction::BuildRequestHeaders(bool using_proxy) { | 703 void HttpNetworkTransaction::BuildRequestHeaders(bool using_proxy) { |
| 697 request_headers_.SetHeader(HttpRequestHeaders::kHost, | 704 request_headers_.SetHeader(HttpRequestHeaders::kHost, |
| 698 GetHostAndOptionalPort(request_->url)); | 705 GetHostAndOptionalPort(request_->url)); |
| 699 | 706 |
| 700 // For compat with HTTP/1.0 servers and proxies: | 707 // For compat with HTTP/1.0 servers and proxies: |
| 701 if (using_proxy) { | 708 if (using_proxy) { |
| 702 request_headers_.SetHeader(HttpRequestHeaders::kProxyConnection, | 709 request_headers_.SetHeader(HttpRequestHeaders::kProxyConnection, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 735 if (ShouldApplyProxyAuth() && HaveAuth(HttpAuth::AUTH_PROXY)) | 742 if (ShouldApplyProxyAuth() && HaveAuth(HttpAuth::AUTH_PROXY)) |
| 736 auth_controllers_[HttpAuth::AUTH_PROXY]->AddAuthorizationHeader( | 743 auth_controllers_[HttpAuth::AUTH_PROXY]->AddAuthorizationHeader( |
| 737 &request_headers_); | 744 &request_headers_); |
| 738 if (ShouldApplyServerAuth() && HaveAuth(HttpAuth::AUTH_SERVER)) | 745 if (ShouldApplyServerAuth() && HaveAuth(HttpAuth::AUTH_SERVER)) |
| 739 auth_controllers_[HttpAuth::AUTH_SERVER]->AddAuthorizationHeader( | 746 auth_controllers_[HttpAuth::AUTH_SERVER]->AddAuthorizationHeader( |
| 740 &request_headers_); | 747 &request_headers_); |
| 741 | 748 |
| 742 request_headers_.MergeFrom(request_->extra_headers); | 749 request_headers_.MergeFrom(request_->extra_headers); |
| 743 } | 750 } |
| 744 | 751 |
| 752 int HttpNetworkTransaction::DoInitRequestBody() { |
| 753 next_state_ = STATE_INIT_REQUEST_BODY_COMPLETE; |
| 754 request_body_.reset(NULL); |
| 755 int rv = OK; |
| 756 if (request_->upload_data) { |
| 757 request_body_.reset(new UploadDataStream(request_->upload_data)); |
| 758 rv = request_body_->Init(io_callback_); |
| 759 } |
| 760 return rv; |
| 761 } |
| 762 |
| 763 int HttpNetworkTransaction::DoInitRequestBodyComplete(int result) { |
| 764 if (result == OK) |
| 765 next_state_ = STATE_BUILD_REQUEST; |
| 766 else |
| 767 request_body_.reset(NULL); |
| 768 return result; |
| 769 } |
| 770 |
| 745 int HttpNetworkTransaction::DoBuildRequest() { | 771 int HttpNetworkTransaction::DoBuildRequest() { |
| 746 next_state_ = STATE_BUILD_REQUEST_COMPLETE; | 772 next_state_ = STATE_BUILD_REQUEST_COMPLETE; |
| 747 request_body_.reset(NULL); | |
| 748 if (request_->upload_data) { | |
| 749 request_body_.reset(new UploadDataStream(request_->upload_data)); | |
| 750 const int error_code = request_body_->InitSync(); | |
| 751 if (error_code != OK) { | |
| 752 request_body_.reset(NULL); | |
| 753 return error_code; | |
| 754 } | |
| 755 } | |
| 756 | |
| 757 headers_valid_ = false; | 773 headers_valid_ = false; |
| 758 | 774 |
| 759 // This is constructed lazily (instead of within our Start method), so that | 775 // This is constructed lazily (instead of within our Start method), so that |
| 760 // we have proxy info available. | 776 // we have proxy info available. |
| 761 if (request_headers_.IsEmpty()) { | 777 if (request_headers_.IsEmpty()) { |
| 762 bool using_proxy = (proxy_info_.is_http() || proxy_info_.is_https()) && | 778 bool using_proxy = (proxy_info_.is_http() || proxy_info_.is_https()) && |
| 763 !is_https_request(); | 779 !is_https_request(); |
| 764 BuildRequestHeaders(using_proxy); | 780 BuildRequestHeaders(using_proxy); |
| 765 } | 781 } |
| 766 | 782 |
| (...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1392 #define STATE_CASE(s) \ | 1408 #define STATE_CASE(s) \ |
| 1393 case s: \ | 1409 case s: \ |
| 1394 description = base::StringPrintf("%s (0x%08X)", #s, s); \ | 1410 description = base::StringPrintf("%s (0x%08X)", #s, s); \ |
| 1395 break | 1411 break |
| 1396 | 1412 |
| 1397 std::string HttpNetworkTransaction::DescribeState(State state) { | 1413 std::string HttpNetworkTransaction::DescribeState(State state) { |
| 1398 std::string description; | 1414 std::string description; |
| 1399 switch (state) { | 1415 switch (state) { |
| 1400 STATE_CASE(STATE_CREATE_STREAM); | 1416 STATE_CASE(STATE_CREATE_STREAM); |
| 1401 STATE_CASE(STATE_CREATE_STREAM_COMPLETE); | 1417 STATE_CASE(STATE_CREATE_STREAM_COMPLETE); |
| 1418 STATE_CASE(STATE_INIT_REQUEST_BODY); |
| 1419 STATE_CASE(STATE_INIT_REQUEST_BODY_COMPLETE); |
| 1402 STATE_CASE(STATE_BUILD_REQUEST); | 1420 STATE_CASE(STATE_BUILD_REQUEST); |
| 1403 STATE_CASE(STATE_BUILD_REQUEST_COMPLETE); | 1421 STATE_CASE(STATE_BUILD_REQUEST_COMPLETE); |
| 1404 STATE_CASE(STATE_SEND_REQUEST); | 1422 STATE_CASE(STATE_SEND_REQUEST); |
| 1405 STATE_CASE(STATE_SEND_REQUEST_COMPLETE); | 1423 STATE_CASE(STATE_SEND_REQUEST_COMPLETE); |
| 1406 STATE_CASE(STATE_READ_HEADERS); | 1424 STATE_CASE(STATE_READ_HEADERS); |
| 1407 STATE_CASE(STATE_READ_HEADERS_COMPLETE); | 1425 STATE_CASE(STATE_READ_HEADERS_COMPLETE); |
| 1408 STATE_CASE(STATE_READ_BODY); | 1426 STATE_CASE(STATE_READ_BODY); |
| 1409 STATE_CASE(STATE_READ_BODY_COMPLETE); | 1427 STATE_CASE(STATE_READ_BODY_COMPLETE); |
| 1410 STATE_CASE(STATE_DRAIN_BODY_FOR_AUTH_RESTART); | 1428 STATE_CASE(STATE_DRAIN_BODY_FOR_AUTH_RESTART); |
| 1411 STATE_CASE(STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE); | 1429 STATE_CASE(STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE); |
| 1412 STATE_CASE(STATE_NONE); | 1430 STATE_CASE(STATE_NONE); |
| 1413 default: | 1431 default: |
| 1414 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, | 1432 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, |
| 1415 state); | 1433 state); |
| 1416 break; | 1434 break; |
| 1417 } | 1435 } |
| 1418 return description; | 1436 return description; |
| 1419 } | 1437 } |
| 1420 | 1438 |
| 1421 #undef STATE_CASE | 1439 #undef STATE_CASE |
| 1422 | 1440 |
| 1423 } // namespace net | 1441 } // namespace net |
| OLD | NEW |