| 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/spdy/spdy_websocket_stream.h" | 5 #include "net/spdy/spdy_websocket_stream.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 DISALLOW_COPY_AND_ASSIGN(SpdyWebSocketStreamEventRecorder); | 158 DISALLOW_COPY_AND_ASSIGN(SpdyWebSocketStreamEventRecorder); |
| 159 }; | 159 }; |
| 160 | 160 |
| 161 } // namespace | 161 } // namespace |
| 162 | 162 |
| 163 class SpdyWebSocketStreamSpdy3Test : public testing::Test { | 163 class SpdyWebSocketStreamSpdy3Test : public testing::Test { |
| 164 public: | 164 public: |
| 165 OrderedSocketData* data() { return data_.get(); } | 165 OrderedSocketData* data() { return data_.get(); } |
| 166 | 166 |
| 167 void DoSendHelloFrame(SpdyWebSocketStreamEvent* event) { | 167 void DoSendHelloFrame(SpdyWebSocketStreamEvent* event) { |
| 168 // record the actual stream_id |
| 169 created_stream_id_ = websocket_stream_->stream_->stream_id(); |
| 168 websocket_stream_->SendData(kMessageFrame, kMessageFrameLength); | 170 websocket_stream_->SendData(kMessageFrame, kMessageFrameLength); |
| 169 } | 171 } |
| 170 | 172 |
| 171 void DoSendClosingFrame(SpdyWebSocketStreamEvent* event) { | 173 void DoSendClosingFrame(SpdyWebSocketStreamEvent* event) { |
| 172 websocket_stream_->SendData(kClosingFrame, kClosingFrameLength); | 174 websocket_stream_->SendData(kClosingFrame, kClosingFrameLength); |
| 173 } | 175 } |
| 174 | 176 |
| 175 void DoClose(SpdyWebSocketStreamEvent* event) { | 177 void DoClose(SpdyWebSocketStreamEvent* event) { |
| 176 websocket_stream_->Close(); | 178 websocket_stream_->Close(); |
| 177 } | 179 } |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 SpdySettingsFlags spdy_settings_flags_to_set_; | 294 SpdySettingsFlags spdy_settings_flags_to_set_; |
| 293 uint32 spdy_settings_value_to_set_; | 295 uint32 spdy_settings_value_to_set_; |
| 294 SettingsMap spdy_settings_to_send_; | 296 SettingsMap spdy_settings_to_send_; |
| 295 SpdySessionDependencies session_deps_; | 297 SpdySessionDependencies session_deps_; |
| 296 scoped_ptr<OrderedSocketData> data_; | 298 scoped_ptr<OrderedSocketData> data_; |
| 297 scoped_refptr<HttpNetworkSession> http_session_; | 299 scoped_refptr<HttpNetworkSession> http_session_; |
| 298 scoped_refptr<SpdySession> session_; | 300 scoped_refptr<SpdySession> session_; |
| 299 scoped_refptr<TransportSocketParams> transport_params_; | 301 scoped_refptr<TransportSocketParams> transport_params_; |
| 300 scoped_ptr<SpdyWebSocketStream> websocket_stream_; | 302 scoped_ptr<SpdyWebSocketStream> websocket_stream_; |
| 301 SpdyStreamId stream_id_; | 303 SpdyStreamId stream_id_; |
| 304 SpdyStreamId created_stream_id_; |
| 302 scoped_ptr<SpdyFrame> request_frame_; | 305 scoped_ptr<SpdyFrame> request_frame_; |
| 303 scoped_ptr<SpdyFrame> response_frame_; | 306 scoped_ptr<SpdyFrame> response_frame_; |
| 304 scoped_ptr<SpdyFrame> message_frame_; | 307 scoped_ptr<SpdyFrame> message_frame_; |
| 305 scoped_ptr<SpdyFrame> closing_frame_; | 308 scoped_ptr<SpdyFrame> closing_frame_; |
| 306 HostPortPair host_port_pair_; | 309 HostPortPair host_port_pair_; |
| 307 HostPortProxyPair host_port_proxy_pair_; | 310 HostPortProxyPair host_port_proxy_pair_; |
| 308 TestCompletionCallback completion_callback_; | 311 TestCompletionCallback completion_callback_; |
| 309 TestCompletionCallback sync_callback_; | 312 TestCompletionCallback sync_callback_; |
| 310 | 313 |
| 311 static const char kMessageFrame[]; | 314 static const char kMessageFrame[]; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 base::Bind(&SpdyWebSocketStreamSpdy3Test::DoSendClosingFrame, | 354 base::Bind(&SpdyWebSocketStreamSpdy3Test::DoSendClosingFrame, |
| 352 base::Unretained(this))); | 355 base::Unretained(this))); |
| 353 | 356 |
| 354 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); | 357 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); |
| 355 | 358 |
| 356 BoundNetLog net_log; | 359 BoundNetLog net_log; |
| 357 GURL url("ws://example.com/echo"); | 360 GURL url("ws://example.com/echo"); |
| 358 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log)); | 361 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log)); |
| 359 | 362 |
| 360 ASSERT_TRUE(websocket_stream_->stream_); | 363 ASSERT_TRUE(websocket_stream_->stream_); |
| 361 EXPECT_EQ(stream_id_, websocket_stream_->stream_->stream_id()); | |
| 362 | 364 |
| 363 SendRequest(); | 365 SendRequest(); |
| 364 | 366 |
| 365 completion_callback_.WaitForResult(); | 367 completion_callback_.WaitForResult(); |
| 366 | 368 |
| 369 EXPECT_EQ(stream_id_, created_stream_id_); |
| 370 |
| 367 websocket_stream_.reset(); | 371 websocket_stream_.reset(); |
| 368 | 372 |
| 369 const std::vector<SpdyWebSocketStreamEvent>& events = | 373 const std::vector<SpdyWebSocketStreamEvent>& events = |
| 370 delegate.GetSeenEvents(); | 374 delegate.GetSeenEvents(); |
| 371 ASSERT_EQ(7U, events.size()); | 375 ASSERT_EQ(7U, events.size()); |
| 372 | 376 |
| 373 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, | 377 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, |
| 374 events[0].event_type); | 378 events[0].event_type); |
| 375 EXPECT_LT(0, events[0].result); | 379 EXPECT_LT(0, events[0].result); |
| 376 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, | 380 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, | 520 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, |
| 517 events[3].event_type); | 521 events[3].event_type); |
| 518 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result); | 522 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result); |
| 519 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[4].event_type); | 523 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[4].event_type); |
| 520 | 524 |
| 521 EXPECT_TRUE(http_session_->spdy_session_pool()->HasSession( | 525 EXPECT_TRUE(http_session_->spdy_session_pool()->HasSession( |
| 522 host_port_proxy_pair_)); | 526 host_port_proxy_pair_)); |
| 523 } | 527 } |
| 524 | 528 |
| 525 TEST_F(SpdyWebSocketStreamSpdy3Test, IOPending) { | 529 TEST_F(SpdyWebSocketStreamSpdy3Test, IOPending) { |
| 526 Prepare(3); | 530 Prepare(1); |
| 527 scoped_ptr<SpdyFrame> settings_frame( | 531 scoped_ptr<SpdyFrame> settings_frame( |
| 528 ConstructSpdySettings(spdy_settings_to_send_)); | 532 ConstructSpdySettings(spdy_settings_to_send_)); |
| 529 MockWrite writes[] = { | 533 MockWrite writes[] = { |
| 530 // Setting throttling make SpdySession send settings frame automatically. | 534 // Setting throttling make SpdySession send settings frame automatically. |
| 531 CreateMockWrite(*settings_frame.get(), 1), | 535 CreateMockWrite(*settings_frame.get(), 1), |
| 532 CreateMockWrite(*request_frame_.get(), 3), | 536 CreateMockWrite(*request_frame_.get(), 3), |
| 533 CreateMockWrite(*message_frame_.get(), 6), | 537 CreateMockWrite(*message_frame_.get(), 6), |
| 534 CreateMockWrite(*closing_frame_.get(), 9) | 538 CreateMockWrite(*closing_frame_.get(), 9) |
| 535 }; | 539 }; |
| 536 | 540 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 delegate.SetOnReceivedData( | 573 delegate.SetOnReceivedData( |
| 570 base::Bind(&SpdyWebSocketStreamSpdy3Test::DoSendClosingFrame, | 574 base::Bind(&SpdyWebSocketStreamSpdy3Test::DoSendClosingFrame, |
| 571 base::Unretained(this))); | 575 base::Unretained(this))); |
| 572 | 576 |
| 573 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); | 577 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); |
| 574 BoundNetLog net_log; | 578 BoundNetLog net_log; |
| 575 GURL url("ws://example.com/echo"); | 579 GURL url("ws://example.com/echo"); |
| 576 ASSERT_EQ(ERR_IO_PENDING, websocket_stream_->InitializeStream( | 580 ASSERT_EQ(ERR_IO_PENDING, websocket_stream_->InitializeStream( |
| 577 url, HIGHEST, net_log)); | 581 url, HIGHEST, net_log)); |
| 578 | 582 |
| 579 // Delete the fist stream to allow create the second stream. | 583 // Delete the first stream to allow create the second stream. |
| 580 block_stream.reset(); | 584 block_stream.reset(); |
| 581 ASSERT_EQ(OK, sync_callback_.WaitForResult()); | 585 ASSERT_EQ(OK, sync_callback_.WaitForResult()); |
| 582 | 586 |
| 583 SendRequest(); | 587 SendRequest(); |
| 584 | 588 |
| 585 completion_callback_.WaitForResult(); | 589 completion_callback_.WaitForResult(); |
| 586 | 590 |
| 587 websocket_stream_.reset(); | 591 websocket_stream_.reset(); |
| 588 | 592 |
| 589 const std::vector<SpdyWebSocketStreamEvent>& block_events = | 593 const std::vector<SpdyWebSocketStreamEvent>& block_events = |
| (...skipping 29 matching lines...) Expand all Loading... |
| 619 EXPECT_EQ(OK, events[7].result); | 623 EXPECT_EQ(OK, events[7].result); |
| 620 | 624 |
| 621 // EOF close SPDY session. | 625 // EOF close SPDY session. |
| 622 EXPECT_TRUE(!http_session_->spdy_session_pool()->HasSession( | 626 EXPECT_TRUE(!http_session_->spdy_session_pool()->HasSession( |
| 623 host_port_proxy_pair_)); | 627 host_port_proxy_pair_)); |
| 624 EXPECT_TRUE(data()->at_read_eof()); | 628 EXPECT_TRUE(data()->at_read_eof()); |
| 625 EXPECT_TRUE(data()->at_write_eof()); | 629 EXPECT_TRUE(data()->at_write_eof()); |
| 626 } | 630 } |
| 627 | 631 |
| 628 } // namespace net | 632 } // namespace net |
| OLD | NEW |