OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "config.h" | 5 #include "config.h" |
6 #include "modules/websockets/WebSocketChannel.h" | 6 #include "modules/websockets/WebSocketChannel.h" |
7 | 7 |
8 #include "core/fileapi/Blob.h" | 8 #include "core/fileapi/Blob.h" |
9 #include "core/frame/ConsoleTypes.h" | 9 #include "core/frame/ConsoleTypes.h" |
10 #include "core/testing/DummyPageHolder.h" | 10 #include "core/testing/DummyPageHolder.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 MOCK_METHOD0(didStartClosingHandshake, void()); | 62 MOCK_METHOD0(didStartClosingHandshake, void()); |
63 MOCK_METHOD3(didClose, void(ClosingHandshakeCompletionStatus, unsigned short
, const String&)); | 63 MOCK_METHOD3(didClose, void(ClosingHandshakeCompletionStatus, unsigned short
, const String&)); |
64 | 64 |
65 virtual void trace(Visitor* visitor) OVERRIDE | 65 virtual void trace(Visitor* visitor) OVERRIDE |
66 { | 66 { |
67 WebSocketChannelClient::trace(visitor); | 67 WebSocketChannelClient::trace(visitor); |
68 } | 68 } |
69 | 69 |
70 }; | 70 }; |
71 | 71 |
72 class MockWebSocketHandle : public blink::WebSocketHandle { | 72 class MockWebSocketHandle : public WebSocketHandle { |
73 public: | 73 public: |
74 static MockWebSocketHandle* create() | 74 static MockWebSocketHandle* create() |
75 { | 75 { |
76 return new testing::StrictMock<MockWebSocketHandle>(); | 76 return new testing::StrictMock<MockWebSocketHandle>(); |
77 } | 77 } |
78 | 78 |
79 MockWebSocketHandle() { } | 79 MockWebSocketHandle() { } |
80 | 80 |
81 virtual ~MockWebSocketHandle() { } | 81 virtual ~MockWebSocketHandle() { } |
82 | 82 |
83 MOCK_METHOD4(connect, void(const blink::WebURL&, const blink::WebVector<blin
k::WebString>&, const blink::WebSerializedOrigin&, blink::WebSocketHandleClient*
)); | 83 MOCK_METHOD4(connect, void(const WebURL&, const WebVector<WebString>&, const
WebSerializedOrigin&, WebSocketHandleClient*)); |
84 MOCK_METHOD4(send, void(bool, blink::WebSocketHandle::MessageType, const cha
r*, size_t)); | 84 MOCK_METHOD4(send, void(bool, WebSocketHandle::MessageType, const char*, siz
e_t)); |
85 MOCK_METHOD1(flowControl, void(int64_t)); | 85 MOCK_METHOD1(flowControl, void(int64_t)); |
86 MOCK_METHOD2(close, void(unsigned short, const blink::WebString&)); | 86 MOCK_METHOD2(close, void(unsigned short, const WebString&)); |
87 }; | 87 }; |
88 | 88 |
89 class NewWebSocketChannelImplTest : public ::testing::Test { | 89 class NewWebSocketChannelImplTest : public ::testing::Test { |
90 public: | 90 public: |
91 NewWebSocketChannelImplTest() | 91 NewWebSocketChannelImplTest() |
92 : m_pageHolder(DummyPageHolder::create()) | 92 : m_pageHolder(DummyPageHolder::create()) |
93 , m_channelClient(MockWebSocketChannelClient::create()) | 93 , m_channelClient(MockWebSocketChannelClient::create()) |
94 , m_handle(MockWebSocketHandle::create()) | 94 , m_handle(MockWebSocketHandle::create()) |
95 , m_channel(NewWebSocketChannelImpl::create(&m_pageHolder->document(), m
_channelClient.get(), String(), 0, handle())) | 95 , m_channel(NewWebSocketChannelImpl::create(&m_pageHolder->document(), m
_channelClient.get(), String(), 0, handle())) |
96 , m_sumOfConsumedBufferedAmount(0) | 96 , m_sumOfConsumedBufferedAmount(0) |
(...skipping 12 matching lines...) Expand all Loading... |
109 MockWebSocketChannelClient* channelClient() | 109 MockWebSocketChannelClient* channelClient() |
110 { | 110 { |
111 return m_channelClient.get(); | 111 return m_channelClient.get(); |
112 } | 112 } |
113 | 113 |
114 WebSocketChannel* channel() | 114 WebSocketChannel* channel() |
115 { | 115 { |
116 return static_cast<WebSocketChannel*>(m_channel.get()); | 116 return static_cast<WebSocketChannel*>(m_channel.get()); |
117 } | 117 } |
118 | 118 |
119 blink::WebSocketHandleClient* handleClient() | 119 WebSocketHandleClient* handleClient() |
120 { | 120 { |
121 return static_cast<blink::WebSocketHandleClient*>(m_channel.get()); | 121 return static_cast<WebSocketHandleClient*>(m_channel.get()); |
122 } | 122 } |
123 | 123 |
124 MockWebSocketHandle* handle() | 124 MockWebSocketHandle* handle() |
125 { | 125 { |
126 return m_handle; | 126 return m_handle; |
127 } | 127 } |
128 | 128 |
129 void didConsumeBufferedAmount(unsigned long a) | 129 void didConsumeBufferedAmount(unsigned long a) |
130 { | 130 { |
131 m_sumOfConsumedBufferedAmount += a; | 131 m_sumOfConsumedBufferedAmount += a; |
132 } | 132 } |
133 | 133 |
134 void connect() | 134 void connect() |
135 { | 135 { |
136 { | 136 { |
137 InSequence s; | 137 InSequence s; |
138 EXPECT_CALL(*handle(), connect(blink::WebURL(KURL(KURL(), "ws://loca
lhost/")), _, _, handleClient())); | 138 EXPECT_CALL(*handle(), connect(WebURL(KURL(KURL(), "ws://localhost/"
)), _, _, handleClient())); |
139 EXPECT_CALL(*handle(), flowControl(65536)); | 139 EXPECT_CALL(*handle(), flowControl(65536)); |
140 EXPECT_CALL(*channelClient(), didConnect(String("a"), String("b"))); | 140 EXPECT_CALL(*channelClient(), didConnect(String("a"), String("b"))); |
141 } | 141 } |
142 EXPECT_TRUE(channel()->connect(KURL(KURL(), "ws://localhost/"), "x")); | 142 EXPECT_TRUE(channel()->connect(KURL(KURL(), "ws://localhost/"), "x")); |
143 handleClient()->didConnect(handle(), false, blink::WebString("a"), blink
::WebString("b")); | 143 handleClient()->didConnect(handle(), false, WebString("a"), WebString("b
")); |
144 ::testing::Mock::VerifyAndClearExpectations(this); | 144 ::testing::Mock::VerifyAndClearExpectations(this); |
145 } | 145 } |
146 | 146 |
147 OwnPtr<DummyPageHolder> m_pageHolder; | 147 OwnPtr<DummyPageHolder> m_pageHolder; |
148 Persistent<MockWebSocketChannelClient> m_channelClient; | 148 Persistent<MockWebSocketChannelClient> m_channelClient; |
149 MockWebSocketHandle* m_handle; | 149 MockWebSocketHandle* m_handle; |
150 Persistent<NewWebSocketChannelImpl> m_channel; | 150 Persistent<NewWebSocketChannelImpl> m_channel; |
151 unsigned long m_sumOfConsumedBufferedAmount; | 151 unsigned long m_sumOfConsumedBufferedAmount; |
152 }; | 152 }; |
153 | 153 |
154 MATCHER_P2(MemEq, p, len, | 154 MATCHER_P2(MemEq, p, len, |
155 std::string("pointing to memory") | 155 std::string("pointing to memory") |
156 + (negation ? " not" : "") | 156 + (negation ? " not" : "") |
157 + " equal to \"" | 157 + " equal to \"" |
158 + std::string(p, len) + "\" (length=" + PrintToString(len) + ")" | 158 + std::string(p, len) + "\" (length=" + PrintToString(len) + ")" |
159 ) | 159 ) |
160 { | 160 { |
161 return memcmp(arg, p, len) == 0; | 161 return memcmp(arg, p, len) == 0; |
162 } | 162 } |
163 | 163 |
164 TEST_F(NewWebSocketChannelImplTest, connectSuccess) | 164 TEST_F(NewWebSocketChannelImplTest, connectSuccess) |
165 { | 165 { |
166 Checkpoint checkpoint; | 166 Checkpoint checkpoint; |
167 { | 167 { |
168 InSequence s; | 168 InSequence s; |
169 EXPECT_CALL(*handle(), connect(blink::WebURL(KURL(KURL(), "ws://localhos
t/")), _, _, handleClient())); | 169 EXPECT_CALL(*handle(), connect(WebURL(KURL(KURL(), "ws://localhost/")),
_, _, handleClient())); |
170 EXPECT_CALL(*handle(), flowControl(65536)); | 170 EXPECT_CALL(*handle(), flowControl(65536)); |
171 EXPECT_CALL(checkpoint, Call(1)); | 171 EXPECT_CALL(checkpoint, Call(1)); |
172 EXPECT_CALL(*channelClient(), didConnect(String("a"), String("b"))); | 172 EXPECT_CALL(*channelClient(), didConnect(String("a"), String("b"))); |
173 } | 173 } |
174 | 174 |
175 EXPECT_TRUE(channel()->connect(KURL(KURL(), "ws://localhost/"), "x")); | 175 EXPECT_TRUE(channel()->connect(KURL(KURL(), "ws://localhost/"), "x")); |
176 checkpoint.Call(1); | 176 checkpoint.Call(1); |
177 handleClient()->didConnect(handle(), false, blink::WebString("a"), blink::We
bString("b")); | 177 handleClient()->didConnect(handle(), false, WebString("a"), WebString("b")); |
178 } | 178 } |
179 | 179 |
180 TEST_F(NewWebSocketChannelImplTest, sendText) | 180 TEST_F(NewWebSocketChannelImplTest, sendText) |
181 { | 181 { |
182 connect(); | 182 connect(); |
183 { | 183 { |
184 InSequence s; | 184 InSequence s; |
185 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeTex
t, MemEq("foo", 3), 3)); | 185 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeText, MemE
q("foo", 3), 3)); |
186 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeTex
t, MemEq("bar", 3), 3)); | 186 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeText, MemE
q("bar", 3), 3)); |
187 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeTex
t, MemEq("baz", 3), 3)); | 187 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeText, MemE
q("baz", 3), 3)); |
188 } | 188 } |
189 | 189 |
190 handleClient()->didReceiveFlowControl(handle(), 16); | 190 handleClient()->didReceiveFlowControl(handle(), 16); |
191 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 191 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
192 | 192 |
193 channel()->send("foo"); | 193 channel()->send("foo"); |
194 channel()->send("bar"); | 194 channel()->send("bar"); |
195 channel()->send("baz"); | 195 channel()->send("baz"); |
196 | 196 |
197 EXPECT_EQ(9ul, m_sumOfConsumedBufferedAmount); | 197 EXPECT_EQ(9ul, m_sumOfConsumedBufferedAmount); |
198 } | 198 } |
199 | 199 |
200 TEST_F(NewWebSocketChannelImplTest, sendTextContinuation) | 200 TEST_F(NewWebSocketChannelImplTest, sendTextContinuation) |
201 { | 201 { |
202 connect(); | 202 connect(); |
203 Checkpoint checkpoint; | 203 Checkpoint checkpoint; |
204 { | 204 { |
205 InSequence s; | 205 InSequence s; |
206 EXPECT_CALL(*handle(), send(false, blink::WebSocketHandle::MessageTypeTe
xt, MemEq("0123456789abcdef", 16), 16)); | 206 EXPECT_CALL(*handle(), send(false, WebSocketHandle::MessageTypeText, Mem
Eq("0123456789abcdef", 16), 16)); |
207 EXPECT_CALL(checkpoint, Call(1)); | 207 EXPECT_CALL(checkpoint, Call(1)); |
208 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeCon
tinuation, MemEq("g", 1), 1)); | 208 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeContinuati
on, MemEq("g", 1), 1)); |
209 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeTex
t, MemEq("hijk", 4), 4)); | 209 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeText, MemE
q("hijk", 4), 4)); |
210 EXPECT_CALL(*handle(), send(false, blink::WebSocketHandle::MessageTypeTe
xt, MemEq("lmnopqrstuv", 11), 11)); | 210 EXPECT_CALL(*handle(), send(false, WebSocketHandle::MessageTypeText, Mem
Eq("lmnopqrstuv", 11), 11)); |
211 EXPECT_CALL(checkpoint, Call(2)); | 211 EXPECT_CALL(checkpoint, Call(2)); |
212 EXPECT_CALL(*handle(), send(false, blink::WebSocketHandle::MessageTypeCo
ntinuation, MemEq("wxyzABCDEFGHIJKL", 16), 16)); | 212 EXPECT_CALL(*handle(), send(false, WebSocketHandle::MessageTypeContinuat
ion, MemEq("wxyzABCDEFGHIJKL", 16), 16)); |
213 EXPECT_CALL(checkpoint, Call(3)); | 213 EXPECT_CALL(checkpoint, Call(3)); |
214 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeCon
tinuation, MemEq("MNOPQRSTUVWXYZ", 14), 14)); | 214 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeContinuati
on, MemEq("MNOPQRSTUVWXYZ", 14), 14)); |
215 } | 215 } |
216 | 216 |
217 handleClient()->didReceiveFlowControl(handle(), 16); | 217 handleClient()->didReceiveFlowControl(handle(), 16); |
218 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 218 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
219 | 219 |
220 channel()->send("0123456789abcdefg"); | 220 channel()->send("0123456789abcdefg"); |
221 channel()->send("hijk"); | 221 channel()->send("hijk"); |
222 channel()->send("lmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); | 222 channel()->send("lmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); |
223 checkpoint.Call(1); | 223 checkpoint.Call(1); |
224 handleClient()->didReceiveFlowControl(handle(), 16); | 224 handleClient()->didReceiveFlowControl(handle(), 16); |
225 checkpoint.Call(2); | 225 checkpoint.Call(2); |
226 handleClient()->didReceiveFlowControl(handle(), 16); | 226 handleClient()->didReceiveFlowControl(handle(), 16); |
227 checkpoint.Call(3); | 227 checkpoint.Call(3); |
228 handleClient()->didReceiveFlowControl(handle(), 16); | 228 handleClient()->didReceiveFlowControl(handle(), 16); |
229 | 229 |
230 EXPECT_EQ(62ul, m_sumOfConsumedBufferedAmount); | 230 EXPECT_EQ(62ul, m_sumOfConsumedBufferedAmount); |
231 } | 231 } |
232 | 232 |
233 TEST_F(NewWebSocketChannelImplTest, sendTextNonLatin1) | 233 TEST_F(NewWebSocketChannelImplTest, sendTextNonLatin1) |
234 { | 234 { |
235 connect(); | 235 connect(); |
236 { | 236 { |
237 InSequence s; | 237 InSequence s; |
238 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeTex
t, MemEq("\xe7\x8b\x90\xe0\xa4\x94", 6), 6)); | 238 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeText, MemE
q("\xe7\x8b\x90\xe0\xa4\x94", 6), 6)); |
239 } | 239 } |
240 | 240 |
241 handleClient()->didReceiveFlowControl(handle(), 16); | 241 handleClient()->didReceiveFlowControl(handle(), 16); |
242 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 242 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
243 | 243 |
244 UChar nonLatin1String[] = { | 244 UChar nonLatin1String[] = { |
245 0x72d0, | 245 0x72d0, |
246 0x0914, | 246 0x0914, |
247 0x0000 | 247 0x0000 |
248 }; | 248 }; |
249 channel()->send(nonLatin1String); | 249 channel()->send(nonLatin1String); |
250 | 250 |
251 EXPECT_EQ(6ul, m_sumOfConsumedBufferedAmount); | 251 EXPECT_EQ(6ul, m_sumOfConsumedBufferedAmount); |
252 } | 252 } |
253 | 253 |
254 TEST_F(NewWebSocketChannelImplTest, sendTextNonLatin1Continuation) | 254 TEST_F(NewWebSocketChannelImplTest, sendTextNonLatin1Continuation) |
255 { | 255 { |
256 connect(); | 256 connect(); |
257 Checkpoint checkpoint; | 257 Checkpoint checkpoint; |
258 { | 258 { |
259 InSequence s; | 259 InSequence s; |
260 EXPECT_CALL(*handle(), send(false, blink::WebSocketHandle::MessageTypeTe
xt, MemEq("\xe7\x8b\x90\xe0\xa4\x94\xe7\x8b\x90\xe0\xa4\x94\xe7\x8b\x90\xe0", 16
), 16)); | 260 EXPECT_CALL(*handle(), send(false, WebSocketHandle::MessageTypeText, Mem
Eq("\xe7\x8b\x90\xe0\xa4\x94\xe7\x8b\x90\xe0\xa4\x94\xe7\x8b\x90\xe0", 16), 16))
; |
261 EXPECT_CALL(checkpoint, Call(1)); | 261 EXPECT_CALL(checkpoint, Call(1)); |
262 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeCon
tinuation, MemEq("\xa4\x94", 2), 2)); | 262 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeContinuati
on, MemEq("\xa4\x94", 2), 2)); |
263 } | 263 } |
264 | 264 |
265 handleClient()->didReceiveFlowControl(handle(), 16); | 265 handleClient()->didReceiveFlowControl(handle(), 16); |
266 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 266 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
267 | 267 |
268 UChar nonLatin1String[] = { | 268 UChar nonLatin1String[] = { |
269 0x72d0, | 269 0x72d0, |
270 0x0914, | 270 0x0914, |
271 0x72d0, | 271 0x72d0, |
272 0x0914, | 272 0x0914, |
273 0x72d0, | 273 0x72d0, |
274 0x0914, | 274 0x0914, |
275 0x0000 | 275 0x0000 |
276 }; | 276 }; |
277 channel()->send(nonLatin1String); | 277 channel()->send(nonLatin1String); |
278 checkpoint.Call(1); | 278 checkpoint.Call(1); |
279 handleClient()->didReceiveFlowControl(handle(), 16); | 279 handleClient()->didReceiveFlowControl(handle(), 16); |
280 | 280 |
281 EXPECT_EQ(18ul, m_sumOfConsumedBufferedAmount); | 281 EXPECT_EQ(18ul, m_sumOfConsumedBufferedAmount); |
282 } | 282 } |
283 | 283 |
284 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVector) | 284 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVector) |
285 { | 285 { |
286 connect(); | 286 connect(); |
287 { | 287 { |
288 InSequence s; | 288 InSequence s; |
289 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("foo", 3), 3)); | 289 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("foo", 3), 3)); |
290 } | 290 } |
291 | 291 |
292 handleClient()->didReceiveFlowControl(handle(), 16); | 292 handleClient()->didReceiveFlowControl(handle(), 16); |
293 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 293 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
294 | 294 |
295 Vector<char> fooVector; | 295 Vector<char> fooVector; |
296 fooVector.append("foo", 3); | 296 fooVector.append("foo", 3); |
297 channel()->send(adoptPtr(new Vector<char>(fooVector))); | 297 channel()->send(adoptPtr(new Vector<char>(fooVector))); |
298 | 298 |
299 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); | 299 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); |
300 } | 300 } |
301 | 301 |
302 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVectorWithNullBytes) | 302 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVectorWithNullBytes) |
303 { | 303 { |
304 connect(); | 304 connect(); |
305 { | 305 { |
306 InSequence s; | 306 InSequence s; |
307 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("\0ar", 3), 3)); | 307 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("\0ar", 3), 3)); |
308 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("b\0z", 3), 3)); | 308 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("b\0z", 3), 3)); |
309 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("qu\0", 3), 3)); | 309 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("qu\0", 3), 3)); |
310 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("\0\0\0", 3), 3)); | 310 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("\0\0\0", 3), 3)); |
311 } | 311 } |
312 | 312 |
313 handleClient()->didReceiveFlowControl(handle(), 16); | 313 handleClient()->didReceiveFlowControl(handle(), 16); |
314 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 314 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
315 | 315 |
316 { | 316 { |
317 Vector<char> v; | 317 Vector<char> v; |
318 v.append("\0ar", 3); | 318 v.append("\0ar", 3); |
319 channel()->send(adoptPtr(new Vector<char>(v))); | 319 channel()->send(adoptPtr(new Vector<char>(v))); |
320 } | 320 } |
(...skipping 12 matching lines...) Expand all Loading... |
333 v.append("\0\0\0", 3); | 333 v.append("\0\0\0", 3); |
334 channel()->send(adoptPtr(new Vector<char>(v))); | 334 channel()->send(adoptPtr(new Vector<char>(v))); |
335 } | 335 } |
336 | 336 |
337 EXPECT_EQ(12ul, m_sumOfConsumedBufferedAmount); | 337 EXPECT_EQ(12ul, m_sumOfConsumedBufferedAmount); |
338 } | 338 } |
339 | 339 |
340 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVectorNonLatin1UTF8) | 340 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVectorNonLatin1UTF8) |
341 { | 341 { |
342 connect(); | 342 connect(); |
343 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBinary,
MemEq("\xe7\x8b\x90", 3), 3)); | 343 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, MemEq(
"\xe7\x8b\x90", 3), 3)); |
344 | 344 |
345 handleClient()->didReceiveFlowControl(handle(), 16); | 345 handleClient()->didReceiveFlowControl(handle(), 16); |
346 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 346 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
347 | 347 |
348 Vector<char> v; | 348 Vector<char> v; |
349 v.append("\xe7\x8b\x90", 3); | 349 v.append("\xe7\x8b\x90", 3); |
350 channel()->send(adoptPtr(new Vector<char>(v))); | 350 channel()->send(adoptPtr(new Vector<char>(v))); |
351 | 351 |
352 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); | 352 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); |
353 } | 353 } |
354 | 354 |
355 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVectorNonUTF8) | 355 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVectorNonUTF8) |
356 { | 356 { |
357 connect(); | 357 connect(); |
358 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBinary,
MemEq("\x80\xff\xe7", 3), 3)); | 358 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, MemEq(
"\x80\xff\xe7", 3), 3)); |
359 | 359 |
360 handleClient()->didReceiveFlowControl(handle(), 16); | 360 handleClient()->didReceiveFlowControl(handle(), 16); |
361 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 361 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
362 | 362 |
363 Vector<char> v; | 363 Vector<char> v; |
364 v.append("\x80\xff\xe7", 3); | 364 v.append("\x80\xff\xe7", 3); |
365 channel()->send(adoptPtr(new Vector<char>(v))); | 365 channel()->send(adoptPtr(new Vector<char>(v))); |
366 | 366 |
367 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); | 367 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); |
368 } | 368 } |
369 | 369 |
370 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVectorNonLatin1UTF8Continuation) | 370 TEST_F(NewWebSocketChannelImplTest, sendBinaryInVectorNonLatin1UTF8Continuation) |
371 { | 371 { |
372 connect(); | 372 connect(); |
373 Checkpoint checkpoint; | 373 Checkpoint checkpoint; |
374 { | 374 { |
375 InSequence s; | 375 InSequence s; |
376 EXPECT_CALL(*handle(), send(false, blink::WebSocketHandle::MessageTypeBi
nary, MemEq("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7",
16), 16)); | 376 EXPECT_CALL(*handle(), send(false, WebSocketHandle::MessageTypeBinary, M
emEq("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7", 16), 16
)); |
377 EXPECT_CALL(checkpoint, Call(1)); | 377 EXPECT_CALL(checkpoint, Call(1)); |
378 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeCon
tinuation, MemEq("\x8b\x90", 2), 2)); | 378 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeContinuati
on, MemEq("\x8b\x90", 2), 2)); |
379 } | 379 } |
380 | 380 |
381 handleClient()->didReceiveFlowControl(handle(), 16); | 381 handleClient()->didReceiveFlowControl(handle(), 16); |
382 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 382 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
383 | 383 |
384 Vector<char> v; | 384 Vector<char> v; |
385 v.append("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x
8b\x90", 18); | 385 v.append("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x
8b\x90", 18); |
386 channel()->send(adoptPtr(new Vector<char>(v))); | 386 channel()->send(adoptPtr(new Vector<char>(v))); |
387 checkpoint.Call(1); | 387 checkpoint.Call(1); |
388 | 388 |
389 handleClient()->didReceiveFlowControl(handle(), 16); | 389 handleClient()->didReceiveFlowControl(handle(), 16); |
390 | 390 |
391 EXPECT_EQ(18ul, m_sumOfConsumedBufferedAmount); | 391 EXPECT_EQ(18ul, m_sumOfConsumedBufferedAmount); |
392 } | 392 } |
393 | 393 |
394 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBuffer) | 394 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBuffer) |
395 { | 395 { |
396 connect(); | 396 connect(); |
397 { | 397 { |
398 InSequence s; | 398 InSequence s; |
399 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("foo", 3), 3)); | 399 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("foo", 3), 3)); |
400 } | 400 } |
401 | 401 |
402 handleClient()->didReceiveFlowControl(handle(), 16); | 402 handleClient()->didReceiveFlowControl(handle(), 16); |
403 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 403 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
404 | 404 |
405 RefPtr<ArrayBuffer> fooBuffer = ArrayBuffer::create("foo", 3); | 405 RefPtr<ArrayBuffer> fooBuffer = ArrayBuffer::create("foo", 3); |
406 channel()->send(*fooBuffer, 0, 3); | 406 channel()->send(*fooBuffer, 0, 3); |
407 | 407 |
408 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); | 408 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); |
409 } | 409 } |
410 | 410 |
411 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferPartial) | 411 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferPartial) |
412 { | 412 { |
413 connect(); | 413 connect(); |
414 { | 414 { |
415 InSequence s; | 415 InSequence s; |
416 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("foo", 3), 3)); | 416 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("foo", 3), 3)); |
417 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("bar", 3), 3)); | 417 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("bar", 3), 3)); |
418 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("baz", 3), 3)); | 418 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("baz", 3), 3)); |
419 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("a", 1), 1)); | 419 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("a", 1), 1)); |
420 } | 420 } |
421 | 421 |
422 handleClient()->didReceiveFlowControl(handle(), 16); | 422 handleClient()->didReceiveFlowControl(handle(), 16); |
423 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 423 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
424 | 424 |
425 RefPtr<ArrayBuffer> foobarBuffer = ArrayBuffer::create("foobar", 6); | 425 RefPtr<ArrayBuffer> foobarBuffer = ArrayBuffer::create("foobar", 6); |
426 RefPtr<ArrayBuffer> qbazuxBuffer = ArrayBuffer::create("qbazux", 6); | 426 RefPtr<ArrayBuffer> qbazuxBuffer = ArrayBuffer::create("qbazux", 6); |
427 channel()->send(*foobarBuffer, 0, 3); | 427 channel()->send(*foobarBuffer, 0, 3); |
428 channel()->send(*foobarBuffer, 3, 3); | 428 channel()->send(*foobarBuffer, 3, 3); |
429 channel()->send(*qbazuxBuffer, 1, 3); | 429 channel()->send(*qbazuxBuffer, 1, 3); |
430 channel()->send(*qbazuxBuffer, 2, 1); | 430 channel()->send(*qbazuxBuffer, 2, 1); |
431 | 431 |
432 EXPECT_EQ(10ul, m_sumOfConsumedBufferedAmount); | 432 EXPECT_EQ(10ul, m_sumOfConsumedBufferedAmount); |
433 } | 433 } |
434 | 434 |
435 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferWithNullBytes) | 435 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferWithNullBytes) |
436 { | 436 { |
437 connect(); | 437 connect(); |
438 { | 438 { |
439 InSequence s; | 439 InSequence s; |
440 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("\0ar", 3), 3)); | 440 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("\0ar", 3), 3)); |
441 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("b\0z", 3), 3)); | 441 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("b\0z", 3), 3)); |
442 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("qu\0", 3), 3)); | 442 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("qu\0", 3), 3)); |
443 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBin
ary, MemEq("\0\0\0", 3), 3)); | 443 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, Me
mEq("\0\0\0", 3), 3)); |
444 } | 444 } |
445 | 445 |
446 handleClient()->didReceiveFlowControl(handle(), 16); | 446 handleClient()->didReceiveFlowControl(handle(), 16); |
447 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 447 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
448 | 448 |
449 { | 449 { |
450 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\0ar", 3); | 450 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\0ar", 3); |
451 channel()->send(*b, 0, 3); | 451 channel()->send(*b, 0, 3); |
452 } | 452 } |
453 { | 453 { |
454 RefPtr<ArrayBuffer> b = ArrayBuffer::create("b\0z", 3); | 454 RefPtr<ArrayBuffer> b = ArrayBuffer::create("b\0z", 3); |
455 channel()->send(*b, 0, 3); | 455 channel()->send(*b, 0, 3); |
456 } | 456 } |
457 { | 457 { |
458 RefPtr<ArrayBuffer> b = ArrayBuffer::create("qu\0", 3); | 458 RefPtr<ArrayBuffer> b = ArrayBuffer::create("qu\0", 3); |
459 channel()->send(*b, 0, 3); | 459 channel()->send(*b, 0, 3); |
460 } | 460 } |
461 { | 461 { |
462 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\0\0\0", 3); | 462 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\0\0\0", 3); |
463 channel()->send(*b, 0, 3); | 463 channel()->send(*b, 0, 3); |
464 } | 464 } |
465 | 465 |
466 EXPECT_EQ(12ul, m_sumOfConsumedBufferedAmount); | 466 EXPECT_EQ(12ul, m_sumOfConsumedBufferedAmount); |
467 } | 467 } |
468 | 468 |
469 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferNonLatin1UTF8) | 469 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferNonLatin1UTF8) |
470 { | 470 { |
471 connect(); | 471 connect(); |
472 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBinary,
MemEq("\xe7\x8b\x90", 3), 3)); | 472 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, MemEq(
"\xe7\x8b\x90", 3), 3)); |
473 | 473 |
474 handleClient()->didReceiveFlowControl(handle(), 16); | 474 handleClient()->didReceiveFlowControl(handle(), 16); |
475 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 475 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
476 | 476 |
477 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\xe7\x8b\x90", 3); | 477 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\xe7\x8b\x90", 3); |
478 channel()->send(*b, 0, 3); | 478 channel()->send(*b, 0, 3); |
479 | 479 |
480 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); | 480 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); |
481 } | 481 } |
482 | 482 |
483 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferNonUTF8) | 483 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferNonUTF8) |
484 { | 484 { |
485 connect(); | 485 connect(); |
486 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeBinary,
MemEq("\x80\xff\xe7", 3), 3)); | 486 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeBinary, MemEq(
"\x80\xff\xe7", 3), 3)); |
487 | 487 |
488 handleClient()->didReceiveFlowControl(handle(), 16); | 488 handleClient()->didReceiveFlowControl(handle(), 16); |
489 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 489 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
490 | 490 |
491 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\x80\xff\xe7", 3); | 491 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\x80\xff\xe7", 3); |
492 channel()->send(*b, 0, 3); | 492 channel()->send(*b, 0, 3); |
493 | 493 |
494 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); | 494 EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount); |
495 } | 495 } |
496 | 496 |
497 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferNonLatin1UTF8Continua
tion) | 497 TEST_F(NewWebSocketChannelImplTest, sendBinaryInArrayBufferNonLatin1UTF8Continua
tion) |
498 { | 498 { |
499 connect(); | 499 connect(); |
500 Checkpoint checkpoint; | 500 Checkpoint checkpoint; |
501 { | 501 { |
502 InSequence s; | 502 InSequence s; |
503 EXPECT_CALL(*handle(), send(false, blink::WebSocketHandle::MessageTypeBi
nary, MemEq("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7",
16), 16)); | 503 EXPECT_CALL(*handle(), send(false, WebSocketHandle::MessageTypeBinary, M
emEq("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7", 16), 16
)); |
504 EXPECT_CALL(checkpoint, Call(1)); | 504 EXPECT_CALL(checkpoint, Call(1)); |
505 EXPECT_CALL(*handle(), send(true, blink::WebSocketHandle::MessageTypeCon
tinuation, MemEq("\x8b\x90", 2), 2)); | 505 EXPECT_CALL(*handle(), send(true, WebSocketHandle::MessageTypeContinuati
on, MemEq("\x8b\x90", 2), 2)); |
506 } | 506 } |
507 | 507 |
508 handleClient()->didReceiveFlowControl(handle(), 16); | 508 handleClient()->didReceiveFlowControl(handle(), 16); |
509 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); | 509 EXPECT_CALL(*channelClient(), didConsumeBufferedAmount(_)).Times(AnyNumber()
); |
510 | 510 |
511 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8
b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90", 18); | 511 RefPtr<ArrayBuffer> b = ArrayBuffer::create("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8
b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90", 18); |
512 channel()->send(*b, 0, 18); | 512 channel()->send(*b, 0, 18); |
513 checkpoint.Call(1); | 513 checkpoint.Call(1); |
514 | 514 |
515 handleClient()->didReceiveFlowControl(handle(), 16); | 515 handleClient()->didReceiveFlowControl(handle(), 16); |
516 | 516 |
517 EXPECT_EQ(18ul, m_sumOfConsumedBufferedAmount); | 517 EXPECT_EQ(18ul, m_sumOfConsumedBufferedAmount); |
518 } | 518 } |
519 | 519 |
520 // FIXME: Add tests for WebSocketChannel::send(PassRefPtr<BlobDataHandle>) | 520 // FIXME: Add tests for WebSocketChannel::send(PassRefPtr<BlobDataHandle>) |
521 | 521 |
522 TEST_F(NewWebSocketChannelImplTest, receiveText) | 522 TEST_F(NewWebSocketChannelImplTest, receiveText) |
523 { | 523 { |
524 connect(); | 524 connect(); |
525 { | 525 { |
526 InSequence s; | 526 InSequence s; |
527 EXPECT_CALL(*channelClient(), didReceiveMessage(String("FOO"))); | 527 EXPECT_CALL(*channelClient(), didReceiveMessage(String("FOO"))); |
528 EXPECT_CALL(*channelClient(), didReceiveMessage(String("BAR"))); | 528 EXPECT_CALL(*channelClient(), didReceiveMessage(String("BAR"))); |
529 } | 529 } |
530 | 530 |
531 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeText, "FOOX", 3); | 531 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeT
ext, "FOOX", 3); |
532 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeText, "BARX", 3); | 532 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeT
ext, "BARX", 3); |
533 } | 533 } |
534 | 534 |
535 TEST_F(NewWebSocketChannelImplTest, receiveTextContinuation) | 535 TEST_F(NewWebSocketChannelImplTest, receiveTextContinuation) |
536 { | 536 { |
537 connect(); | 537 connect(); |
538 EXPECT_CALL(*channelClient(), didReceiveMessage(String("BAZ"))); | 538 EXPECT_CALL(*channelClient(), didReceiveMessage(String("BAZ"))); |
539 | 539 |
540 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeText, "BX", 1); | 540 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Text, "BX", 1); |
541 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeContinuation, "AX", 1); | 541 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Continuation, "AX", 1); |
542 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeContinuation, "ZX", 1); | 542 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeC
ontinuation, "ZX", 1); |
543 } | 543 } |
544 | 544 |
545 TEST_F(NewWebSocketChannelImplTest, receiveTextNonLatin1) | 545 TEST_F(NewWebSocketChannelImplTest, receiveTextNonLatin1) |
546 { | 546 { |
547 connect(); | 547 connect(); |
548 UChar nonLatin1String[] = { | 548 UChar nonLatin1String[] = { |
549 0x72d0, | 549 0x72d0, |
550 0x0914, | 550 0x0914, |
551 0x0000 | 551 0x0000 |
552 }; | 552 }; |
553 EXPECT_CALL(*channelClient(), didReceiveMessage(String(nonLatin1String))); | 553 EXPECT_CALL(*channelClient(), didReceiveMessage(String(nonLatin1String))); |
554 | 554 |
555 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeText, "\xe7\x8b\x90\xe0\xa4\x94", 6); | 555 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeT
ext, "\xe7\x8b\x90\xe0\xa4\x94", 6); |
556 } | 556 } |
557 | 557 |
558 TEST_F(NewWebSocketChannelImplTest, receiveTextNonLatin1Continuation) | 558 TEST_F(NewWebSocketChannelImplTest, receiveTextNonLatin1Continuation) |
559 { | 559 { |
560 connect(); | 560 connect(); |
561 UChar nonLatin1String[] = { | 561 UChar nonLatin1String[] = { |
562 0x72d0, | 562 0x72d0, |
563 0x0914, | 563 0x0914, |
564 0x0000 | 564 0x0000 |
565 }; | 565 }; |
566 EXPECT_CALL(*channelClient(), didReceiveMessage(String(nonLatin1String))); | 566 EXPECT_CALL(*channelClient(), didReceiveMessage(String(nonLatin1String))); |
567 | 567 |
568 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeText, "\xe7\x8b", 2); | 568 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Text, "\xe7\x8b", 2); |
569 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeContinuation, "\x90\xe0", 2); | 569 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Continuation, "\x90\xe0", 2); |
570 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeContinuation, "\xa4", 1); | 570 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Continuation, "\xa4", 1); |
571 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeContinuation, "\x94", 1); | 571 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeC
ontinuation, "\x94", 1); |
572 } | 572 } |
573 | 573 |
574 TEST_F(NewWebSocketChannelImplTest, receiveBinary) | 574 TEST_F(NewWebSocketChannelImplTest, receiveBinary) |
575 { | 575 { |
576 connect(); | 576 connect(); |
577 Vector<char> fooVector; | 577 Vector<char> fooVector; |
578 fooVector.append("FOO", 3); | 578 fooVector.append("FOO", 3); |
579 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(fooVector)); | 579 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(fooVector)); |
580 | 580 |
581 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeBinary, "FOOx", 3); | 581 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeB
inary, "FOOx", 3); |
582 } | 582 } |
583 | 583 |
584 TEST_F(NewWebSocketChannelImplTest, receiveBinaryContinuation) | 584 TEST_F(NewWebSocketChannelImplTest, receiveBinaryContinuation) |
585 { | 585 { |
586 connect(); | 586 connect(); |
587 Vector<char> bazVector; | 587 Vector<char> bazVector; |
588 bazVector.append("BAZ", 3); | 588 bazVector.append("BAZ", 3); |
589 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(bazVector)); | 589 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(bazVector)); |
590 | 590 |
591 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeBinary, "Bx", 1); | 591 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Binary, "Bx", 1); |
592 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeContinuation, "Ax", 1); | 592 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Continuation, "Ax", 1); |
593 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeContinuation, "Zx", 1); | 593 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeC
ontinuation, "Zx", 1); |
594 } | 594 } |
595 | 595 |
596 TEST_F(NewWebSocketChannelImplTest, receiveBinaryWithNullBytes) | 596 TEST_F(NewWebSocketChannelImplTest, receiveBinaryWithNullBytes) |
597 { | 597 { |
598 connect(); | 598 connect(); |
599 { | 599 { |
600 InSequence s; | 600 InSequence s; |
601 { | 601 { |
602 Vector<char> v; | 602 Vector<char> v; |
603 v.append("\0AR", 3); | 603 v.append("\0AR", 3); |
604 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); | 604 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); |
605 } | 605 } |
606 { | 606 { |
607 Vector<char> v; | 607 Vector<char> v; |
608 v.append("B\0Z", 3); | 608 v.append("B\0Z", 3); |
609 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); | 609 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); |
610 } | 610 } |
611 { | 611 { |
612 Vector<char> v; | 612 Vector<char> v; |
613 v.append("QU\0", 3); | 613 v.append("QU\0", 3); |
614 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); | 614 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); |
615 } | 615 } |
616 { | 616 { |
617 Vector<char> v; | 617 Vector<char> v; |
618 v.append("\0\0\0", 3); | 618 v.append("\0\0\0", 3); |
619 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); | 619 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); |
620 } | 620 } |
621 } | 621 } |
622 | 622 |
623 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeBinary, "\0AR", 3); | 623 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeB
inary, "\0AR", 3); |
624 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeBinary, "B\0Z", 3); | 624 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeB
inary, "B\0Z", 3); |
625 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeBinary, "QU\0", 3); | 625 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeB
inary, "QU\0", 3); |
626 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeBinary, "\0\0\0", 3); | 626 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeB
inary, "\0\0\0", 3); |
627 } | 627 } |
628 | 628 |
629 TEST_F(NewWebSocketChannelImplTest, receiveBinaryNonLatin1UTF8) | 629 TEST_F(NewWebSocketChannelImplTest, receiveBinaryNonLatin1UTF8) |
630 { | 630 { |
631 connect(); | 631 connect(); |
632 Vector<char> v; | 632 Vector<char> v; |
633 v.append("\xe7\x8b\x90\xe0\xa4\x94", 6); | 633 v.append("\xe7\x8b\x90\xe0\xa4\x94", 6); |
634 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); | 634 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); |
635 | 635 |
636 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeBinary, "\xe7\x8b\x90\xe0\xa4\x94", 6); | 636 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeB
inary, "\xe7\x8b\x90\xe0\xa4\x94", 6); |
637 } | 637 } |
638 | 638 |
639 TEST_F(NewWebSocketChannelImplTest, receiveBinaryNonLatin1UTF8Continuation) | 639 TEST_F(NewWebSocketChannelImplTest, receiveBinaryNonLatin1UTF8Continuation) |
640 { | 640 { |
641 connect(); | 641 connect(); |
642 Vector<char> v; | 642 Vector<char> v; |
643 v.append("\xe7\x8b\x90\xe0\xa4\x94", 6); | 643 v.append("\xe7\x8b\x90\xe0\xa4\x94", 6); |
644 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); | 644 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); |
645 | 645 |
646 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeBinary, "\xe7\x8b", 2); | 646 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Binary, "\xe7\x8b", 2); |
647 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeContinuation, "\x90\xe0", 2); | 647 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Continuation, "\x90\xe0", 2); |
648 handleClient()->didReceiveData(handle(), false, blink::WebSocketHandle::Mess
ageTypeContinuation, "\xa4", 1); | 648 handleClient()->didReceiveData(handle(), false, WebSocketHandle::MessageType
Continuation, "\xa4", 1); |
649 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeContinuation, "\x94", 1); | 649 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeC
ontinuation, "\x94", 1); |
650 } | 650 } |
651 | 651 |
652 TEST_F(NewWebSocketChannelImplTest, receiveBinaryNonUTF8) | 652 TEST_F(NewWebSocketChannelImplTest, receiveBinaryNonUTF8) |
653 { | 653 { |
654 connect(); | 654 connect(); |
655 Vector<char> v; | 655 Vector<char> v; |
656 v.append("\x80\xff", 2); | 656 v.append("\x80\xff", 2); |
657 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); | 657 EXPECT_CALL(*channelClient(), didReceiveBinaryDataMock(v)); |
658 | 658 |
659 handleClient()->didReceiveData(handle(), true, blink::WebSocketHandle::Messa
geTypeBinary, "\x80\xff", 2); | 659 handleClient()->didReceiveData(handle(), true, WebSocketHandle::MessageTypeB
inary, "\x80\xff", 2); |
660 } | 660 } |
661 | 661 |
662 TEST_F(NewWebSocketChannelImplTest, closeFromBrowser) | 662 TEST_F(NewWebSocketChannelImplTest, closeFromBrowser) |
663 { | 663 { |
664 connect(); | 664 connect(); |
665 Checkpoint checkpoint; | 665 Checkpoint checkpoint; |
666 { | 666 { |
667 InSequence s; | 667 InSequence s; |
668 | 668 |
669 EXPECT_CALL(*channelClient(), didStartClosingHandshake()); | 669 EXPECT_CALL(*channelClient(), didStartClosingHandshake()); |
670 EXPECT_CALL(checkpoint, Call(1)); | 670 EXPECT_CALL(checkpoint, Call(1)); |
671 | 671 |
672 EXPECT_CALL(*handle(), close(WebSocketChannel::CloseEventCodeNormalClosu
re, blink::WebString("close reason"))); | 672 EXPECT_CALL(*handle(), close(WebSocketChannel::CloseEventCodeNormalClosu
re, WebString("close reason"))); |
673 EXPECT_CALL(checkpoint, Call(2)); | 673 EXPECT_CALL(checkpoint, Call(2)); |
674 | 674 |
675 EXPECT_CALL(*channelClient(), didClose(WebSocketChannelClient::ClosingHa
ndshakeComplete, WebSocketChannel::CloseEventCodeNormalClosure, String("close re
ason"))); | 675 EXPECT_CALL(*channelClient(), didClose(WebSocketChannelClient::ClosingHa
ndshakeComplete, WebSocketChannel::CloseEventCodeNormalClosure, String("close re
ason"))); |
676 EXPECT_CALL(checkpoint, Call(3)); | 676 EXPECT_CALL(checkpoint, Call(3)); |
677 } | 677 } |
678 | 678 |
679 handleClient()->didStartClosingHandshake(handle()); | 679 handleClient()->didStartClosingHandshake(handle()); |
680 checkpoint.Call(1); | 680 checkpoint.Call(1); |
681 | 681 |
682 channel()->close(WebSocketChannel::CloseEventCodeNormalClosure, String("clos
e reason")); | 682 channel()->close(WebSocketChannel::CloseEventCodeNormalClosure, String("clos
e reason")); |
683 checkpoint.Call(2); | 683 checkpoint.Call(2); |
684 | 684 |
685 handleClient()->didClose(handle(), true, WebSocketChannel::CloseEventCodeNor
malClosure, String("close reason")); | 685 handleClient()->didClose(handle(), true, WebSocketChannel::CloseEventCodeNor
malClosure, String("close reason")); |
686 checkpoint.Call(3); | 686 checkpoint.Call(3); |
687 | 687 |
688 channel()->disconnect(); | 688 channel()->disconnect(); |
689 } | 689 } |
690 | 690 |
691 TEST_F(NewWebSocketChannelImplTest, closeFromWebSocket) | 691 TEST_F(NewWebSocketChannelImplTest, closeFromWebSocket) |
692 { | 692 { |
693 connect(); | 693 connect(); |
694 Checkpoint checkpoint; | 694 Checkpoint checkpoint; |
695 { | 695 { |
696 InSequence s; | 696 InSequence s; |
697 | 697 |
698 EXPECT_CALL(*handle(), close(WebSocketChannel::CloseEventCodeNormalClosu
re, blink::WebString("close reason"))); | 698 EXPECT_CALL(*handle(), close(WebSocketChannel::CloseEventCodeNormalClosu
re, WebString("close reason"))); |
699 EXPECT_CALL(checkpoint, Call(1)); | 699 EXPECT_CALL(checkpoint, Call(1)); |
700 | 700 |
701 EXPECT_CALL(*channelClient(), didClose(WebSocketChannelClient::ClosingHa
ndshakeComplete, WebSocketChannel::CloseEventCodeNormalClosure, String("close re
ason"))); | 701 EXPECT_CALL(*channelClient(), didClose(WebSocketChannelClient::ClosingHa
ndshakeComplete, WebSocketChannel::CloseEventCodeNormalClosure, String("close re
ason"))); |
702 EXPECT_CALL(checkpoint, Call(2)); | 702 EXPECT_CALL(checkpoint, Call(2)); |
703 } | 703 } |
704 | 704 |
705 channel()->close(WebSocketChannel::CloseEventCodeNormalClosure, String("clos
e reason")); | 705 channel()->close(WebSocketChannel::CloseEventCodeNormalClosure, String("clos
e reason")); |
706 checkpoint.Call(1); | 706 checkpoint.Call(1); |
707 | 707 |
708 handleClient()->didClose(handle(), true, WebSocketChannel::CloseEventCodeNor
malClosure, String("close reason")); | 708 handleClient()->didClose(handle(), true, WebSocketChannel::CloseEventCodeNor
malClosure, String("close reason")); |
(...skipping 24 matching lines...) Expand all Loading... |
733 EXPECT_CALL(*channelClient(), didReceiveMessageError()); | 733 EXPECT_CALL(*channelClient(), didReceiveMessageError()); |
734 EXPECT_CALL(*channelClient(), didClose(WebSocketChannelClient::ClosingHa
ndshakeIncomplete, WebSocketChannel::CloseEventCodeAbnormalClosure, String())); | 734 EXPECT_CALL(*channelClient(), didClose(WebSocketChannelClient::ClosingHa
ndshakeIncomplete, WebSocketChannel::CloseEventCodeAbnormalClosure, String())); |
735 } | 735 } |
736 | 736 |
737 channel()->fail("fail message from WebSocket", ErrorMessageLevel, "sourceURL
", 1234); | 737 channel()->fail("fail message from WebSocket", ErrorMessageLevel, "sourceURL
", 1234); |
738 } | 738 } |
739 | 739 |
740 } // namespace | 740 } // namespace |
741 | 741 |
742 } // namespace blink | 742 } // namespace blink |
OLD | NEW |