Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1994)

Side by Side Diff: net/websockets/websocket_channel_test.cc

Issue 667923003: Standardize usage of virtual/override/final in net/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/websockets/websocket_channel.cc ('k') | net/websockets/websocket_deflate_predictor_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/websockets/websocket_channel.h" 5 #include "net/websockets/websocket_channel.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 #include <string.h> 8 #include <string.h>
9 9
10 #include <iostream> 10 #include <iostream>
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 MOCK_METHOD0(OnStartOpeningHandshakeCalled, void()); // NOLINT 185 MOCK_METHOD0(OnStartOpeningHandshakeCalled, void()); // NOLINT
186 MOCK_METHOD0(OnFinishOpeningHandshakeCalled, void()); // NOLINT 186 MOCK_METHOD0(OnFinishOpeningHandshakeCalled, void()); // NOLINT
187 MOCK_METHOD4( 187 MOCK_METHOD4(
188 OnSSLCertificateErrorCalled, 188 OnSSLCertificateErrorCalled,
189 void(SSLErrorCallbacks*, const GURL&, const SSLInfo&, bool)); // NOLINT 189 void(SSLErrorCallbacks*, const GURL&, const SSLInfo&, bool)); // NOLINT
190 }; 190 };
191 191
192 // This fake EventInterface is for tests which need a WebSocketEventInterface 192 // This fake EventInterface is for tests which need a WebSocketEventInterface
193 // implementation but are not verifying how it is used. 193 // implementation but are not verifying how it is used.
194 class FakeWebSocketEventInterface : public WebSocketEventInterface { 194 class FakeWebSocketEventInterface : public WebSocketEventInterface {
195 virtual ChannelState OnAddChannelResponse( 195 ChannelState OnAddChannelResponse(bool fail,
196 bool fail, 196 const std::string& selected_protocol,
197 const std::string& selected_protocol, 197 const std::string& extensions) override {
198 const std::string& extensions) override {
199 return fail ? CHANNEL_DELETED : CHANNEL_ALIVE; 198 return fail ? CHANNEL_DELETED : CHANNEL_ALIVE;
200 } 199 }
201 virtual ChannelState OnDataFrame(bool fin, 200 ChannelState OnDataFrame(bool fin,
202 WebSocketMessageType type, 201 WebSocketMessageType type,
203 const std::vector<char>& data) override { 202 const std::vector<char>& data) override {
204 return CHANNEL_ALIVE; 203 return CHANNEL_ALIVE;
205 } 204 }
206 virtual ChannelState OnFlowControl(int64 quota) override { 205 ChannelState OnFlowControl(int64 quota) override { return CHANNEL_ALIVE; }
207 return CHANNEL_ALIVE; 206 ChannelState OnClosingHandshake() override { return CHANNEL_ALIVE; }
208 } 207 ChannelState OnFailChannel(const std::string& message) override {
209 virtual ChannelState OnClosingHandshake() override { return CHANNEL_ALIVE; }
210 virtual ChannelState OnFailChannel(const std::string& message) override {
211 return CHANNEL_DELETED; 208 return CHANNEL_DELETED;
212 } 209 }
213 virtual ChannelState OnDropChannel(bool was_clean, 210 ChannelState OnDropChannel(bool was_clean,
214 uint16 code, 211 uint16 code,
215 const std::string& reason) override { 212 const std::string& reason) override {
216 return CHANNEL_DELETED; 213 return CHANNEL_DELETED;
217 } 214 }
218 virtual ChannelState OnStartOpeningHandshake( 215 ChannelState OnStartOpeningHandshake(
219 scoped_ptr<WebSocketHandshakeRequestInfo> request) override { 216 scoped_ptr<WebSocketHandshakeRequestInfo> request) override {
220 return CHANNEL_ALIVE; 217 return CHANNEL_ALIVE;
221 } 218 }
222 virtual ChannelState OnFinishOpeningHandshake( 219 ChannelState OnFinishOpeningHandshake(
223 scoped_ptr<WebSocketHandshakeResponseInfo> response) override { 220 scoped_ptr<WebSocketHandshakeResponseInfo> response) override {
224 return CHANNEL_ALIVE; 221 return CHANNEL_ALIVE;
225 } 222 }
226 virtual ChannelState OnSSLCertificateError( 223 ChannelState OnSSLCertificateError(
227 scoped_ptr<SSLErrorCallbacks> ssl_error_callbacks, 224 scoped_ptr<SSLErrorCallbacks> ssl_error_callbacks,
228 const GURL& url, 225 const GURL& url,
229 const SSLInfo& ssl_info, 226 const SSLInfo& ssl_info,
230 bool fatal) override { 227 bool fatal) override {
231 return CHANNEL_ALIVE; 228 return CHANNEL_ALIVE;
232 } 229 }
233 }; 230 };
234 231
235 // This fake WebSocketStream is for tests that require a WebSocketStream but are 232 // This fake WebSocketStream is for tests that require a WebSocketStream but are
236 // not testing the way it is used. It has minimal functionality to return 233 // not testing the way it is used. It has minimal functionality to return
237 // the |protocol| and |extensions| that it was constructed with. 234 // the |protocol| and |extensions| that it was constructed with.
238 class FakeWebSocketStream : public WebSocketStream { 235 class FakeWebSocketStream : public WebSocketStream {
239 public: 236 public:
240 // Constructs with empty protocol and extensions. 237 // Constructs with empty protocol and extensions.
241 FakeWebSocketStream() {} 238 FakeWebSocketStream() {}
242 239
243 // Constructs with specified protocol and extensions. 240 // Constructs with specified protocol and extensions.
244 FakeWebSocketStream(const std::string& protocol, 241 FakeWebSocketStream(const std::string& protocol,
245 const std::string& extensions) 242 const std::string& extensions)
246 : protocol_(protocol), extensions_(extensions) {} 243 : protocol_(protocol), extensions_(extensions) {}
247 244
248 virtual int ReadFrames(ScopedVector<WebSocketFrame>* frames, 245 int ReadFrames(ScopedVector<WebSocketFrame>* frames,
249 const CompletionCallback& callback) override { 246 const CompletionCallback& callback) override {
250 return ERR_IO_PENDING; 247 return ERR_IO_PENDING;
251 } 248 }
252 249
253 virtual int WriteFrames(ScopedVector<WebSocketFrame>* frames, 250 int WriteFrames(ScopedVector<WebSocketFrame>* frames,
254 const CompletionCallback& callback) override { 251 const CompletionCallback& callback) override {
255 return ERR_IO_PENDING; 252 return ERR_IO_PENDING;
256 } 253 }
257 254
258 virtual void Close() override {} 255 void Close() override {}
259 256
260 // Returns the string passed to the constructor. 257 // Returns the string passed to the constructor.
261 virtual std::string GetSubProtocol() const override { return protocol_; } 258 std::string GetSubProtocol() const override { return protocol_; }
262 259
263 // Returns the string passed to the constructor. 260 // Returns the string passed to the constructor.
264 virtual std::string GetExtensions() const override { return extensions_; } 261 std::string GetExtensions() const override { return extensions_; }
265 262
266 private: 263 private:
267 // The string to return from GetSubProtocol(). 264 // The string to return from GetSubProtocol().
268 std::string protocol_; 265 std::string protocol_;
269 266
270 // The string to return from GetExtensions(). 267 // The string to return from GetExtensions().
271 std::string extensions_; 268 std::string extensions_;
272 }; 269 };
273 270
274 // To make the static initialisers easier to read, we use enums rather than 271 // To make the static initialisers easier to read, we use enums rather than
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 // A FakeWebSocketStream whose ReadFrames() function returns data. 446 // A FakeWebSocketStream whose ReadFrames() function returns data.
450 class ReadableFakeWebSocketStream : public FakeWebSocketStream { 447 class ReadableFakeWebSocketStream : public FakeWebSocketStream {
451 public: 448 public:
452 enum IsSync { SYNC, ASYNC }; 449 enum IsSync { SYNC, ASYNC };
453 450
454 // After constructing the object, call PrepareReadFrames() once for each 451 // After constructing the object, call PrepareReadFrames() once for each
455 // time you wish it to return from the test. 452 // time you wish it to return from the test.
456 ReadableFakeWebSocketStream() : index_(0), read_frames_pending_(false) {} 453 ReadableFakeWebSocketStream() : index_(0), read_frames_pending_(false) {}
457 454
458 // Check that all the prepared responses have been consumed. 455 // Check that all the prepared responses have been consumed.
459 virtual ~ReadableFakeWebSocketStream() { 456 ~ReadableFakeWebSocketStream() override {
460 CHECK(index_ >= responses_.size()); 457 CHECK(index_ >= responses_.size());
461 CHECK(!read_frames_pending_); 458 CHECK(!read_frames_pending_);
462 } 459 }
463 460
464 // Prepares a fake response. Fake responses will be returned from ReadFrames() 461 // Prepares a fake response. Fake responses will be returned from ReadFrames()
465 // in the same order they were prepared with PrepareReadFrames() and 462 // in the same order they were prepared with PrepareReadFrames() and
466 // PrepareReadFramesError(). If |async| is ASYNC, then ReadFrames() will 463 // PrepareReadFramesError(). If |async| is ASYNC, then ReadFrames() will
467 // return ERR_IO_PENDING and the callback will be scheduled to run on the 464 // return ERR_IO_PENDING and the callback will be scheduled to run on the
468 // message loop. This requires the test case to run the message loop. If 465 // message loop. This requires the test case to run the message loop. If
469 // |async| is SYNC, the response will be returned synchronously. |error| is 466 // |async| is SYNC, the response will be returned synchronously. |error| is
(...skipping 15 matching lines...) Expand all
485 ScopedVector<WebSocketFrame> frames) { 482 ScopedVector<WebSocketFrame> frames) {
486 responses_.push_back(new Response(async, error, frames.Pass())); 483 responses_.push_back(new Response(async, error, frames.Pass()));
487 } 484 }
488 485
489 // Prepares a fake error response (ie. there is no data). 486 // Prepares a fake error response (ie. there is no data).
490 void PrepareReadFramesError(IsSync async, int error) { 487 void PrepareReadFramesError(IsSync async, int error) {
491 responses_.push_back( 488 responses_.push_back(
492 new Response(async, error, ScopedVector<WebSocketFrame>())); 489 new Response(async, error, ScopedVector<WebSocketFrame>()));
493 } 490 }
494 491
495 virtual int ReadFrames(ScopedVector<WebSocketFrame>* frames, 492 int ReadFrames(ScopedVector<WebSocketFrame>* frames,
496 const CompletionCallback& callback) override { 493 const CompletionCallback& callback) override {
497 CHECK(!read_frames_pending_); 494 CHECK(!read_frames_pending_);
498 if (index_ >= responses_.size()) 495 if (index_ >= responses_.size())
499 return ERR_IO_PENDING; 496 return ERR_IO_PENDING;
500 if (responses_[index_]->async == ASYNC) { 497 if (responses_[index_]->async == ASYNC) {
501 read_frames_pending_ = true; 498 read_frames_pending_ = true;
502 base::MessageLoop::current()->PostTask( 499 base::MessageLoop::current()->PostTask(
503 FROM_HERE, 500 FROM_HERE,
504 base::Bind(&ReadableFakeWebSocketStream::DoCallback, 501 base::Bind(&ReadableFakeWebSocketStream::DoCallback,
505 base::Unretained(this), 502 base::Unretained(this),
506 frames, 503 frames,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 // to "real" async responses. Once all the prepared responses have been 539 // to "real" async responses. Once all the prepared responses have been
543 // returned, ReadFrames() returns ERR_IO_PENDING but read_frames_pending_ is 540 // returned, ReadFrames() returns ERR_IO_PENDING but read_frames_pending_ is
544 // not set to true. 541 // not set to true.
545 bool read_frames_pending_; 542 bool read_frames_pending_;
546 }; 543 };
547 544
548 // A FakeWebSocketStream where writes always complete successfully and 545 // A FakeWebSocketStream where writes always complete successfully and
549 // synchronously. 546 // synchronously.
550 class WriteableFakeWebSocketStream : public FakeWebSocketStream { 547 class WriteableFakeWebSocketStream : public FakeWebSocketStream {
551 public: 548 public:
552 virtual int WriteFrames(ScopedVector<WebSocketFrame>* frames, 549 int WriteFrames(ScopedVector<WebSocketFrame>* frames,
553 const CompletionCallback& callback) override { 550 const CompletionCallback& callback) override {
554 return OK; 551 return OK;
555 } 552 }
556 }; 553 };
557 554
558 // A FakeWebSocketStream where writes always fail. 555 // A FakeWebSocketStream where writes always fail.
559 class UnWriteableFakeWebSocketStream : public FakeWebSocketStream { 556 class UnWriteableFakeWebSocketStream : public FakeWebSocketStream {
560 public: 557 public:
561 virtual int WriteFrames(ScopedVector<WebSocketFrame>* frames, 558 int WriteFrames(ScopedVector<WebSocketFrame>* frames,
562 const CompletionCallback& callback) override { 559 const CompletionCallback& callback) override {
563 return ERR_CONNECTION_RESET; 560 return ERR_CONNECTION_RESET;
564 } 561 }
565 }; 562 };
566 563
567 // A FakeWebSocketStream which echoes any frames written back. Clears the 564 // A FakeWebSocketStream which echoes any frames written back. Clears the
568 // "masked" header bit, but makes no other checks for validity. Tests using this 565 // "masked" header bit, but makes no other checks for validity. Tests using this
569 // must run the MessageLoop to receive the callback(s). If a message with opcode 566 // must run the MessageLoop to receive the callback(s). If a message with opcode
570 // Close is echoed, then an ERR_CONNECTION_CLOSED is returned in the next 567 // Close is echoed, then an ERR_CONNECTION_CLOSED is returned in the next
571 // callback. The test must do something to cause WriteFrames() to be called, 568 // callback. The test must do something to cause WriteFrames() to be called,
572 // otherwise the ReadFrames() callback will never be called. 569 // otherwise the ReadFrames() callback will never be called.
573 class EchoeyFakeWebSocketStream : public FakeWebSocketStream { 570 class EchoeyFakeWebSocketStream : public FakeWebSocketStream {
574 public: 571 public:
575 EchoeyFakeWebSocketStream() : read_frames_(NULL), done_(false) {} 572 EchoeyFakeWebSocketStream() : read_frames_(NULL), done_(false) {}
576 573
577 virtual int WriteFrames(ScopedVector<WebSocketFrame>* frames, 574 int WriteFrames(ScopedVector<WebSocketFrame>* frames,
578 const CompletionCallback& callback) override { 575 const CompletionCallback& callback) override {
579 // Users of WebSocketStream will not expect the ReadFrames() callback to be 576 // Users of WebSocketStream will not expect the ReadFrames() callback to be
580 // called from within WriteFrames(), so post it to the message loop instead. 577 // called from within WriteFrames(), so post it to the message loop instead.
581 stored_frames_.insert(stored_frames_.end(), frames->begin(), frames->end()); 578 stored_frames_.insert(stored_frames_.end(), frames->begin(), frames->end());
582 frames->weak_clear(); 579 frames->weak_clear();
583 PostCallback(); 580 PostCallback();
584 return OK; 581 return OK;
585 } 582 }
586 583
587 virtual int ReadFrames(ScopedVector<WebSocketFrame>* frames, 584 int ReadFrames(ScopedVector<WebSocketFrame>* frames,
588 const CompletionCallback& callback) override { 585 const CompletionCallback& callback) override {
589 read_callback_ = callback; 586 read_callback_ = callback;
590 read_frames_ = frames; 587 read_frames_ = frames;
591 if (done_) 588 if (done_)
592 PostCallback(); 589 PostCallback();
593 return ERR_IO_PENDING; 590 return ERR_IO_PENDING;
594 } 591 }
595 592
596 private: 593 private:
597 void PostCallback() { 594 void PostCallback() {
598 base::MessageLoop::current()->PostTask( 595 base::MessageLoop::current()->PostTask(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 // This differs from UnWriteableFakeWebSocketStream in that it is asynchronous 637 // This differs from UnWriteableFakeWebSocketStream in that it is asynchronous
641 // and triggers ReadFrames to return a reset as well. Tests using this need to 638 // and triggers ReadFrames to return a reset as well. Tests using this need to
642 // run the message loop. There are two tricky parts here: 639 // run the message loop. There are two tricky parts here:
643 // 1. Calling the write callback may call Close(), after which the read callback 640 // 1. Calling the write callback may call Close(), after which the read callback
644 // should not be called. 641 // should not be called.
645 // 2. Calling either callback may delete the stream altogether. 642 // 2. Calling either callback may delete the stream altogether.
646 class ResetOnWriteFakeWebSocketStream : public FakeWebSocketStream { 643 class ResetOnWriteFakeWebSocketStream : public FakeWebSocketStream {
647 public: 644 public:
648 ResetOnWriteFakeWebSocketStream() : closed_(false), weak_ptr_factory_(this) {} 645 ResetOnWriteFakeWebSocketStream() : closed_(false), weak_ptr_factory_(this) {}
649 646
650 virtual int WriteFrames(ScopedVector<WebSocketFrame>* frames, 647 int WriteFrames(ScopedVector<WebSocketFrame>* frames,
651 const CompletionCallback& callback) override { 648 const CompletionCallback& callback) override {
652 base::MessageLoop::current()->PostTask( 649 base::MessageLoop::current()->PostTask(
653 FROM_HERE, 650 FROM_HERE,
654 base::Bind(&ResetOnWriteFakeWebSocketStream::CallCallbackUnlessClosed, 651 base::Bind(&ResetOnWriteFakeWebSocketStream::CallCallbackUnlessClosed,
655 weak_ptr_factory_.GetWeakPtr(), 652 weak_ptr_factory_.GetWeakPtr(),
656 callback, 653 callback,
657 ERR_CONNECTION_RESET)); 654 ERR_CONNECTION_RESET));
658 base::MessageLoop::current()->PostTask( 655 base::MessageLoop::current()->PostTask(
659 FROM_HERE, 656 FROM_HERE,
660 base::Bind(&ResetOnWriteFakeWebSocketStream::CallCallbackUnlessClosed, 657 base::Bind(&ResetOnWriteFakeWebSocketStream::CallCallbackUnlessClosed,
661 weak_ptr_factory_.GetWeakPtr(), 658 weak_ptr_factory_.GetWeakPtr(),
662 read_callback_, 659 read_callback_,
663 ERR_CONNECTION_RESET)); 660 ERR_CONNECTION_RESET));
664 return ERR_IO_PENDING; 661 return ERR_IO_PENDING;
665 } 662 }
666 663
667 virtual int ReadFrames(ScopedVector<WebSocketFrame>* frames, 664 int ReadFrames(ScopedVector<WebSocketFrame>* frames,
668 const CompletionCallback& callback) override { 665 const CompletionCallback& callback) override {
669 read_callback_ = callback; 666 read_callback_ = callback;
670 return ERR_IO_PENDING; 667 return ERR_IO_PENDING;
671 } 668 }
672 669
673 virtual void Close() override { closed_ = true; } 670 void Close() override { closed_ = true; }
674 671
675 private: 672 private:
676 void CallCallbackUnlessClosed(const CompletionCallback& callback, int value) { 673 void CallCallbackUnlessClosed(const CompletionCallback& callback, int value) {
677 if (!closed_) 674 if (!closed_)
678 callback.Run(value); 675 callback.Run(value);
679 } 676 }
680 677
681 CompletionCallback read_callback_; 678 CompletionCallback read_callback_;
682 bool closed_; 679 bool closed_;
683 // An IO error can result in the socket being deleted, so we use weak pointers 680 // An IO error can result in the socket being deleted, so we use weak pointers
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 // Converts a std::string to a std::vector<char>. For test purposes, it is 726 // Converts a std::string to a std::vector<char>. For test purposes, it is
730 // convenient to be able to specify data as a string, but the 727 // convenient to be able to specify data as a string, but the
731 // WebSocketEventInterface requires the vector<char> type. 728 // WebSocketEventInterface requires the vector<char> type.
732 std::vector<char> AsVector(const std::string& s) { 729 std::vector<char> AsVector(const std::string& s) {
733 return std::vector<char>(s.begin(), s.end()); 730 return std::vector<char>(s.begin(), s.end());
734 } 731 }
735 732
736 class FakeSSLErrorCallbacks 733 class FakeSSLErrorCallbacks
737 : public WebSocketEventInterface::SSLErrorCallbacks { 734 : public WebSocketEventInterface::SSLErrorCallbacks {
738 public: 735 public:
739 virtual void CancelSSLRequest(int error, const SSLInfo* ssl_info) override {} 736 void CancelSSLRequest(int error, const SSLInfo* ssl_info) override {}
740 virtual void ContinueSSLRequest() override {} 737 void ContinueSSLRequest() override {}
741 }; 738 };
742 739
743 // Base class for all test fixtures. 740 // Base class for all test fixtures.
744 class WebSocketChannelTest : public ::testing::Test { 741 class WebSocketChannelTest : public ::testing::Test {
745 protected: 742 protected:
746 WebSocketChannelTest() : stream_(new FakeWebSocketStream) {} 743 WebSocketChannelTest() : stream_(new FakeWebSocketStream) {}
747 744
748 // Creates a new WebSocketChannel and connects it, using the settings stored 745 // Creates a new WebSocketChannel and connects it, using the settings stored
749 // in |connect_data_|. 746 // in |connect_data_|.
750 void CreateChannelAndConnect() { 747 void CreateChannelAndConnect() {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 : deleting_(EVENT_ON_ADD_CHANNEL_RESPONSE | EVENT_ON_DATA_FRAME | 837 : deleting_(EVENT_ON_ADD_CHANNEL_RESPONSE | EVENT_ON_DATA_FRAME |
841 EVENT_ON_FLOW_CONTROL | 838 EVENT_ON_FLOW_CONTROL |
842 EVENT_ON_CLOSING_HANDSHAKE | 839 EVENT_ON_CLOSING_HANDSHAKE |
843 EVENT_ON_FAIL_CHANNEL | 840 EVENT_ON_FAIL_CHANNEL |
844 EVENT_ON_DROP_CHANNEL | 841 EVENT_ON_DROP_CHANNEL |
845 EVENT_ON_START_OPENING_HANDSHAKE | 842 EVENT_ON_START_OPENING_HANDSHAKE |
846 EVENT_ON_FINISH_OPENING_HANDSHAKE | 843 EVENT_ON_FINISH_OPENING_HANDSHAKE |
847 EVENT_ON_SSL_CERTIFICATE_ERROR) {} 844 EVENT_ON_SSL_CERTIFICATE_ERROR) {}
848 // Create a ChannelDeletingFakeWebSocketEventInterface. Defined out-of-line to 845 // Create a ChannelDeletingFakeWebSocketEventInterface. Defined out-of-line to
849 // avoid circular dependency. 846 // avoid circular dependency.
850 virtual scoped_ptr<WebSocketEventInterface> CreateEventInterface() override; 847 scoped_ptr<WebSocketEventInterface> CreateEventInterface() override;
851 848
852 // Tests can set deleting_ to a bitmap of EventInterfaceCall members that they 849 // Tests can set deleting_ to a bitmap of EventInterfaceCall members that they
853 // want to cause Channel deletion. The default is for all calls to cause 850 // want to cause Channel deletion. The default is for all calls to cause
854 // deletion. 851 // deletion.
855 int deleting_; 852 int deleting_;
856 }; 853 };
857 854
858 // A FakeWebSocketEventInterface that deletes the WebSocketChannel on failure to 855 // A FakeWebSocketEventInterface that deletes the WebSocketChannel on failure to
859 // connect. 856 // connect.
860 class ChannelDeletingFakeWebSocketEventInterface 857 class ChannelDeletingFakeWebSocketEventInterface
861 : public FakeWebSocketEventInterface { 858 : public FakeWebSocketEventInterface {
862 public: 859 public:
863 ChannelDeletingFakeWebSocketEventInterface( 860 ChannelDeletingFakeWebSocketEventInterface(
864 WebSocketChannelDeletingTest* fixture) 861 WebSocketChannelDeletingTest* fixture)
865 : fixture_(fixture) {} 862 : fixture_(fixture) {}
866 863
867 virtual ChannelState OnAddChannelResponse( 864 ChannelState OnAddChannelResponse(bool fail,
868 bool fail, 865 const std::string& selected_protocol,
869 const std::string& selected_protocol, 866 const std::string& extensions) override {
870 const std::string& extensions) override {
871 return fixture_->DeleteIfDeleting(EVENT_ON_ADD_CHANNEL_RESPONSE); 867 return fixture_->DeleteIfDeleting(EVENT_ON_ADD_CHANNEL_RESPONSE);
872 } 868 }
873 869
874 virtual ChannelState OnDataFrame(bool fin, 870 ChannelState OnDataFrame(bool fin,
875 WebSocketMessageType type, 871 WebSocketMessageType type,
876 const std::vector<char>& data) override { 872 const std::vector<char>& data) override {
877 return fixture_->DeleteIfDeleting(EVENT_ON_DATA_FRAME); 873 return fixture_->DeleteIfDeleting(EVENT_ON_DATA_FRAME);
878 } 874 }
879 875
880 virtual ChannelState OnFlowControl(int64 quota) override { 876 ChannelState OnFlowControl(int64 quota) override {
881 return fixture_->DeleteIfDeleting(EVENT_ON_FLOW_CONTROL); 877 return fixture_->DeleteIfDeleting(EVENT_ON_FLOW_CONTROL);
882 } 878 }
883 879
884 virtual ChannelState OnClosingHandshake() override { 880 ChannelState OnClosingHandshake() override {
885 return fixture_->DeleteIfDeleting(EVENT_ON_CLOSING_HANDSHAKE); 881 return fixture_->DeleteIfDeleting(EVENT_ON_CLOSING_HANDSHAKE);
886 } 882 }
887 883
888 virtual ChannelState OnFailChannel(const std::string& message) override { 884 ChannelState OnFailChannel(const std::string& message) override {
889 return fixture_->DeleteIfDeleting(EVENT_ON_FAIL_CHANNEL); 885 return fixture_->DeleteIfDeleting(EVENT_ON_FAIL_CHANNEL);
890 } 886 }
891 887
892 virtual ChannelState OnDropChannel(bool was_clean, 888 ChannelState OnDropChannel(bool was_clean,
893 uint16 code, 889 uint16 code,
894 const std::string& reason) override { 890 const std::string& reason) override {
895 return fixture_->DeleteIfDeleting(EVENT_ON_DROP_CHANNEL); 891 return fixture_->DeleteIfDeleting(EVENT_ON_DROP_CHANNEL);
896 } 892 }
897 893
898 virtual ChannelState OnStartOpeningHandshake( 894 ChannelState OnStartOpeningHandshake(
899 scoped_ptr<WebSocketHandshakeRequestInfo> request) override { 895 scoped_ptr<WebSocketHandshakeRequestInfo> request) override {
900 return fixture_->DeleteIfDeleting(EVENT_ON_START_OPENING_HANDSHAKE); 896 return fixture_->DeleteIfDeleting(EVENT_ON_START_OPENING_HANDSHAKE);
901 } 897 }
902 virtual ChannelState OnFinishOpeningHandshake( 898 ChannelState OnFinishOpeningHandshake(
903 scoped_ptr<WebSocketHandshakeResponseInfo> response) override { 899 scoped_ptr<WebSocketHandshakeResponseInfo> response) override {
904 return fixture_->DeleteIfDeleting(EVENT_ON_FINISH_OPENING_HANDSHAKE); 900 return fixture_->DeleteIfDeleting(EVENT_ON_FINISH_OPENING_HANDSHAKE);
905 } 901 }
906 virtual ChannelState OnSSLCertificateError( 902 ChannelState OnSSLCertificateError(
907 scoped_ptr<SSLErrorCallbacks> ssl_error_callbacks, 903 scoped_ptr<SSLErrorCallbacks> ssl_error_callbacks,
908 const GURL& url, 904 const GURL& url,
909 const SSLInfo& ssl_info, 905 const SSLInfo& ssl_info,
910 bool fatal) override { 906 bool fatal) override {
911 return fixture_->DeleteIfDeleting(EVENT_ON_SSL_CERTIFICATE_ERROR); 907 return fixture_->DeleteIfDeleting(EVENT_ON_SSL_CERTIFICATE_ERROR);
912 } 908 }
913 909
914 private: 910 private:
915 // A pointer to the test fixture. Owned by the test harness; this object will 911 // A pointer to the test fixture. Owned by the test harness; this object will
916 // be deleted before it is. 912 // be deleted before it is.
(...skipping 22 matching lines...) Expand all
939 } 935 }
940 936
941 virtual ~WebSocketChannelEventInterfaceTest() { 937 virtual ~WebSocketChannelEventInterfaceTest() {
942 DefaultValue<ChannelState>::Clear(); 938 DefaultValue<ChannelState>::Clear();
943 } 939 }
944 940
945 // Tests using this fixture must set expectations on the event_interface_ mock 941 // Tests using this fixture must set expectations on the event_interface_ mock
946 // object before calling CreateChannelAndConnect() or 942 // object before calling CreateChannelAndConnect() or
947 // CreateChannelAndConnectSuccessfully(). This will only work once per test 943 // CreateChannelAndConnectSuccessfully(). This will only work once per test
948 // case, but once should be enough. 944 // case, but once should be enough.
949 virtual scoped_ptr<WebSocketEventInterface> CreateEventInterface() override { 945 scoped_ptr<WebSocketEventInterface> CreateEventInterface() override {
950 return scoped_ptr<WebSocketEventInterface>(event_interface_.release()); 946 return scoped_ptr<WebSocketEventInterface>(event_interface_.release());
951 } 947 }
952 948
953 scoped_ptr<MockWebSocketEventInterface> event_interface_; 949 scoped_ptr<MockWebSocketEventInterface> event_interface_;
954 }; 950 };
955 951
956 // Base class for tests which verify that WebSocketStream methods are called 952 // Base class for tests which verify that WebSocketStream methods are called
957 // appropriately by using a MockWebSocketStream. 953 // appropriately by using a MockWebSocketStream.
958 class WebSocketChannelStreamTest : public WebSocketChannelTest { 954 class WebSocketChannelStreamTest : public WebSocketChannelTest {
959 protected: 955 protected:
960 WebSocketChannelStreamTest() 956 WebSocketChannelStreamTest()
961 : mock_stream_(new StrictMock<MockWebSocketStream>) {} 957 : mock_stream_(new StrictMock<MockWebSocketStream>) {}
962 958
963 virtual void CreateChannelAndConnectSuccessfully() override { 959 void CreateChannelAndConnectSuccessfully() override {
964 set_stream(mock_stream_.Pass()); 960 set_stream(mock_stream_.Pass());
965 WebSocketChannelTest::CreateChannelAndConnectSuccessfully(); 961 WebSocketChannelTest::CreateChannelAndConnectSuccessfully();
966 } 962 }
967 963
968 scoped_ptr<MockWebSocketStream> mock_stream_; 964 scoped_ptr<MockWebSocketStream> mock_stream_;
969 }; 965 };
970 966
971 // Fixture for tests which test UTF-8 validation of sent Text frames via the 967 // Fixture for tests which test UTF-8 validation of sent Text frames via the
972 // EventInterface. 968 // EventInterface.
973 class WebSocketChannelSendUtf8Test 969 class WebSocketChannelSendUtf8Test
(...skipping 2333 matching lines...) Expand 10 before | Expand all | Expand 10 after
3307 EXPECT_CALL(*mock_stream_, Close()); 3303 EXPECT_CALL(*mock_stream_, Close());
3308 3304
3309 CreateChannelAndConnectSuccessfully(); 3305 CreateChannelAndConnectSuccessfully();
3310 } 3306 }
3311 3307
3312 // Set the closing handshake timeout to a very tiny value before connecting. 3308 // Set the closing handshake timeout to a very tiny value before connecting.
3313 class WebSocketChannelStreamTimeoutTest : public WebSocketChannelStreamTest { 3309 class WebSocketChannelStreamTimeoutTest : public WebSocketChannelStreamTest {
3314 protected: 3310 protected:
3315 WebSocketChannelStreamTimeoutTest() {} 3311 WebSocketChannelStreamTimeoutTest() {}
3316 3312
3317 virtual void CreateChannelAndConnectSuccessfully() override { 3313 void CreateChannelAndConnectSuccessfully() override {
3318 set_stream(mock_stream_.Pass()); 3314 set_stream(mock_stream_.Pass());
3319 CreateChannelAndConnect(); 3315 CreateChannelAndConnect();
3320 channel_->SendFlowControl(kPlentyOfQuota); 3316 channel_->SendFlowControl(kPlentyOfQuota);
3321 channel_->SetClosingHandshakeTimeoutForTesting( 3317 channel_->SetClosingHandshakeTimeoutForTesting(
3322 TimeDelta::FromMilliseconds(kVeryTinyTimeoutMillis)); 3318 TimeDelta::FromMilliseconds(kVeryTinyTimeoutMillis));
3323 connect_data_.creator.connect_delegate->OnSuccess(stream_.Pass()); 3319 connect_data_.creator.connect_delegate->OnSuccess(stream_.Pass());
3324 } 3320 }
3325 }; 3321 };
3326 3322
3327 // In this case the server initiates the closing handshake with a Close 3323 // In this case the server initiates the closing handshake with a Close
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
3425 channel_->StartClosingHandshake(kWebSocketNormalClosure, "OK"); 3421 channel_->StartClosingHandshake(kWebSocketNormalClosure, "OK");
3426 ASSERT_TRUE(read_frames); 3422 ASSERT_TRUE(read_frames);
3427 // Provide the "Close" message from the server. 3423 // Provide the "Close" message from the server.
3428 *read_frames = CreateFrameVector(frames); 3424 *read_frames = CreateFrameVector(frames);
3429 read_callback.Run(OK); 3425 read_callback.Run(OK);
3430 completion.WaitForResult(); 3426 completion.WaitForResult();
3431 } 3427 }
3432 3428
3433 } // namespace 3429 } // namespace
3434 } // namespace net 3430 } // namespace net
OLDNEW
« no previous file with comments | « net/websockets/websocket_channel.cc ('k') | net/websockets/websocket_deflate_predictor_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698