| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <math.h> // ceil | 7 #include <math.h> // ceil |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| 11 #include <limits> |
| 11 #include <string> | 12 #include <string> |
| 12 #include <vector> | 13 #include <vector> |
| 13 | 14 |
| 14 #include "base/basictypes.h" | 15 #include "base/basictypes.h" |
| 15 #include "base/compiler_specific.h" | 16 #include "base/compiler_specific.h" |
| 16 #include "base/files/file_path.h" | 17 #include "base/files/file_path.h" |
| 17 #include "base/files/file_util.h" | 18 #include "base/files/file_util.h" |
| 18 #include "base/json/json_writer.h" | 19 #include "base/json/json_writer.h" |
| 19 #include "base/logging.h" | 20 #include "base/logging.h" |
| 20 #include "base/memory/scoped_ptr.h" | 21 #include "base/memory/scoped_ptr.h" |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 DCHECK(sizeof_data >= size); | 540 DCHECK(sizeof_data >= size); |
| 540 str->reserve(sizeof_data); | 541 str->reserve(sizeof_data); |
| 541 | 542 |
| 542 for (int i = 0; i < num_rows; ++i) | 543 for (int i = 0; i < num_rows; ++i) |
| 543 str->append(row, sizeof_row); | 544 str->append(row, sizeof_row); |
| 544 } | 545 } |
| 545 | 546 |
| 546 #if defined(NTLM_PORTABLE) | 547 #if defined(NTLM_PORTABLE) |
| 547 // Alternative functions that eliminate randomness and dependency on the local | 548 // Alternative functions that eliminate randomness and dependency on the local |
| 548 // host name so that the generated NTLM messages are reproducible. | 549 // host name so that the generated NTLM messages are reproducible. |
| 549 void MockGenerateRandom1(uint8* output, size_t n) { | 550 void MockGenerateRandom1(uint8_t* output, size_t n) { |
| 550 static const uint8 bytes[] = { | 551 static const uint8_t bytes[] = {0x55, 0x29, 0x66, 0x26, |
| 551 0x55, 0x29, 0x66, 0x26, 0x6b, 0x9c, 0x73, 0x54 | 552 0x6b, 0x9c, 0x73, 0x54}; |
| 552 }; | |
| 553 static size_t current_byte = 0; | 553 static size_t current_byte = 0; |
| 554 for (size_t i = 0; i < n; ++i) { | 554 for (size_t i = 0; i < n; ++i) { |
| 555 output[i] = bytes[current_byte++]; | 555 output[i] = bytes[current_byte++]; |
| 556 current_byte %= arraysize(bytes); | 556 current_byte %= arraysize(bytes); |
| 557 } | 557 } |
| 558 } | 558 } |
| 559 | 559 |
| 560 void MockGenerateRandom2(uint8* output, size_t n) { | 560 void MockGenerateRandom2(uint8_t* output, size_t n) { |
| 561 static const uint8 bytes[] = { | 561 static const uint8_t bytes[] = {0x96, 0x79, 0x85, 0xe7, 0x49, 0x93, |
| 562 0x96, 0x79, 0x85, 0xe7, 0x49, 0x93, 0x70, 0xa1, | 562 0x70, 0xa1, 0x4e, 0xe7, 0x87, 0x45, |
| 563 0x4e, 0xe7, 0x87, 0x45, 0x31, 0x5b, 0xd3, 0x1f | 563 0x31, 0x5b, 0xd3, 0x1f}; |
| 564 }; | |
| 565 static size_t current_byte = 0; | 564 static size_t current_byte = 0; |
| 566 for (size_t i = 0; i < n; ++i) { | 565 for (size_t i = 0; i < n; ++i) { |
| 567 output[i] = bytes[current_byte++]; | 566 output[i] = bytes[current_byte++]; |
| 568 current_byte %= arraysize(bytes); | 567 current_byte %= arraysize(bytes); |
| 569 } | 568 } |
| 570 } | 569 } |
| 571 | 570 |
| 572 std::string MockGetHostName() { | 571 std::string MockGetHostName() { |
| 573 return "WTC-WIN7"; | 572 return "WTC-WIN7"; |
| 574 } | 573 } |
| (...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1369 MockRead("world"), | 1368 MockRead("world"), |
| 1370 MockRead(ASYNC, OK), | 1369 MockRead(ASYNC, OK), |
| 1371 }; | 1370 }; |
| 1372 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); | 1371 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); |
| 1373 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 1372 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 1374 | 1373 |
| 1375 const char* const kExpectedResponseData[] = { | 1374 const char* const kExpectedResponseData[] = { |
| 1376 "hello", "world" | 1375 "hello", "world" |
| 1377 }; | 1376 }; |
| 1378 | 1377 |
| 1379 uint32 first_socket_log_id = NetLog::Source::kInvalidId; | 1378 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; |
| 1380 for (int i = 0; i < 2; ++i) { | 1379 for (int i = 0; i < 2; ++i) { |
| 1381 TestCompletionCallback callback; | 1380 TestCompletionCallback callback; |
| 1382 | 1381 |
| 1383 scoped_ptr<HttpTransaction> trans( | 1382 scoped_ptr<HttpTransaction> trans( |
| 1384 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1383 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1385 | 1384 |
| 1386 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1385 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1387 EXPECT_EQ(ERR_IO_PENDING, rv); | 1386 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1388 | 1387 |
| 1389 rv = callback.WaitForResult(); | 1388 rv = callback.WaitForResult(); |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1897 MockRead(ASYNC, 22, "hello"), | 1896 MockRead(ASYNC, 22, "hello"), |
| 1898 }; | 1897 }; |
| 1899 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, | 1898 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, |
| 1900 arraysize(data_writes)); | 1899 arraysize(data_writes)); |
| 1901 data.set_busy_before_sync_reads(true); | 1900 data.set_busy_before_sync_reads(true); |
| 1902 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1901 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1903 | 1902 |
| 1904 const int kNumUnreadBodies = arraysize(data_writes) - 1; | 1903 const int kNumUnreadBodies = arraysize(data_writes) - 1; |
| 1905 std::string response_lines[kNumUnreadBodies]; | 1904 std::string response_lines[kNumUnreadBodies]; |
| 1906 | 1905 |
| 1907 uint32 first_socket_log_id = NetLog::Source::kInvalidId; | 1906 uint32_t first_socket_log_id = NetLog::Source::kInvalidId; |
| 1908 for (size_t i = 0; i < kNumUnreadBodies; ++i) { | 1907 for (size_t i = 0; i < kNumUnreadBodies; ++i) { |
| 1909 TestCompletionCallback callback; | 1908 TestCompletionCallback callback; |
| 1910 | 1909 |
| 1911 scoped_ptr<HttpTransaction> trans( | 1910 scoped_ptr<HttpTransaction> trans( |
| 1912 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1911 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1913 | 1912 |
| 1914 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1913 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1915 EXPECT_EQ(OK, callback.GetResult(rv)); | 1914 EXPECT_EQ(OK, callback.GetResult(rv)); |
| 1916 | 1915 |
| 1917 LoadTimingInfo load_timing_info; | 1916 LoadTimingInfo load_timing_info; |
| (...skipping 7202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9120 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 9119 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
| 9121 | 9120 |
| 9122 std::string response_data; | 9121 std::string response_data; |
| 9123 rv = ReadTransaction(trans.get(), &response_data); | 9122 rv = ReadTransaction(trans.get(), &response_data); |
| 9124 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 9123 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); |
| 9125 } | 9124 } |
| 9126 | 9125 |
| 9127 TEST_P(HttpNetworkTransactionTest, UploadFileSmallerThanLength) { | 9126 TEST_P(HttpNetworkTransactionTest, UploadFileSmallerThanLength) { |
| 9128 base::FilePath temp_file_path; | 9127 base::FilePath temp_file_path; |
| 9129 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file_path)); | 9128 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file_path)); |
| 9130 const uint64 kFakeSize = 100000; // file is actually blank | 9129 const uint64_t kFakeSize = 100000; // file is actually blank |
| 9131 UploadFileElementReader::ScopedOverridingContentLengthForTests | 9130 UploadFileElementReader::ScopedOverridingContentLengthForTests |
| 9132 overriding_content_length(kFakeSize); | 9131 overriding_content_length(kFakeSize); |
| 9133 | 9132 |
| 9134 std::vector<scoped_ptr<UploadElementReader>> element_readers; | 9133 std::vector<scoped_ptr<UploadElementReader>> element_readers; |
| 9135 element_readers.push_back(make_scoped_ptr(new UploadFileElementReader( | 9134 element_readers.push_back(make_scoped_ptr(new UploadFileElementReader( |
| 9136 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, kuint64max, | 9135 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
| 9137 base::Time()))); | 9136 std::numeric_limits<uint64_t>::max(), base::Time()))); |
| 9138 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 9137 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 9139 | 9138 |
| 9140 HttpRequestInfo request; | 9139 HttpRequestInfo request; |
| 9141 request.method = "POST"; | 9140 request.method = "POST"; |
| 9142 request.url = GURL("http://www.example.org/upload"); | 9141 request.url = GURL("http://www.example.org/upload"); |
| 9143 request.upload_data_stream = &upload_data_stream; | 9142 request.upload_data_stream = &upload_data_stream; |
| 9144 request.load_flags = 0; | 9143 request.load_flags = 0; |
| 9145 | 9144 |
| 9146 scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9145 scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9147 scoped_ptr<HttpTransaction> trans( | 9146 scoped_ptr<HttpTransaction> trans( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9179 | 9178 |
| 9180 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { | 9179 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { |
| 9181 base::FilePath temp_file; | 9180 base::FilePath temp_file; |
| 9182 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file)); | 9181 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file)); |
| 9183 std::string temp_file_content("Unreadable file."); | 9182 std::string temp_file_content("Unreadable file."); |
| 9184 ASSERT_TRUE(base::WriteFile(temp_file, temp_file_content.c_str(), | 9183 ASSERT_TRUE(base::WriteFile(temp_file, temp_file_content.c_str(), |
| 9185 temp_file_content.length())); | 9184 temp_file_content.length())); |
| 9186 ASSERT_TRUE(base::MakeFileUnreadable(temp_file)); | 9185 ASSERT_TRUE(base::MakeFileUnreadable(temp_file)); |
| 9187 | 9186 |
| 9188 std::vector<scoped_ptr<UploadElementReader>> element_readers; | 9187 std::vector<scoped_ptr<UploadElementReader>> element_readers; |
| 9189 element_readers.push_back(make_scoped_ptr( | 9188 element_readers.push_back(make_scoped_ptr(new UploadFileElementReader( |
| 9190 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), | 9189 base::ThreadTaskRunnerHandle::Get().get(), temp_file, 0, |
| 9191 temp_file, 0, kuint64max, base::Time()))); | 9190 std::numeric_limits<uint64_t>::max(), base::Time()))); |
| 9192 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 9191 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 9193 | 9192 |
| 9194 HttpRequestInfo request; | 9193 HttpRequestInfo request; |
| 9195 request.method = "POST"; | 9194 request.method = "POST"; |
| 9196 request.url = GURL("http://www.example.org/upload"); | 9195 request.url = GURL("http://www.example.org/upload"); |
| 9197 request.upload_data_stream = &upload_data_stream; | 9196 request.upload_data_stream = &upload_data_stream; |
| 9198 request.load_flags = 0; | 9197 request.load_flags = 0; |
| 9199 | 9198 |
| 9200 // If we try to upload an unreadable file, the transaction should fail. | 9199 // If we try to upload an unreadable file, the transaction should fail. |
| 9201 scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9200 scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 9222 FakeUploadElementReader() {} | 9221 FakeUploadElementReader() {} |
| 9223 ~FakeUploadElementReader() override {} | 9222 ~FakeUploadElementReader() override {} |
| 9224 | 9223 |
| 9225 const CompletionCallback& callback() const { return callback_; } | 9224 const CompletionCallback& callback() const { return callback_; } |
| 9226 | 9225 |
| 9227 // UploadElementReader overrides: | 9226 // UploadElementReader overrides: |
| 9228 int Init(const CompletionCallback& callback) override { | 9227 int Init(const CompletionCallback& callback) override { |
| 9229 callback_ = callback; | 9228 callback_ = callback; |
| 9230 return ERR_IO_PENDING; | 9229 return ERR_IO_PENDING; |
| 9231 } | 9230 } |
| 9232 uint64 GetContentLength() const override { return 0; } | 9231 uint64_t GetContentLength() const override { return 0; } |
| 9233 uint64 BytesRemaining() const override { return 0; } | 9232 uint64_t BytesRemaining() const override { return 0; } |
| 9234 int Read(IOBuffer* buf, | 9233 int Read(IOBuffer* buf, |
| 9235 int buf_length, | 9234 int buf_length, |
| 9236 const CompletionCallback& callback) override { | 9235 const CompletionCallback& callback) override { |
| 9237 return ERR_FAILED; | 9236 return ERR_FAILED; |
| 9238 } | 9237 } |
| 9239 | 9238 |
| 9240 private: | 9239 private: |
| 9241 CompletionCallback callback_; | 9240 CompletionCallback callback_; |
| 9242 }; | 9241 }; |
| 9243 | 9242 |
| (...skipping 6415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15659 | 15658 |
| 15660 scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15659 scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15661 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15660 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
| 15662 | 15661 |
| 15663 EXPECT_THAT(trans.server_ssl_config_.alpn_protos, | 15662 EXPECT_THAT(trans.server_ssl_config_.alpn_protos, |
| 15664 testing::ElementsAre(kProtoHTTP2, kProtoSPDY31, kProtoHTTP11)); | 15663 testing::ElementsAre(kProtoHTTP2, kProtoSPDY31, kProtoHTTP11)); |
| 15665 EXPECT_TRUE(trans.server_ssl_config_.npn_protos.empty()); | 15664 EXPECT_TRUE(trans.server_ssl_config_.npn_protos.empty()); |
| 15666 } | 15665 } |
| 15667 | 15666 |
| 15668 } // namespace net | 15667 } // namespace net |
| OLD | NEW |