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/socket_stream/socket_stream.h" | 5 #include "net/socket_stream/socket_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 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 frame.push_back('\xff'); | 311 frame.push_back('\xff'); |
312 EXPECT_TRUE(event->socket->SendData(&frame[0], frame.size())); | 312 EXPECT_TRUE(event->socket->SendData(&frame[0], frame.size())); |
313 } | 313 } |
314 // Actual StreamSocket close must happen after all frames queued by | 314 // Actual StreamSocket close must happen after all frames queued by |
315 // SendData above are sent out. | 315 // SendData above are sent out. |
316 event->socket->Close(); | 316 event->socket->Close(); |
317 } | 317 } |
318 | 318 |
319 virtual void DoCloseFlushPendingWriteTestWithSetContextNull( | 319 virtual void DoCloseFlushPendingWriteTestWithSetContextNull( |
320 SocketStreamEvent* event) { | 320 SocketStreamEvent* event) { |
321 event->socket->DetachContext(); | 321 event->socket->set_context(NULL); |
322 // handshake response received. | 322 // handshake response received. |
323 for (size_t i = 0; i < messages_.size(); i++) { | 323 for (size_t i = 0; i < messages_.size(); i++) { |
324 std::vector<char> frame; | 324 std::vector<char> frame; |
325 frame.push_back('\0'); | 325 frame.push_back('\0'); |
326 frame.insert(frame.end(), messages_[i].begin(), messages_[i].end()); | 326 frame.insert(frame.end(), messages_[i].begin(), messages_[i].end()); |
327 frame.push_back('\xff'); | 327 frame.push_back('\xff'); |
328 EXPECT_TRUE(event->socket->SendData(&frame[0], frame.size())); | 328 EXPECT_TRUE(event->socket->SendData(&frame[0], frame.size())); |
329 } | 329 } |
330 // Actual StreamSocket close must happen after all frames queued by | 330 // Actual StreamSocket close must happen after all frames queued by |
331 // SendData above are sent out. | 331 // SendData above are sent out. |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 new SocketStreamEventRecorder(test_callback.callback())); | 393 new SocketStreamEventRecorder(test_callback.callback())); |
394 delegate->SetOnConnected(base::Bind( | 394 delegate->SetOnConnected(base::Bind( |
395 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); | 395 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); |
396 delegate->SetOnReceivedData(base::Bind( | 396 delegate->SetOnReceivedData(base::Bind( |
397 &SocketStreamTest::DoCloseFlushPendingWriteTest, | 397 &SocketStreamTest::DoCloseFlushPendingWriteTest, |
398 base::Unretained(this))); | 398 base::Unretained(this))); |
399 | 399 |
400 TestURLRequestContext context; | 400 TestURLRequestContext context; |
401 | 401 |
402 scoped_refptr<SocketStream> socket_stream( | 402 scoped_refptr<SocketStream> socket_stream( |
403 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 403 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
404 &context, NULL)); | 404 |
| 405 socket_stream->set_context(&context); |
405 | 406 |
406 MockWrite data_writes[] = { | 407 MockWrite data_writes[] = { |
407 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), | 408 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), |
408 MockWrite(ASYNC, "\0message1\xff", 10), | 409 MockWrite(ASYNC, "\0message1\xff", 10), |
409 MockWrite(ASYNC, "\0message2\xff", 10) | 410 MockWrite(ASYNC, "\0message2\xff", 10) |
410 }; | 411 }; |
411 MockRead data_reads[] = { | 412 MockRead data_reads[] = { |
412 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), | 413 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), |
413 // Server doesn't close the connection after handshake. | 414 // Server doesn't close the connection after handshake. |
414 MockRead(ASYNC, ERR_IO_PENDING) | 415 MockRead(ASYNC, ERR_IO_PENDING) |
(...skipping 30 matching lines...) Expand all Loading... |
445 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[5].event_type); | 446 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[5].event_type); |
446 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[6].event_type); | 447 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[6].event_type); |
447 } | 448 } |
448 | 449 |
449 TEST_F(SocketStreamTest, ResolveFailure) { | 450 TEST_F(SocketStreamTest, ResolveFailure) { |
450 TestCompletionCallback test_callback; | 451 TestCompletionCallback test_callback; |
451 | 452 |
452 scoped_ptr<SocketStreamEventRecorder> delegate( | 453 scoped_ptr<SocketStreamEventRecorder> delegate( |
453 new SocketStreamEventRecorder(test_callback.callback())); | 454 new SocketStreamEventRecorder(test_callback.callback())); |
454 | 455 |
| 456 scoped_refptr<SocketStream> socket_stream( |
| 457 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 458 |
455 // Make resolver fail. | 459 // Make resolver fail. |
456 TestURLRequestContext context; | 460 TestURLRequestContext context; |
457 scoped_ptr<MockHostResolver> mock_host_resolver( | 461 scoped_ptr<MockHostResolver> mock_host_resolver( |
458 new MockHostResolver()); | 462 new MockHostResolver()); |
459 mock_host_resolver->rules()->AddSimulatedFailure("example.com"); | 463 mock_host_resolver->rules()->AddSimulatedFailure("example.com"); |
460 context.set_host_resolver(mock_host_resolver.get()); | 464 context.set_host_resolver(mock_host_resolver.get()); |
461 | 465 socket_stream->set_context(&context); |
462 scoped_refptr<SocketStream> socket_stream( | |
463 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | |
464 &context, NULL)); | |
465 | 466 |
466 // No read/write on socket is expected. | 467 // No read/write on socket is expected. |
467 StaticSocketDataProvider data_provider(NULL, 0, NULL, 0); | 468 StaticSocketDataProvider data_provider(NULL, 0, NULL, 0); |
468 MockClientSocketFactory* mock_socket_factory = | 469 MockClientSocketFactory* mock_socket_factory = |
469 GetMockClientSocketFactory(); | 470 GetMockClientSocketFactory(); |
470 mock_socket_factory->AddSocketDataProvider(&data_provider); | 471 mock_socket_factory->AddSocketDataProvider(&data_provider); |
471 socket_stream->SetClientSocketFactory(mock_socket_factory); | 472 socket_stream->SetClientSocketFactory(mock_socket_factory); |
472 | 473 |
473 socket_stream->Connect(); | 474 socket_stream->Connect(); |
474 | 475 |
(...skipping 10 matching lines...) Expand all Loading... |
485 TestCompletionCallback test_callback; | 486 TestCompletionCallback test_callback; |
486 | 487 |
487 scoped_ptr<SocketStreamEventRecorder> delegate( | 488 scoped_ptr<SocketStreamEventRecorder> delegate( |
488 new SocketStreamEventRecorder(test_callback.callback())); | 489 new SocketStreamEventRecorder(test_callback.callback())); |
489 delegate->SetOnConnected(base::Bind( | 490 delegate->SetOnConnected(base::Bind( |
490 &SocketStreamTest::DoFailByTooBigDataAndClose, base::Unretained(this))); | 491 &SocketStreamTest::DoFailByTooBigDataAndClose, base::Unretained(this))); |
491 | 492 |
492 TestURLRequestContext context; | 493 TestURLRequestContext context; |
493 | 494 |
494 scoped_refptr<SocketStream> socket_stream( | 495 scoped_refptr<SocketStream> socket_stream( |
495 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 496 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
496 &context, NULL)); | 497 |
| 498 socket_stream->set_context(&context); |
497 | 499 |
498 DelayedSocketData data_provider(1, NULL, 0, NULL, 0); | 500 DelayedSocketData data_provider(1, NULL, 0, NULL, 0); |
499 | 501 |
500 MockClientSocketFactory* mock_socket_factory = | 502 MockClientSocketFactory* mock_socket_factory = |
501 GetMockClientSocketFactory(); | 503 GetMockClientSocketFactory(); |
502 mock_socket_factory->AddSocketDataProvider(&data_provider); | 504 mock_socket_factory->AddSocketDataProvider(&data_provider); |
503 | 505 |
504 socket_stream->SetClientSocketFactory(mock_socket_factory); | 506 socket_stream->SetClientSocketFactory(mock_socket_factory); |
505 | 507 |
506 socket_stream->Connect(); | 508 socket_stream->Connect(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 scoped_ptr<SocketStreamEventRecorder> delegate( | 559 scoped_ptr<SocketStreamEventRecorder> delegate( |
558 new SocketStreamEventRecorder(test_callback.callback())); | 560 new SocketStreamEventRecorder(test_callback.callback())); |
559 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, | 561 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
560 base::Unretained(delegate.get()))); | 562 base::Unretained(delegate.get()))); |
561 delegate->SetAuthInfo(AuthCredentials(ASCIIToUTF16("foo"), | 563 delegate->SetAuthInfo(AuthCredentials(ASCIIToUTF16("foo"), |
562 ASCIIToUTF16("bar"))); | 564 ASCIIToUTF16("bar"))); |
563 delegate->SetOnAuthRequired(base::Bind( | 565 delegate->SetOnAuthRequired(base::Bind( |
564 &SocketStreamEventRecorder::DoRestartWithAuth, | 566 &SocketStreamEventRecorder::DoRestartWithAuth, |
565 base::Unretained(delegate.get()))); | 567 base::Unretained(delegate.get()))); |
566 | 568 |
| 569 scoped_refptr<SocketStream> socket_stream( |
| 570 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 571 |
567 TestURLRequestContextWithProxy context("myproxy:70"); | 572 TestURLRequestContextWithProxy context("myproxy:70"); |
568 | 573 |
569 scoped_refptr<SocketStream> socket_stream( | 574 socket_stream->set_context(&context); |
570 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | |
571 &context, NULL)); | |
572 | |
573 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 575 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
574 | 576 |
575 socket_stream->Connect(); | 577 socket_stream->Connect(); |
576 | 578 |
577 test_callback.WaitForResult(); | 579 test_callback.WaitForResult(); |
578 | 580 |
579 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 581 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
580 ASSERT_EQ(5U, events.size()); | 582 ASSERT_EQ(5U, events.size()); |
581 | 583 |
582 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 584 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
(...skipping 26 matching lines...) Expand all Loading... |
609 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 611 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
610 data_writes, arraysize(data_writes)); | 612 data_writes, arraysize(data_writes)); |
611 mock_socket_factory.AddSocketDataProvider(&data); | 613 mock_socket_factory.AddSocketDataProvider(&data); |
612 | 614 |
613 TestCompletionCallback test_callback; | 615 TestCompletionCallback test_callback; |
614 scoped_ptr<SocketStreamEventRecorder> delegate( | 616 scoped_ptr<SocketStreamEventRecorder> delegate( |
615 new SocketStreamEventRecorder(test_callback.callback())); | 617 new SocketStreamEventRecorder(test_callback.callback())); |
616 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, | 618 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
617 base::Unretained(delegate.get()))); | 619 base::Unretained(delegate.get()))); |
618 | 620 |
| 621 scoped_refptr<SocketStream> socket_stream( |
| 622 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 623 |
619 TestURLRequestContextWithProxy context("myproxy:70"); | 624 TestURLRequestContextWithProxy context("myproxy:70"); |
620 HttpAuthCache* auth_cache = | 625 HttpAuthCache* auth_cache = |
621 context.http_transaction_factory()->GetSession()->http_auth_cache(); | 626 context.http_transaction_factory()->GetSession()->http_auth_cache(); |
622 auth_cache->Add(GURL("http://myproxy:70"), | 627 auth_cache->Add(GURL("http://myproxy:70"), |
623 "MyRealm1", | 628 "MyRealm1", |
624 HttpAuth::AUTH_SCHEME_BASIC, | 629 HttpAuth::AUTH_SCHEME_BASIC, |
625 "Basic realm=MyRealm1", | 630 "Basic realm=MyRealm1", |
626 AuthCredentials(ASCIIToUTF16("foo"), | 631 AuthCredentials(ASCIIToUTF16("foo"), |
627 ASCIIToUTF16("bar")), | 632 ASCIIToUTF16("bar")), |
628 "/"); | 633 "/"); |
629 | 634 |
630 scoped_refptr<SocketStream> socket_stream( | 635 socket_stream->set_context(&context); |
631 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | |
632 &context, NULL)); | |
633 | |
634 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 636 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
635 | 637 |
636 socket_stream->Connect(); | 638 socket_stream->Connect(); |
637 | 639 |
638 test_callback.WaitForResult(); | 640 test_callback.WaitForResult(); |
639 | 641 |
640 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 642 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
641 ASSERT_EQ(4U, events.size()); | 643 ASSERT_EQ(4U, events.size()); |
642 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 644 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
643 events[0].event_type); | 645 events[0].event_type); |
(...skipping 22 matching lines...) Expand all Loading... |
666 | 668 |
667 SSLSocketDataProvider data2(ASYNC, OK); | 669 SSLSocketDataProvider data2(ASYNC, OK); |
668 mock_socket_factory.AddSSLSocketDataProvider(&data2); | 670 mock_socket_factory.AddSSLSocketDataProvider(&data2); |
669 | 671 |
670 TestCompletionCallback test_callback; | 672 TestCompletionCallback test_callback; |
671 scoped_ptr<SocketStreamEventRecorder> delegate( | 673 scoped_ptr<SocketStreamEventRecorder> delegate( |
672 new SocketStreamEventRecorder(test_callback.callback())); | 674 new SocketStreamEventRecorder(test_callback.callback())); |
673 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, | 675 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
674 base::Unretained(delegate.get()))); | 676 base::Unretained(delegate.get()))); |
675 | 677 |
| 678 scoped_refptr<SocketStream> socket_stream( |
| 679 new SocketStream(GURL("wss://example.com/demo"), delegate.get())); |
| 680 |
676 TestURLRequestContextWithProxy context("myproxy:70"); | 681 TestURLRequestContextWithProxy context("myproxy:70"); |
677 HttpAuthCache* auth_cache = | 682 HttpAuthCache* auth_cache = |
678 context.http_transaction_factory()->GetSession()->http_auth_cache(); | 683 context.http_transaction_factory()->GetSession()->http_auth_cache(); |
679 auth_cache->Add(GURL("http://myproxy:70"), | 684 auth_cache->Add(GURL("http://myproxy:70"), |
680 "MyRealm1", | 685 "MyRealm1", |
681 HttpAuth::AUTH_SCHEME_BASIC, | 686 HttpAuth::AUTH_SCHEME_BASIC, |
682 "Basic realm=MyRealm1", | 687 "Basic realm=MyRealm1", |
683 AuthCredentials(ASCIIToUTF16("foo"), | 688 AuthCredentials(ASCIIToUTF16("foo"), |
684 ASCIIToUTF16("bar")), | 689 ASCIIToUTF16("bar")), |
685 "/"); | 690 "/"); |
686 | 691 |
687 scoped_refptr<SocketStream> socket_stream( | 692 socket_stream->set_context(&context); |
688 new SocketStream(GURL("wss://example.com/demo"), delegate.get(), | |
689 &context, NULL)); | |
690 | |
691 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 693 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
692 | 694 |
693 socket_stream->Connect(); | 695 socket_stream->Connect(); |
694 | 696 |
695 test_callback.WaitForResult(); | 697 test_callback.WaitForResult(); |
696 | 698 |
697 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 699 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
698 ASSERT_EQ(4U, events.size()); | 700 ASSERT_EQ(4U, events.size()); |
699 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 701 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
700 events[0].event_type); | 702 events[0].event_type); |
(...skipping 11 matching lines...) Expand all Loading... |
712 &SocketStreamTest::DoIOPending, base::Unretained(this))); | 714 &SocketStreamTest::DoIOPending, base::Unretained(this))); |
713 delegate->SetOnConnected(base::Bind( | 715 delegate->SetOnConnected(base::Bind( |
714 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); | 716 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); |
715 delegate->SetOnReceivedData(base::Bind( | 717 delegate->SetOnReceivedData(base::Bind( |
716 &SocketStreamTest::DoCloseFlushPendingWriteTest, | 718 &SocketStreamTest::DoCloseFlushPendingWriteTest, |
717 base::Unretained(this))); | 719 base::Unretained(this))); |
718 | 720 |
719 TestURLRequestContext context; | 721 TestURLRequestContext context; |
720 | 722 |
721 scoped_refptr<SocketStream> socket_stream( | 723 scoped_refptr<SocketStream> socket_stream( |
722 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 724 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
723 &context, NULL)); | 725 |
| 726 socket_stream->set_context(&context); |
724 | 727 |
725 MockWrite data_writes[] = { | 728 MockWrite data_writes[] = { |
726 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), | 729 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), |
727 MockWrite(ASYNC, "\0message1\xff", 10), | 730 MockWrite(ASYNC, "\0message1\xff", 10), |
728 MockWrite(ASYNC, "\0message2\xff", 10) | 731 MockWrite(ASYNC, "\0message2\xff", 10) |
729 }; | 732 }; |
730 MockRead data_reads[] = { | 733 MockRead data_reads[] = { |
731 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), | 734 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), |
732 // Server doesn't close the connection after handshake. | 735 // Server doesn't close the connection after handshake. |
733 MockRead(ASYNC, ERR_IO_PENDING) | 736 MockRead(ASYNC, ERR_IO_PENDING) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
773 TestCompletionCallback test_callback; | 776 TestCompletionCallback test_callback; |
774 | 777 |
775 scoped_ptr<SocketStreamEventRecorder> delegate( | 778 scoped_ptr<SocketStreamEventRecorder> delegate( |
776 new SocketStreamEventRecorder(test_callback.callback())); | 779 new SocketStreamEventRecorder(test_callback.callback())); |
777 delegate->SetOnStartOpenConnection(base::Bind( | 780 delegate->SetOnStartOpenConnection(base::Bind( |
778 &SocketStreamTest::DoSwitchToSpdyTest, base::Unretained(this))); | 781 &SocketStreamTest::DoSwitchToSpdyTest, base::Unretained(this))); |
779 | 782 |
780 TestURLRequestContext context; | 783 TestURLRequestContext context; |
781 | 784 |
782 scoped_refptr<SocketStream> socket_stream( | 785 scoped_refptr<SocketStream> socket_stream( |
783 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 786 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
784 &context, NULL)); | 787 |
| 788 socket_stream->set_context(&context); |
785 | 789 |
786 socket_stream->Connect(); | 790 socket_stream->Connect(); |
787 | 791 |
788 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); | 792 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); |
789 | 793 |
790 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 794 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
791 ASSERT_EQ(2U, events.size()); | 795 ASSERT_EQ(2U, events.size()); |
792 | 796 |
793 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 797 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
794 events[0].event_type); | 798 events[0].event_type); |
795 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); | 799 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); |
796 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, events[1].error_code); | 800 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, events[1].error_code); |
797 } | 801 } |
798 | 802 |
799 TEST_F(SocketStreamTest, SwitchAfterPending) { | 803 TEST_F(SocketStreamTest, SwitchAfterPending) { |
800 TestCompletionCallback test_callback; | 804 TestCompletionCallback test_callback; |
801 | 805 |
802 scoped_ptr<SocketStreamEventRecorder> delegate( | 806 scoped_ptr<SocketStreamEventRecorder> delegate( |
803 new SocketStreamEventRecorder(test_callback.callback())); | 807 new SocketStreamEventRecorder(test_callback.callback())); |
804 delegate->SetOnStartOpenConnection(base::Bind( | 808 delegate->SetOnStartOpenConnection(base::Bind( |
805 &SocketStreamTest::DoIOPending, base::Unretained(this))); | 809 &SocketStreamTest::DoIOPending, base::Unretained(this))); |
806 | 810 |
807 TestURLRequestContext context; | 811 TestURLRequestContext context; |
808 | 812 |
809 scoped_refptr<SocketStream> socket_stream( | 813 scoped_refptr<SocketStream> socket_stream( |
810 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 814 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
811 &context, NULL)); | 815 |
| 816 socket_stream->set_context(&context); |
812 | 817 |
813 socket_stream->Connect(); | 818 socket_stream->Connect(); |
814 io_test_callback_.WaitForResult(); | 819 io_test_callback_.WaitForResult(); |
815 | 820 |
816 EXPECT_EQ(SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE, | 821 EXPECT_EQ(SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE, |
817 socket_stream->next_state_); | 822 socket_stream->next_state_); |
818 delegate->CompleteConnection(ERR_PROTOCOL_SWITCHED); | 823 delegate->CompleteConnection(ERR_PROTOCOL_SWITCHED); |
819 | 824 |
820 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); | 825 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); |
821 | 826 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
853 | 858 |
854 TestCompletionCallback test_callback; | 859 TestCompletionCallback test_callback; |
855 TestURLRequestContextWithProxy context("https://myproxy:70"); | 860 TestURLRequestContextWithProxy context("https://myproxy:70"); |
856 | 861 |
857 scoped_ptr<SocketStreamEventRecorder> delegate( | 862 scoped_ptr<SocketStreamEventRecorder> delegate( |
858 new SocketStreamEventRecorder(test_callback.callback())); | 863 new SocketStreamEventRecorder(test_callback.callback())); |
859 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, | 864 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
860 base::Unretained(delegate.get()))); | 865 base::Unretained(delegate.get()))); |
861 | 866 |
862 scoped_refptr<SocketStream> socket_stream( | 867 scoped_refptr<SocketStream> socket_stream( |
863 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 868 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
864 &context, NULL)); | |
865 | 869 |
| 870 socket_stream->set_context(&context); |
866 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 871 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
867 | 872 |
868 socket_stream->Connect(); | 873 socket_stream->Connect(); |
869 | 874 |
870 test_callback.WaitForResult(); | 875 test_callback.WaitForResult(); |
871 | 876 |
872 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 877 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
873 ASSERT_EQ(3U, events.size()); | 878 ASSERT_EQ(3U, events.size()); |
874 | 879 |
875 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 880 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
(...skipping 28 matching lines...) Expand all Loading... |
904 | 909 |
905 TestCompletionCallback test_callback; | 910 TestCompletionCallback test_callback; |
906 TestURLRequestContextWithProxy context("https://myproxy:70"); | 911 TestURLRequestContextWithProxy context("https://myproxy:70"); |
907 | 912 |
908 scoped_ptr<SocketStreamEventRecorder> delegate( | 913 scoped_ptr<SocketStreamEventRecorder> delegate( |
909 new SocketStreamEventRecorder(test_callback.callback())); | 914 new SocketStreamEventRecorder(test_callback.callback())); |
910 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, | 915 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
911 base::Unretained(delegate.get()))); | 916 base::Unretained(delegate.get()))); |
912 | 917 |
913 scoped_refptr<SocketStream> socket_stream( | 918 scoped_refptr<SocketStream> socket_stream( |
914 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 919 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
915 &context, NULL)); | |
916 | 920 |
| 921 socket_stream->set_context(&context); |
917 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 922 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
918 | 923 |
919 socket_stream->Connect(); | 924 socket_stream->Connect(); |
920 | 925 |
921 test_callback.WaitForResult(); | 926 test_callback.WaitForResult(); |
922 | 927 |
923 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 928 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
924 ASSERT_EQ(4U, events.size()); | 929 ASSERT_EQ(4U, events.size()); |
925 | 930 |
926 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 931 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
927 events[0].event_type); | 932 events[0].event_type); |
928 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); | 933 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); |
929 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type); | 934 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type); |
930 EXPECT_EQ(ERR_ABORTED, events[2].error_code); | 935 EXPECT_EQ(ERR_ABORTED, events[2].error_code); |
931 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); | 936 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); |
932 } | 937 } |
933 | 938 |
934 TEST_F(SocketStreamTest, BeforeConnectFailed) { | 939 TEST_F(SocketStreamTest, BeforeConnectFailed) { |
935 TestCompletionCallback test_callback; | 940 TestCompletionCallback test_callback; |
936 | 941 |
937 scoped_ptr<SocketStreamEventRecorder> delegate( | 942 scoped_ptr<SocketStreamEventRecorder> delegate( |
938 new SocketStreamEventRecorder(test_callback.callback())); | 943 new SocketStreamEventRecorder(test_callback.callback())); |
939 | 944 |
940 TestURLRequestContext context; | 945 TestURLRequestContext context; |
941 TestSocketStreamNetworkDelegate network_delegate; | 946 TestSocketStreamNetworkDelegate network_delegate; |
942 network_delegate.SetBeforeConnectResult(ERR_ACCESS_DENIED); | 947 network_delegate.SetBeforeConnectResult(ERR_ACCESS_DENIED); |
943 context.set_network_delegate(&network_delegate); | 948 context.set_network_delegate(&network_delegate); |
944 | 949 |
945 scoped_refptr<SocketStream> socket_stream( | 950 scoped_refptr<SocketStream> socket_stream( |
946 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 951 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
947 &context, NULL)); | 952 |
| 953 socket_stream->set_context(&context); |
948 | 954 |
949 socket_stream->Connect(); | 955 socket_stream->Connect(); |
950 | 956 |
951 test_callback.WaitForResult(); | 957 test_callback.WaitForResult(); |
952 | 958 |
953 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 959 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
954 ASSERT_EQ(2U, events.size()); | 960 ASSERT_EQ(2U, events.size()); |
955 | 961 |
956 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[0].event_type); | 962 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[0].event_type); |
957 EXPECT_EQ(ERR_ACCESS_DENIED, events[0].error_code); | 963 EXPECT_EQ(ERR_ACCESS_DENIED, events[0].error_code); |
(...skipping 10 matching lines...) Expand all Loading... |
968 // connect it and the SocketStream. | 974 // connect it and the SocketStream. |
969 SelfDeletingDelegate* delegate = | 975 SelfDeletingDelegate* delegate = |
970 new SelfDeletingDelegate(test_callback.callback()); | 976 new SelfDeletingDelegate(test_callback.callback()); |
971 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 977 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
972 StaticSocketDataProvider data; | 978 StaticSocketDataProvider data; |
973 data.set_connect_data(mock_connect); | 979 data.set_connect_data(mock_connect); |
974 mock_socket_factory.AddSocketDataProvider(&data); | 980 mock_socket_factory.AddSocketDataProvider(&data); |
975 | 981 |
976 TestURLRequestContext context; | 982 TestURLRequestContext context; |
977 scoped_refptr<SocketStream> socket_stream( | 983 scoped_refptr<SocketStream> socket_stream( |
978 new SocketStream(GURL("ws://localhost:9998/echo"), delegate, | 984 new SocketStream(GURL("ws://localhost:9998/echo"), delegate)); |
979 &context, NULL)); | 985 socket_stream->set_context(&context); |
980 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 986 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
981 delegate->set_socket_stream(socket_stream); | 987 delegate->set_socket_stream(socket_stream); |
982 // The delegate pointer will become invalid during the test. Set it to NULL to | 988 // The delegate pointer will become invalid during the test. Set it to NULL to |
983 // avoid holding a dangling pointer. | 989 // avoid holding a dangling pointer. |
984 delegate = NULL; | 990 delegate = NULL; |
985 | 991 |
986 socket_stream->Connect(); | 992 socket_stream->Connect(); |
987 | 993 |
988 EXPECT_EQ(OK, test_callback.WaitForResult()); | 994 EXPECT_EQ(OK, test_callback.WaitForResult()); |
989 } | 995 } |
990 | 996 |
991 TEST_F(SocketStreamTest, NullContextSocketStreamShouldNotCrash) { | 997 TEST_F(SocketStreamTest, NullContextSocketStreamShouldNotCrash) { |
992 TestCompletionCallback test_callback; | 998 TestCompletionCallback test_callback; |
993 | 999 |
994 scoped_ptr<SocketStreamEventRecorder> delegate( | 1000 scoped_ptr<SocketStreamEventRecorder> delegate( |
995 new SocketStreamEventRecorder(test_callback.callback())); | 1001 new SocketStreamEventRecorder(test_callback.callback())); |
996 TestURLRequestContext context; | 1002 TestURLRequestContext context; |
997 scoped_refptr<SocketStream> socket_stream( | 1003 scoped_refptr<SocketStream> socket_stream( |
998 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), | 1004 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
999 &context, NULL)); | |
1000 delegate->SetOnStartOpenConnection(base::Bind( | 1005 delegate->SetOnStartOpenConnection(base::Bind( |
1001 &SocketStreamTest::DoIOPending, base::Unretained(this))); | 1006 &SocketStreamTest::DoIOPending, base::Unretained(this))); |
1002 delegate->SetOnConnected(base::Bind( | 1007 delegate->SetOnConnected(base::Bind( |
1003 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); | 1008 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); |
1004 delegate->SetOnReceivedData(base::Bind( | 1009 delegate->SetOnReceivedData(base::Bind( |
1005 &SocketStreamTest::DoCloseFlushPendingWriteTestWithSetContextNull, | 1010 &SocketStreamTest::DoCloseFlushPendingWriteTestWithSetContextNull, |
1006 base::Unretained(this))); | 1011 base::Unretained(this))); |
1007 | 1012 |
| 1013 socket_stream->set_context(&context); |
| 1014 |
1008 MockWrite data_writes[] = { | 1015 MockWrite data_writes[] = { |
1009 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), | 1016 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), |
1010 }; | 1017 }; |
1011 MockRead data_reads[] = { | 1018 MockRead data_reads[] = { |
1012 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), | 1019 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), |
1013 }; | 1020 }; |
1014 AddWebSocketMessage("message1"); | 1021 AddWebSocketMessage("message1"); |
1015 AddWebSocketMessage("message2"); | 1022 AddWebSocketMessage("message2"); |
1016 | 1023 |
1017 DelayedSocketData data_provider( | 1024 DelayedSocketData data_provider( |
(...skipping 17 matching lines...) Expand all Loading... |
1035 | 1042 |
1036 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 1043 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
1037 events[0].event_type); | 1044 events[0].event_type); |
1038 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); | 1045 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); |
1039 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type); | 1046 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type); |
1040 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type); | 1047 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type); |
1041 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type); | 1048 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type); |
1042 } | 1049 } |
1043 | 1050 |
1044 } // namespace net | 1051 } // namespace net |
OLD | NEW |