• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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