1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MOJO_SERVICES_HTML_VIEWER_WEBSOCKETHANDLE_IMPL_H_ 6 #define MOJO_SERVICES_HTML_VIEWER_WEBSOCKETHANDLE_IMPL_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "mojo/common/handle_watcher.h" 10 #include "mojo/services/public/interfaces/network/web_socket.mojom.h" 11 #include "third_party/WebKit/public/platform/WebSocketHandle.h" 12 13 namespace mojo { 14 class NetworkService; 15 class WebSocketClientImpl; 16 class WebSocketWriteQueue; 17 18 // Implements WebSocketHandle by talking to the mojo WebSocket interface. 19 class WebSocketHandleImpl : public blink::WebSocketHandle { 20 public: 21 explicit WebSocketHandleImpl(NetworkService* network_service); 22 23 private: 24 friend class WebSocketClientImpl; 25 26 virtual ~WebSocketHandleImpl(); 27 28 // blink::WebSocketHandle methods: 29 virtual void connect(const blink::WebURL& url, 30 const blink::WebVector<blink::WebString>& protocols, 31 const blink::WebSerializedOrigin& origin, 32 blink::WebSocketHandleClient*) OVERRIDE; 33 virtual void send(bool fin, 34 MessageType, 35 const char* data, 36 size_t size) OVERRIDE; 37 virtual void flowControl(int64_t quota) OVERRIDE; 38 virtual void close(unsigned short code, 39 const blink::WebString& reason) OVERRIDE; 40 41 // Called when we finished writing to |send_stream_|. 42 void DidWriteToSendStream(bool fin, 43 WebSocketHandle::MessageType type, 44 uint32_t num_bytes, 45 const char* data); 46 47 // Called when the socket is closed. 48 void Disconnect(); 49 50 WebSocketPtr web_socket_; 51 scoped_ptr<WebSocketClientImpl> client_; 52 ScopedDataPipeProducerHandle send_stream_; 53 scoped_ptr<WebSocketWriteQueue> write_queue_; 54 // True if close() was called. 55 bool did_close_; 56 57 DISALLOW_COPY_AND_ASSIGN(WebSocketHandleImpl); 58 }; 59 60 } // namespace mojo 61 62 #endif // MOJO_SERVICES_HTML_VIEWER_WEBSOCKETHANDLE_IMPL_H_ 63