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

Side by Side Diff: webkit/glue/websocketstreamhandle_impl.cc

Issue 243108: Enable WebSocket in test_shell (Closed)
Patch Set: add +net/socket_stream in webkit/DEPS Created 11 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
OLDNEW
(Empty)
1 // Copyright (c) 2009 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 // An implementation of WebSocketStreamHandle.
6
7 #include "webkit/glue/websocketstreamhandle_impl.h"
8
9 #include <vector>
10
11 #include "base/compiler_specific.h"
12 #include "base/logging.h"
13 #include "base/ref_counted.h"
14 #include "base/scoped_ptr.h"
15 #include "webkit/api/public/WebData.h"
16 #include "webkit/api/public/WebURL.h"
17 #include "webkit/api/public/WebSocketStreamHandleClient.h"
18 #include "webkit/glue/websocketstreamhandle_bridge.h"
19 #include "webkit/glue/websocketstreamhandle_delegate.h"
20
21 namespace webkit_glue {
22
23 // WebSocketStreamHandleImpl::Context -----------------------------------------
24
25 class WebSocketStreamHandleImpl::Context
26 : public base::RefCounted<Context>,
27 public WebSocketStreamHandleDelegate {
28 public:
29 explicit Context(WebSocketStreamHandleImpl* handle);
30
31 WebKit::WebSocketStreamHandleClient* client() const { return client_; }
32 void set_client(WebKit::WebSocketStreamHandleClient* client) {
33 client_ = client;
34 }
35
36 void Connect(const WebKit::WebURL& url);
37 bool Send(const WebKit::WebData& data);
38 void Close();
39
40 // WebSocketStreamHandleDelegate methods:
41 virtual void WillOpenStream(WebKit::WebSocketStreamHandle*, const GURL&);
42 virtual void DidOpenStream(WebKit::WebSocketStreamHandle*, int);
43 virtual void DidSendData(WebKit::WebSocketStreamHandle*, int);
44 virtual void DidReceiveData(
45 WebKit::WebSocketStreamHandle*, const char*, int);
46 virtual void DidClose(WebKit::WebSocketStreamHandle*);
47
48 private:
49 friend class base::RefCounted<Context>;
50 ~Context() {}
51
52 WebSocketStreamHandleImpl* handle_;
53 WebKit::WebSocketStreamHandleClient* client_;
54 WebSocketStreamHandleBridge* bridge_;
55
56 DISALLOW_COPY_AND_ASSIGN(Context);
57 };
58
59 WebSocketStreamHandleImpl::Context::Context(WebSocketStreamHandleImpl* handle)
60 : handle_(handle),
61 client_(NULL),
62 bridge_(ALLOW_THIS_IN_INITIALIZER_LIST(
63 WebSocketStreamHandleBridge::Create(handle_, this))) {
64 }
65
66 void WebSocketStreamHandleImpl::Context::Connect(const WebKit::WebURL& url) {
67 LOG(INFO) << "Connect url=" << url;
68 DCHECK(bridge_);
69 bridge_->Connect(url);
70 }
71
72 bool WebSocketStreamHandleImpl::Context::Send(const WebKit::WebData& data) {
73 LOG(INFO) << "Send data.size=" << data.size();
74 DCHECK(bridge_);
75 return bridge_->Send(
76 std::vector<char>(data.data(), data.data() + data.size()));
77 }
78
79 void WebSocketStreamHandleImpl::Context::Close() {
80 LOG(INFO) << "Close";
81 if (bridge_)
82 bridge_->Close();
83 }
84
85 void WebSocketStreamHandleImpl::Context::WillOpenStream(
86 WebKit::WebSocketStreamHandle* web_handle, const GURL& url) {
87 LOG(INFO) << "WillOpenStream url=" << url;
88 if (client_)
89 client_->willOpenStream(handle_, url);
90 }
91
92 void WebSocketStreamHandleImpl::Context::DidOpenStream(
93 WebKit::WebSocketStreamHandle* web_handle, int max_amount_send_allowed) {
94 LOG(INFO) << "DidOpen";
95 if (client_)
96 client_->didOpenStream(handle_, max_amount_send_allowed);
97 }
98
99 void WebSocketStreamHandleImpl::Context::DidSendData(
100 WebKit::WebSocketStreamHandle* web_handle, int amount_sent) {
101 if (client_)
102 client_->didSendData(handle_, amount_sent);
103 }
104
105 void WebSocketStreamHandleImpl::Context::DidReceiveData(
106 WebKit::WebSocketStreamHandle* web_handle, const char* data, int size) {
107 if (client_)
108 client_->didReceiveData(handle_, WebKit::WebData(data, size));
109 }
110
111 void WebSocketStreamHandleImpl::Context::DidClose(
112 WebKit::WebSocketStreamHandle* web_handle) {
113 LOG(INFO) << "DidClose";
114 bridge_ = 0;
115 WebSocketStreamHandleImpl* handle = handle_;
116 handle_ = 0;
117 if (client_) {
118 WebKit::WebSocketStreamHandleClient* client = client_;
119 client_ = NULL;
120 client->didClose(handle);
121 }
122 }
123
124 // WebSocketStreamHandleImpl ------------------------------------------------
125
126 WebSocketStreamHandleImpl::WebSocketStreamHandleImpl()
127 : ALLOW_THIS_IN_INITIALIZER_LIST(context_(new Context(this))) {
128 }
129
130 WebSocketStreamHandleImpl::~WebSocketStreamHandleImpl() {
131 close();
132 }
133
134 void WebSocketStreamHandleImpl::connect(
135 const WebKit::WebURL& url, WebKit::WebSocketStreamHandleClient* client) {
136 LOG(INFO) << "connect url=" << url;
137 DCHECK(!context_->client());
138 context_->set_client(client);
139
140 context_->Connect(url);
141 }
142
143 bool WebSocketStreamHandleImpl::send(const WebKit::WebData& data) {
144 return context_->Send(data);
145 }
146
147 void WebSocketStreamHandleImpl::close() {
148 context_->Close();
149 }
150
151 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « webkit/glue/websocketstreamhandle_impl.h ('k') | webkit/tools/layout_tests/test_expectations.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698