diff options
author | ricea@chromium.org <ricea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-06 12:05:18 +0000 |
---|---|---|
committer | ricea@chromium.org <ricea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-06 12:05:18 +0000 |
commit | 9483152e5e83ee5b5e8f867e59ad22ef4cb9bad9 (patch) | |
tree | 1cd615e6fc6063248400d17347f2e622b70810f6 /net/websockets/websocket_test_util.cc | |
parent | 7cf3cb144c2462b2614fa62a57c5130f571aee91 (diff) | |
download | chromium_src-9483152e5e83ee5b5e8f867e59ad22ef4cb9bad9.zip chromium_src-9483152e5e83ee5b5e8f867e59ad22ef4cb9bad9.tar.gz chromium_src-9483152e5e83ee5b5e8f867e59ad22ef4cb9bad9.tar.bz2 |
HttpStreamParser will not return any response headers at all if they are
greater than 256KB. Do not attempt to send the OnFinishOpeningHandshake
message in that case.
This fixes the no-crash-on-cookie-flood.html layout test for the new
implementation.
This also fixes the crash in the close-before-handshake-response.html layout test.
BUG=339456
TEST=net_unittests, http/tests/websocket
Review URL: https://codereview.chromium.org/131163005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@249377 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/websockets/websocket_test_util.cc')
-rw-r--r-- | net/websockets/websocket_test_util.cc | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/net/websockets/websocket_test_util.cc b/net/websockets/websocket_test_util.cc index 8146cc3..7605780 100644 --- a/net/websockets/websocket_test_util.cc +++ b/net/websockets/websocket_test_util.cc @@ -4,7 +4,11 @@ #include "net/websockets/websocket_test_util.h" +#include <algorithm> +#include <vector> + #include "base/basictypes.h" +#include "base/stl_util.h" #include "base/strings/stringprintf.h" #include "net/socket/socket_test_util.h" @@ -66,7 +70,7 @@ std::string WebSocketStandardResponse(const std::string& extra_headers) { struct WebSocketDeterministicMockClientSocketFactoryMaker::Detail { std::string expect_written; std::string return_to_read; - MockRead read; + std::vector<MockRead> reads; MockWrite write; scoped_ptr<DeterministicSocketData> data; DeterministicMockClientSocketFactory factory; @@ -87,21 +91,32 @@ WebSocketDeterministicMockClientSocketFactoryMaker::factory() { void WebSocketDeterministicMockClientSocketFactoryMaker::SetExpectations( const std::string& expect_written, const std::string& return_to_read) { + const size_t kHttpStreamParserBufferSize = 4096; // We need to extend the lifetime of these strings. detail_->expect_written = expect_written; detail_->return_to_read = return_to_read; + int sequence = 0; detail_->write = MockWrite(SYNCHRONOUS, detail_->expect_written.data(), detail_->expect_written.size(), - 0); - detail_->read = MockRead(SYNCHRONOUS, - detail_->return_to_read.data(), - detail_->return_to_read.size(), - 1); + sequence++); + // HttpStreamParser reads 4KB at a time. We need to take this implementation + // detail into account if |return_to_read| is big enough. + for (size_t place = 0; place < detail_->return_to_read.size(); + place += kHttpStreamParserBufferSize) { + detail_->reads.push_back( + MockRead(SYNCHRONOUS, detail_->return_to_read.data() + place, + std::min(detail_->return_to_read.size() - place, + kHttpStreamParserBufferSize), + sequence++)); + } scoped_ptr<DeterministicSocketData> socket_data( - new DeterministicSocketData(&detail_->read, 1, &detail_->write, 1)); + new DeterministicSocketData(vector_as_array(&detail_->reads), + detail_->reads.size(), + &detail_->write, + 1)); socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK)); - socket_data->SetStop(2); + socket_data->SetStop(sequence); SetRawExpectations(socket_data.Pass()); } |