blob: 7ac9acd0c59c371cfc205970302ad490fd7ed7fb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef WEBKIT_PLUGINS_PPAPI_PPB_WEBSOCKET_IMPL_H_
#define WEBKIT_PLUGINS_PPAPI_PPB_WEBSOCKET_IMPL_H_
#include <queue>
#include "base/memory/scoped_ptr.h"
#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_websocket_api.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSocketClient.h"
struct PPB_Var;
namespace ppapi {
class StringVar;
}
namespace WebKit {
class WebSocket;
}
namespace webkit {
namespace ppapi {
// All implementation is in this class for now. We should move some common
// implementation to shared_impl when we implement proxy interfaces.
class PPB_WebSocket_Impl : public ::ppapi::Resource,
public ::ppapi::thunk::PPB_WebSocket_API,
public ::WebKit::WebSocketClient {
public:
explicit PPB_WebSocket_Impl(PP_Instance instance);
virtual ~PPB_WebSocket_Impl();
static PP_Resource Create(PP_Instance instance);
// Resource overrides.
virtual ::ppapi::thunk::PPB_WebSocket_API* AsPPB_WebSocket_API() OVERRIDE;
// PPB_WebSocket_API implementation.
virtual int32_t Connect(PP_Var url,
const PP_Var protocols[],
uint32_t protocol_count,
PP_CompletionCallback callback) OVERRIDE;
virtual int32_t Close(uint16_t code,
PP_Var reason,
PP_CompletionCallback callback) OVERRIDE;
virtual int32_t ReceiveMessage(PP_Var* message,
PP_CompletionCallback callbac) OVERRIDE;
virtual int32_t SendMessage(PP_Var message) OVERRIDE;
virtual uint64_t GetBufferedAmount() OVERRIDE;
virtual uint16_t GetCloseCode() OVERRIDE;
virtual PP_Var GetCloseReason() OVERRIDE;
virtual PP_Bool GetCloseWasClean() OVERRIDE;
virtual PP_Var GetExtensions() OVERRIDE;
virtual PP_Var GetProtocol() OVERRIDE;
virtual PP_WebSocketReadyState_Dev GetReadyState() OVERRIDE;
virtual PP_Var GetURL() OVERRIDE;
// WebSocketClient implementation.
virtual void didConnect();
virtual void didReceiveMessage(const WebKit::WebString& message);
virtual void didReceiveBinaryData(const WebKit::WebData& binaryData);
virtual void didReceiveMessageError();
virtual void didUpdateBufferedAmount(unsigned long buffered_amount);
virtual void didStartClosingHandshake();
virtual void didClose(unsigned long unhandled_buffered_amount,
ClosingHandshakeCompletionStatus status,
unsigned short code,
const WebKit::WebString& reason);
private:
int32_t DoReceive();
scoped_ptr<WebKit::WebSocket> websocket_;
PP_WebSocketReadyState_Dev state_;
bool error_was_received_;
PP_CompletionCallback connect_callback_;
PP_CompletionCallback receive_callback_;
PP_Var* receive_callback_var_;
bool wait_for_receive_;
// TODO(toyoshim): Use std::queue<Var> when it supports binary.
std::queue<PP_Var> received_messages_;
PP_CompletionCallback close_callback_;
uint16_t close_code_;
scoped_refptr< ::ppapi::StringVar> close_reason_;
PP_Bool close_was_clean_;
scoped_refptr< ::ppapi::StringVar> empty_string_;
scoped_refptr< ::ppapi::StringVar> extensions_;
scoped_refptr< ::ppapi::StringVar> url_;
uint64_t buffered_amount_;
uint64_t buffered_amount_after_close_;
DISALLOW_COPY_AND_ASSIGN(PPB_WebSocket_Impl);
};
} // namespace ppapi
} // namespace webkit
#endif // WEBKIT_PLUGINS_PPAPI_PPB_WEBSOCKET_IMPL_H_
|