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 "modules/websockets/DOMWebSocket.h" | 5 #include "modules/websockets/DOMWebSocket.h" |
6 | 6 |
7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
8 #include "bindings/core/v8/V8Binding.h" | 8 #include "bindings/core/v8/V8Binding.h" |
9 #include "bindings/core/v8/V8BindingForTesting.h" | 9 #include "bindings/core/v8/V8BindingForTesting.h" |
10 #include "core/dom/DOMTypedArray.h" | 10 #include "core/dom/DOMTypedArray.h" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 132 |
133 TEST(DOMWebSocketTest, connectToBadURL) { | 133 TEST(DOMWebSocketTest, connectToBadURL) { |
134 V8TestingScope scope; | 134 V8TestingScope scope; |
135 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 135 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
136 webSocketScope.socket().connect("xxx", Vector<String>(), | 136 webSocketScope.socket().connect("xxx", Vector<String>(), |
137 scope.getExceptionState()); | 137 scope.getExceptionState()); |
138 | 138 |
139 EXPECT_TRUE(scope.getExceptionState().hadException()); | 139 EXPECT_TRUE(scope.getExceptionState().hadException()); |
140 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); | 140 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); |
141 EXPECT_EQ("The URL 'xxx' is invalid.", scope.getExceptionState().message()); | 141 EXPECT_EQ("The URL 'xxx' is invalid.", scope.getExceptionState().message()); |
142 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 142 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
143 } | 143 } |
144 | 144 |
145 TEST(DOMWebSocketTest, connectToNonWsURL) { | 145 TEST(DOMWebSocketTest, connectToNonWsURL) { |
146 V8TestingScope scope; | 146 V8TestingScope scope; |
147 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 147 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
148 webSocketScope.socket().connect("http://example.com/", Vector<String>(), | 148 webSocketScope.socket().connect("http://example.com/", Vector<String>(), |
149 scope.getExceptionState()); | 149 scope.getExceptionState()); |
150 | 150 |
151 EXPECT_TRUE(scope.getExceptionState().hadException()); | 151 EXPECT_TRUE(scope.getExceptionState().hadException()); |
152 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); | 152 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); |
153 EXPECT_EQ( | 153 EXPECT_EQ( |
154 "The URL's scheme must be either 'ws' or 'wss'. 'http' is not allowed.", | 154 "The URL's scheme must be either 'ws' or 'wss'. 'http' is not allowed.", |
155 scope.getExceptionState().message()); | 155 scope.getExceptionState().message()); |
156 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 156 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
157 } | 157 } |
158 | 158 |
159 TEST(DOMWebSocketTest, connectToURLHavingFragmentIdentifier) { | 159 TEST(DOMWebSocketTest, connectToURLHavingFragmentIdentifier) { |
160 V8TestingScope scope; | 160 V8TestingScope scope; |
161 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 161 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
162 webSocketScope.socket().connect("ws://example.com/#fragment", | 162 webSocketScope.socket().connect("ws://example.com/#fragment", |
163 Vector<String>(), scope.getExceptionState()); | 163 Vector<String>(), scope.getExceptionState()); |
164 | 164 |
165 EXPECT_TRUE(scope.getExceptionState().hadException()); | 165 EXPECT_TRUE(scope.getExceptionState().hadException()); |
166 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); | 166 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); |
167 EXPECT_EQ( | 167 EXPECT_EQ( |
168 "The URL contains a fragment identifier ('fragment'). Fragment " | 168 "The URL contains a fragment identifier ('fragment'). Fragment " |
169 "identifiers are not allowed in WebSocket URLs.", | 169 "identifiers are not allowed in WebSocket URLs.", |
170 scope.getExceptionState().message()); | 170 scope.getExceptionState().message()); |
171 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 171 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
172 } | 172 } |
173 | 173 |
174 TEST(DOMWebSocketTest, invalidPort) { | 174 TEST(DOMWebSocketTest, invalidPort) { |
175 V8TestingScope scope; | 175 V8TestingScope scope; |
176 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 176 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
177 webSocketScope.socket().connect("ws://example.com:7", Vector<String>(), | 177 webSocketScope.socket().connect("ws://example.com:7", Vector<String>(), |
178 scope.getExceptionState()); | 178 scope.getExceptionState()); |
179 | 179 |
180 EXPECT_TRUE(scope.getExceptionState().hadException()); | 180 EXPECT_TRUE(scope.getExceptionState().hadException()); |
181 EXPECT_EQ(SecurityError, scope.getExceptionState().code()); | 181 EXPECT_EQ(SecurityError, scope.getExceptionState().code()); |
182 EXPECT_EQ("The port 7 is not allowed.", scope.getExceptionState().message()); | 182 EXPECT_EQ("The port 7 is not allowed.", scope.getExceptionState().message()); |
183 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 183 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
184 } | 184 } |
185 | 185 |
186 // FIXME: Add a test for Content Security Policy. | 186 // FIXME: Add a test for Content Security Policy. |
187 | 187 |
188 TEST(DOMWebSocketTest, invalidSubprotocols) { | 188 TEST(DOMWebSocketTest, invalidSubprotocols) { |
189 V8TestingScope scope; | 189 V8TestingScope scope; |
190 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 190 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
191 Vector<String> subprotocols; | 191 Vector<String> subprotocols; |
192 subprotocols.append("@subprotocol-|'\"x\x01\x02\x03x"); | 192 subprotocols.append("@subprotocol-|'\"x\x01\x02\x03x"); |
193 | 193 |
194 webSocketScope.socket().connect("ws://example.com/", subprotocols, | 194 webSocketScope.socket().connect("ws://example.com/", subprotocols, |
195 scope.getExceptionState()); | 195 scope.getExceptionState()); |
196 | 196 |
197 EXPECT_TRUE(scope.getExceptionState().hadException()); | 197 EXPECT_TRUE(scope.getExceptionState().hadException()); |
198 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); | 198 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); |
199 EXPECT_EQ( | 199 EXPECT_EQ( |
200 "The subprotocol '@subprotocol-|'\"x\\u0001\\u0002\\u0003x' is invalid.", | 200 "The subprotocol '@subprotocol-|'\"x\\u0001\\u0002\\u0003x' is invalid.", |
201 scope.getExceptionState().message()); | 201 scope.getExceptionState().message()); |
202 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 202 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
203 } | 203 } |
204 | 204 |
205 TEST(DOMWebSocketTest, insecureRequestsUpgrade) { | 205 TEST(DOMWebSocketTest, insecureRequestsUpgrade) { |
206 V8TestingScope scope; | 206 V8TestingScope scope; |
207 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 207 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
208 { | 208 { |
209 InSequence s; | 209 InSequence s; |
210 EXPECT_CALL(webSocketScope.channel(), | 210 EXPECT_CALL(webSocketScope.channel(), |
211 connect(KURL(KURL(), "wss://example.com/endpoint"), String())) | 211 connect(KURL(KURL(), "wss://example.com/endpoint"), String())) |
212 .WillOnce(Return(true)); | 212 .WillOnce(Return(true)); |
213 } | 213 } |
214 | 214 |
215 scope.document().setInsecureRequestPolicy(kUpgradeInsecureRequests); | 215 scope.document().setInsecureRequestPolicy(kUpgradeInsecureRequests); |
216 webSocketScope.socket().connect("ws://example.com/endpoint", Vector<String>(), | 216 webSocketScope.socket().connect("ws://example.com/endpoint", Vector<String>(), |
217 scope.getExceptionState()); | 217 scope.getExceptionState()); |
218 | 218 |
219 EXPECT_FALSE(scope.getExceptionState().hadException()); | 219 EXPECT_FALSE(scope.getExceptionState().hadException()); |
220 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 220 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
221 EXPECT_EQ(KURL(KURL(), "wss://example.com/endpoint"), | 221 EXPECT_EQ(KURL(KURL(), "wss://example.com/endpoint"), |
222 webSocketScope.socket().url()); | 222 webSocketScope.socket().url()); |
223 } | 223 } |
224 | 224 |
225 TEST(DOMWebSocketTest, insecureRequestsDoNotUpgrade) { | 225 TEST(DOMWebSocketTest, insecureRequestsDoNotUpgrade) { |
226 V8TestingScope scope; | 226 V8TestingScope scope; |
227 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 227 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
228 { | 228 { |
229 InSequence s; | 229 InSequence s; |
230 EXPECT_CALL(webSocketScope.channel(), | 230 EXPECT_CALL(webSocketScope.channel(), |
231 connect(KURL(KURL(), "ws://example.com/endpoint"), String())) | 231 connect(KURL(KURL(), "ws://example.com/endpoint"), String())) |
232 .WillOnce(Return(true)); | 232 .WillOnce(Return(true)); |
233 } | 233 } |
234 | 234 |
235 scope.document().setInsecureRequestPolicy(kLeaveInsecureRequestsAlone); | 235 scope.document().setInsecureRequestPolicy(kLeaveInsecureRequestsAlone); |
236 webSocketScope.socket().connect("ws://example.com/endpoint", Vector<String>(), | 236 webSocketScope.socket().connect("ws://example.com/endpoint", Vector<String>(), |
237 scope.getExceptionState()); | 237 scope.getExceptionState()); |
238 | 238 |
239 EXPECT_FALSE(scope.getExceptionState().hadException()); | 239 EXPECT_FALSE(scope.getExceptionState().hadException()); |
240 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 240 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
241 EXPECT_EQ(KURL(KURL(), "ws://example.com/endpoint"), | 241 EXPECT_EQ(KURL(KURL(), "ws://example.com/endpoint"), |
242 webSocketScope.socket().url()); | 242 webSocketScope.socket().url()); |
243 } | 243 } |
244 | 244 |
245 TEST(DOMWebSocketTest, channelConnectSuccess) { | 245 TEST(DOMWebSocketTest, channelConnectSuccess) { |
246 V8TestingScope scope; | 246 V8TestingScope scope; |
247 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 247 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
248 Vector<String> subprotocols; | 248 Vector<String> subprotocols; |
249 subprotocols.append("aa"); | 249 subprotocols.append("aa"); |
250 subprotocols.append("bb"); | 250 subprotocols.append("bb"); |
251 | 251 |
252 { | 252 { |
253 InSequence s; | 253 InSequence s; |
254 EXPECT_CALL( | 254 EXPECT_CALL( |
255 webSocketScope.channel(), | 255 webSocketScope.channel(), |
256 connect(KURL(KURL(), "ws://example.com/hoge"), String("aa, bb"))) | 256 connect(KURL(KURL(), "ws://example.com/hoge"), String("aa, bb"))) |
257 .WillOnce(Return(true)); | 257 .WillOnce(Return(true)); |
258 } | 258 } |
259 | 259 |
260 webSocketScope.socket().connect("ws://example.com/hoge", | 260 webSocketScope.socket().connect("ws://example.com/hoge", |
261 Vector<String>(subprotocols), | 261 Vector<String>(subprotocols), |
262 scope.getExceptionState()); | 262 scope.getExceptionState()); |
263 | 263 |
264 EXPECT_FALSE(scope.getExceptionState().hadException()); | 264 EXPECT_FALSE(scope.getExceptionState().hadException()); |
265 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 265 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
266 EXPECT_EQ(KURL(KURL(), "ws://example.com/hoge"), | 266 EXPECT_EQ(KURL(KURL(), "ws://example.com/hoge"), |
267 webSocketScope.socket().url()); | 267 webSocketScope.socket().url()); |
268 } | 268 } |
269 | 269 |
270 TEST(DOMWebSocketTest, channelConnectFail) { | 270 TEST(DOMWebSocketTest, channelConnectFail) { |
271 V8TestingScope scope; | 271 V8TestingScope scope; |
272 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 272 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
273 Vector<String> subprotocols; | 273 Vector<String> subprotocols; |
274 subprotocols.append("aa"); | 274 subprotocols.append("aa"); |
275 subprotocols.append("bb"); | 275 subprotocols.append("bb"); |
276 | 276 |
277 { | 277 { |
278 InSequence s; | 278 InSequence s; |
279 EXPECT_CALL(webSocketScope.channel(), | 279 EXPECT_CALL(webSocketScope.channel(), |
280 connect(KURL(KURL(), "ws://example.com/"), String("aa, bb"))) | 280 connect(KURL(KURL(), "ws://example.com/"), String("aa, bb"))) |
281 .WillOnce(Return(false)); | 281 .WillOnce(Return(false)); |
282 EXPECT_CALL(webSocketScope.channel(), disconnect()); | 282 EXPECT_CALL(webSocketScope.channel(), disconnect()); |
283 } | 283 } |
284 | 284 |
285 webSocketScope.socket().connect("ws://example.com/", | 285 webSocketScope.socket().connect("ws://example.com/", |
286 Vector<String>(subprotocols), | 286 Vector<String>(subprotocols), |
287 scope.getExceptionState()); | 287 scope.getExceptionState()); |
288 | 288 |
289 EXPECT_TRUE(scope.getExceptionState().hadException()); | 289 EXPECT_TRUE(scope.getExceptionState().hadException()); |
290 EXPECT_EQ(SecurityError, scope.getExceptionState().code()); | 290 EXPECT_EQ(SecurityError, scope.getExceptionState().code()); |
291 EXPECT_EQ( | 291 EXPECT_EQ( |
292 "An insecure WebSocket connection may not be initiated from a page " | 292 "An insecure WebSocket connection may not be initiated from a page " |
293 "loaded over HTTPS.", | 293 "loaded over HTTPS.", |
294 scope.getExceptionState().message()); | 294 scope.getExceptionState().message()); |
295 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 295 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
296 } | 296 } |
297 | 297 |
298 TEST(DOMWebSocketTest, isValidSubprotocolString) { | 298 TEST(DOMWebSocketTest, isValidSubprotocolString) { |
299 EXPECT_TRUE(DOMWebSocket::isValidSubprotocolString("Helloworld!!")); | 299 EXPECT_TRUE(DOMWebSocket::isValidSubprotocolString("Helloworld!!")); |
300 EXPECT_FALSE(DOMWebSocket::isValidSubprotocolString("Hello, world!!")); | 300 EXPECT_FALSE(DOMWebSocket::isValidSubprotocolString("Hello, world!!")); |
301 EXPECT_FALSE(DOMWebSocket::isValidSubprotocolString(String())); | 301 EXPECT_FALSE(DOMWebSocket::isValidSubprotocolString(String())); |
302 EXPECT_FALSE(DOMWebSocket::isValidSubprotocolString("")); | 302 EXPECT_FALSE(DOMWebSocket::isValidSubprotocolString("")); |
303 | 303 |
304 const char validCharacters[] = | 304 const char validCharacters[] = |
305 "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`" | 305 "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`" |
(...skipping 24 matching lines...) Expand all Loading... |
330 { | 330 { |
331 InSequence s; | 331 InSequence s; |
332 EXPECT_CALL(webSocketScope.channel(), | 332 EXPECT_CALL(webSocketScope.channel(), |
333 connect(KURL(KURL(), "ws://example.com/"), String("aa, bb"))) | 333 connect(KURL(KURL(), "ws://example.com/"), String("aa, bb"))) |
334 .WillOnce(Return(true)); | 334 .WillOnce(Return(true)); |
335 } | 335 } |
336 webSocketScope.socket().connect("ws://example.com/", subprotocols, | 336 webSocketScope.socket().connect("ws://example.com/", subprotocols, |
337 scope.getExceptionState()); | 337 scope.getExceptionState()); |
338 | 338 |
339 EXPECT_FALSE(scope.getExceptionState().hadException()); | 339 EXPECT_FALSE(scope.getExceptionState().hadException()); |
340 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 340 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
341 | 341 |
342 webSocketScope.socket().didConnect("bb", "cc"); | 342 webSocketScope.socket().didConnect("bb", "cc"); |
343 | 343 |
344 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 344 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
345 EXPECT_EQ("bb", webSocketScope.socket().protocol()); | 345 EXPECT_EQ("bb", webSocketScope.socket().protocol()); |
346 EXPECT_EQ("cc", webSocketScope.socket().extensions()); | 346 EXPECT_EQ("cc", webSocketScope.socket().extensions()); |
347 } | 347 } |
348 | 348 |
349 TEST(DOMWebSocketTest, didClose) { | 349 TEST(DOMWebSocketTest, didClose) { |
350 V8TestingScope scope; | 350 V8TestingScope scope; |
351 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 351 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
352 { | 352 { |
353 InSequence s; | 353 InSequence s; |
354 EXPECT_CALL(webSocketScope.channel(), | 354 EXPECT_CALL(webSocketScope.channel(), |
355 connect(KURL(KURL(), "ws://example.com/"), String())) | 355 connect(KURL(KURL(), "ws://example.com/"), String())) |
356 .WillOnce(Return(true)); | 356 .WillOnce(Return(true)); |
357 EXPECT_CALL(webSocketScope.channel(), disconnect()); | 357 EXPECT_CALL(webSocketScope.channel(), disconnect()); |
358 } | 358 } |
359 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 359 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
360 scope.getExceptionState()); | 360 scope.getExceptionState()); |
361 | 361 |
362 EXPECT_FALSE(scope.getExceptionState().hadException()); | 362 EXPECT_FALSE(scope.getExceptionState().hadException()); |
363 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 363 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
364 | 364 |
365 webSocketScope.socket().didClose( | 365 webSocketScope.socket().didClose( |
366 WebSocketChannelClient::ClosingHandshakeIncomplete, 1006, ""); | 366 WebSocketChannelClient::ClosingHandshakeIncomplete, 1006, ""); |
367 | 367 |
368 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 368 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
369 } | 369 } |
370 | 370 |
371 TEST(DOMWebSocketTest, maximumReasonSize) { | 371 TEST(DOMWebSocketTest, maximumReasonSize) { |
372 V8TestingScope scope; | 372 V8TestingScope scope; |
373 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 373 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
374 { | 374 { |
375 InSequence s; | 375 InSequence s; |
376 EXPECT_CALL(webSocketScope.channel(), | 376 EXPECT_CALL(webSocketScope.channel(), |
377 connect(KURL(KURL(), "ws://example.com/"), String())) | 377 connect(KURL(KURL(), "ws://example.com/"), String())) |
378 .WillOnce(Return(true)); | 378 .WillOnce(Return(true)); |
379 EXPECT_CALL(webSocketScope.channel(), failMock(_, _, _)); | 379 EXPECT_CALL(webSocketScope.channel(), failMock(_, _, _)); |
380 } | 380 } |
381 StringBuilder reason; | 381 StringBuilder reason; |
382 for (size_t i = 0; i < 123; ++i) | 382 for (size_t i = 0; i < 123; ++i) |
383 reason.append('a'); | 383 reason.append('a'); |
384 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 384 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
385 scope.getExceptionState()); | 385 scope.getExceptionState()); |
386 | 386 |
387 EXPECT_FALSE(scope.getExceptionState().hadException()); | 387 EXPECT_FALSE(scope.getExceptionState().hadException()); |
388 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 388 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
389 | 389 |
390 webSocketScope.socket().close(1000, reason.toString(), | 390 webSocketScope.socket().close(1000, reason.toString(), |
391 scope.getExceptionState()); | 391 scope.getExceptionState()); |
392 | 392 |
393 EXPECT_FALSE(scope.getExceptionState().hadException()); | 393 EXPECT_FALSE(scope.getExceptionState().hadException()); |
394 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 394 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
395 } | 395 } |
396 | 396 |
397 TEST(DOMWebSocketTest, reasonSizeExceeding) { | 397 TEST(DOMWebSocketTest, reasonSizeExceeding) { |
398 V8TestingScope scope; | 398 V8TestingScope scope; |
399 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 399 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
400 { | 400 { |
401 InSequence s; | 401 InSequence s; |
402 EXPECT_CALL(webSocketScope.channel(), | 402 EXPECT_CALL(webSocketScope.channel(), |
403 connect(KURL(KURL(), "ws://example.com/"), String())) | 403 connect(KURL(KURL(), "ws://example.com/"), String())) |
404 .WillOnce(Return(true)); | 404 .WillOnce(Return(true)); |
405 } | 405 } |
406 StringBuilder reason; | 406 StringBuilder reason; |
407 for (size_t i = 0; i < 124; ++i) | 407 for (size_t i = 0; i < 124; ++i) |
408 reason.append('a'); | 408 reason.append('a'); |
409 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 409 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
410 scope.getExceptionState()); | 410 scope.getExceptionState()); |
411 | 411 |
412 EXPECT_FALSE(scope.getExceptionState().hadException()); | 412 EXPECT_FALSE(scope.getExceptionState().hadException()); |
413 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 413 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
414 | 414 |
415 webSocketScope.socket().close(1000, reason.toString(), | 415 webSocketScope.socket().close(1000, reason.toString(), |
416 scope.getExceptionState()); | 416 scope.getExceptionState()); |
417 | 417 |
418 EXPECT_TRUE(scope.getExceptionState().hadException()); | 418 EXPECT_TRUE(scope.getExceptionState().hadException()); |
419 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); | 419 EXPECT_EQ(SyntaxError, scope.getExceptionState().code()); |
420 EXPECT_EQ("The message must not be greater than 123 bytes.", | 420 EXPECT_EQ("The message must not be greater than 123 bytes.", |
421 scope.getExceptionState().message()); | 421 scope.getExceptionState().message()); |
422 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 422 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
423 } | 423 } |
424 | 424 |
425 TEST(DOMWebSocketTest, closeWhenConnecting) { | 425 TEST(DOMWebSocketTest, closeWhenConnecting) { |
426 V8TestingScope scope; | 426 V8TestingScope scope; |
427 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 427 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
428 { | 428 { |
429 InSequence s; | 429 InSequence s; |
430 EXPECT_CALL(webSocketScope.channel(), | 430 EXPECT_CALL(webSocketScope.channel(), |
431 connect(KURL(KURL(), "ws://example.com/"), String())) | 431 connect(KURL(KURL(), "ws://example.com/"), String())) |
432 .WillOnce(Return(true)); | 432 .WillOnce(Return(true)); |
433 EXPECT_CALL( | 433 EXPECT_CALL( |
434 webSocketScope.channel(), | 434 webSocketScope.channel(), |
435 failMock( | 435 failMock( |
436 String("WebSocket is closed before the connection is established."), | 436 String("WebSocket is closed before the connection is established."), |
437 WarningMessageLevel, _)); | 437 WarningMessageLevel, _)); |
438 } | 438 } |
439 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 439 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
440 scope.getExceptionState()); | 440 scope.getExceptionState()); |
441 | 441 |
442 EXPECT_FALSE(scope.getExceptionState().hadException()); | 442 EXPECT_FALSE(scope.getExceptionState().hadException()); |
443 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 443 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
444 | 444 |
445 webSocketScope.socket().close(1000, "bye", scope.getExceptionState()); | 445 webSocketScope.socket().close(1000, "bye", scope.getExceptionState()); |
446 | 446 |
447 EXPECT_FALSE(scope.getExceptionState().hadException()); | 447 EXPECT_FALSE(scope.getExceptionState().hadException()); |
448 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 448 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
449 } | 449 } |
450 | 450 |
451 TEST(DOMWebSocketTest, close) { | 451 TEST(DOMWebSocketTest, close) { |
452 V8TestingScope scope; | 452 V8TestingScope scope; |
453 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 453 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
454 { | 454 { |
455 InSequence s; | 455 InSequence s; |
456 EXPECT_CALL(webSocketScope.channel(), | 456 EXPECT_CALL(webSocketScope.channel(), |
457 connect(KURL(KURL(), "ws://example.com/"), String())) | 457 connect(KURL(KURL(), "ws://example.com/"), String())) |
458 .WillOnce(Return(true)); | 458 .WillOnce(Return(true)); |
459 EXPECT_CALL(webSocketScope.channel(), close(3005, String("bye"))); | 459 EXPECT_CALL(webSocketScope.channel(), close(3005, String("bye"))); |
460 } | 460 } |
461 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 461 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
462 scope.getExceptionState()); | 462 scope.getExceptionState()); |
463 | 463 |
464 EXPECT_FALSE(scope.getExceptionState().hadException()); | 464 EXPECT_FALSE(scope.getExceptionState().hadException()); |
465 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 465 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
466 | 466 |
467 webSocketScope.socket().didConnect("", ""); | 467 webSocketScope.socket().didConnect("", ""); |
468 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 468 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
469 webSocketScope.socket().close(3005, "bye", scope.getExceptionState()); | 469 webSocketScope.socket().close(3005, "bye", scope.getExceptionState()); |
470 | 470 |
471 EXPECT_FALSE(scope.getExceptionState().hadException()); | 471 EXPECT_FALSE(scope.getExceptionState().hadException()); |
472 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 472 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
473 } | 473 } |
474 | 474 |
475 TEST(DOMWebSocketTest, closeWithoutReason) { | 475 TEST(DOMWebSocketTest, closeWithoutReason) { |
476 V8TestingScope scope; | 476 V8TestingScope scope; |
477 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 477 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
478 { | 478 { |
479 InSequence s; | 479 InSequence s; |
480 EXPECT_CALL(webSocketScope.channel(), | 480 EXPECT_CALL(webSocketScope.channel(), |
481 connect(KURL(KURL(), "ws://example.com/"), String())) | 481 connect(KURL(KURL(), "ws://example.com/"), String())) |
482 .WillOnce(Return(true)); | 482 .WillOnce(Return(true)); |
483 EXPECT_CALL(webSocketScope.channel(), close(3005, String())); | 483 EXPECT_CALL(webSocketScope.channel(), close(3005, String())); |
484 } | 484 } |
485 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 485 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
486 scope.getExceptionState()); | 486 scope.getExceptionState()); |
487 | 487 |
488 EXPECT_FALSE(scope.getExceptionState().hadException()); | 488 EXPECT_FALSE(scope.getExceptionState().hadException()); |
489 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 489 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
490 | 490 |
491 webSocketScope.socket().didConnect("", ""); | 491 webSocketScope.socket().didConnect("", ""); |
492 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 492 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
493 webSocketScope.socket().close(3005, scope.getExceptionState()); | 493 webSocketScope.socket().close(3005, scope.getExceptionState()); |
494 | 494 |
495 EXPECT_FALSE(scope.getExceptionState().hadException()); | 495 EXPECT_FALSE(scope.getExceptionState().hadException()); |
496 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 496 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
497 } | 497 } |
498 | 498 |
499 TEST(DOMWebSocketTest, closeWithoutCodeAndReason) { | 499 TEST(DOMWebSocketTest, closeWithoutCodeAndReason) { |
500 V8TestingScope scope; | 500 V8TestingScope scope; |
501 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 501 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
502 { | 502 { |
503 InSequence s; | 503 InSequence s; |
504 EXPECT_CALL(webSocketScope.channel(), | 504 EXPECT_CALL(webSocketScope.channel(), |
505 connect(KURL(KURL(), "ws://example.com/"), String())) | 505 connect(KURL(KURL(), "ws://example.com/"), String())) |
506 .WillOnce(Return(true)); | 506 .WillOnce(Return(true)); |
507 EXPECT_CALL(webSocketScope.channel(), close(-1, String())); | 507 EXPECT_CALL(webSocketScope.channel(), close(-1, String())); |
508 } | 508 } |
509 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 509 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
510 scope.getExceptionState()); | 510 scope.getExceptionState()); |
511 | 511 |
512 EXPECT_FALSE(scope.getExceptionState().hadException()); | 512 EXPECT_FALSE(scope.getExceptionState().hadException()); |
513 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 513 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
514 | 514 |
515 webSocketScope.socket().didConnect("", ""); | 515 webSocketScope.socket().didConnect("", ""); |
516 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 516 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
517 webSocketScope.socket().close(scope.getExceptionState()); | 517 webSocketScope.socket().close(scope.getExceptionState()); |
518 | 518 |
519 EXPECT_FALSE(scope.getExceptionState().hadException()); | 519 EXPECT_FALSE(scope.getExceptionState().hadException()); |
520 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 520 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
521 } | 521 } |
522 | 522 |
523 TEST(DOMWebSocketTest, closeWhenClosing) { | 523 TEST(DOMWebSocketTest, closeWhenClosing) { |
524 V8TestingScope scope; | 524 V8TestingScope scope; |
525 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 525 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
526 { | 526 { |
527 InSequence s; | 527 InSequence s; |
528 EXPECT_CALL(webSocketScope.channel(), | 528 EXPECT_CALL(webSocketScope.channel(), |
529 connect(KURL(KURL(), "ws://example.com/"), String())) | 529 connect(KURL(KURL(), "ws://example.com/"), String())) |
530 .WillOnce(Return(true)); | 530 .WillOnce(Return(true)); |
531 EXPECT_CALL(webSocketScope.channel(), close(-1, String())); | 531 EXPECT_CALL(webSocketScope.channel(), close(-1, String())); |
532 } | 532 } |
533 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 533 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
534 scope.getExceptionState()); | 534 scope.getExceptionState()); |
535 | 535 |
536 EXPECT_FALSE(scope.getExceptionState().hadException()); | 536 EXPECT_FALSE(scope.getExceptionState().hadException()); |
537 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 537 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
538 | 538 |
539 webSocketScope.socket().didConnect("", ""); | 539 webSocketScope.socket().didConnect("", ""); |
540 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 540 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
541 webSocketScope.socket().close(scope.getExceptionState()); | 541 webSocketScope.socket().close(scope.getExceptionState()); |
542 EXPECT_FALSE(scope.getExceptionState().hadException()); | 542 EXPECT_FALSE(scope.getExceptionState().hadException()); |
543 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 543 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
544 | 544 |
545 webSocketScope.socket().close(scope.getExceptionState()); | 545 webSocketScope.socket().close(scope.getExceptionState()); |
546 | 546 |
547 EXPECT_FALSE(scope.getExceptionState().hadException()); | 547 EXPECT_FALSE(scope.getExceptionState().hadException()); |
548 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 548 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
549 } | 549 } |
550 | 550 |
551 TEST(DOMWebSocketTest, closeWhenClosed) { | 551 TEST(DOMWebSocketTest, closeWhenClosed) { |
552 V8TestingScope scope; | 552 V8TestingScope scope; |
553 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 553 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
554 { | 554 { |
555 InSequence s; | 555 InSequence s; |
556 EXPECT_CALL(webSocketScope.channel(), | 556 EXPECT_CALL(webSocketScope.channel(), |
557 connect(KURL(KURL(), "ws://example.com/"), String())) | 557 connect(KURL(KURL(), "ws://example.com/"), String())) |
558 .WillOnce(Return(true)); | 558 .WillOnce(Return(true)); |
559 EXPECT_CALL(webSocketScope.channel(), close(-1, String())); | 559 EXPECT_CALL(webSocketScope.channel(), close(-1, String())); |
560 EXPECT_CALL(webSocketScope.channel(), disconnect()); | 560 EXPECT_CALL(webSocketScope.channel(), disconnect()); |
561 } | 561 } |
562 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 562 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
563 scope.getExceptionState()); | 563 scope.getExceptionState()); |
564 | 564 |
565 EXPECT_FALSE(scope.getExceptionState().hadException()); | 565 EXPECT_FALSE(scope.getExceptionState().hadException()); |
566 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 566 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
567 | 567 |
568 webSocketScope.socket().didConnect("", ""); | 568 webSocketScope.socket().didConnect("", ""); |
569 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 569 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
570 webSocketScope.socket().close(scope.getExceptionState()); | 570 webSocketScope.socket().close(scope.getExceptionState()); |
571 EXPECT_FALSE(scope.getExceptionState().hadException()); | 571 EXPECT_FALSE(scope.getExceptionState().hadException()); |
572 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 572 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
573 | 573 |
574 webSocketScope.socket().didClose( | 574 webSocketScope.socket().didClose( |
575 WebSocketChannelClient::ClosingHandshakeComplete, 1000, String()); | 575 WebSocketChannelClient::ClosingHandshakeComplete, 1000, String()); |
576 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 576 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
577 webSocketScope.socket().close(scope.getExceptionState()); | 577 webSocketScope.socket().close(scope.getExceptionState()); |
578 | 578 |
579 EXPECT_FALSE(scope.getExceptionState().hadException()); | 579 EXPECT_FALSE(scope.getExceptionState().hadException()); |
580 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 580 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
581 } | 581 } |
582 | 582 |
583 TEST(DOMWebSocketTest, sendStringWhenConnecting) { | 583 TEST(DOMWebSocketTest, sendStringWhenConnecting) { |
584 V8TestingScope scope; | 584 V8TestingScope scope; |
585 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 585 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
586 { | 586 { |
587 InSequence s; | 587 InSequence s; |
588 EXPECT_CALL(webSocketScope.channel(), | 588 EXPECT_CALL(webSocketScope.channel(), |
589 connect(KURL(KURL(), "ws://example.com/"), String())) | 589 connect(KURL(KURL(), "ws://example.com/"), String())) |
590 .WillOnce(Return(true)); | 590 .WillOnce(Return(true)); |
591 } | 591 } |
592 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 592 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
593 scope.getExceptionState()); | 593 scope.getExceptionState()); |
594 | 594 |
595 EXPECT_FALSE(scope.getExceptionState().hadException()); | 595 EXPECT_FALSE(scope.getExceptionState().hadException()); |
596 | 596 |
597 webSocketScope.socket().send("hello", scope.getExceptionState()); | 597 webSocketScope.socket().send("hello", scope.getExceptionState()); |
598 | 598 |
599 EXPECT_TRUE(scope.getExceptionState().hadException()); | 599 EXPECT_TRUE(scope.getExceptionState().hadException()); |
600 EXPECT_EQ(InvalidStateError, scope.getExceptionState().code()); | 600 EXPECT_EQ(InvalidStateError, scope.getExceptionState().code()); |
601 EXPECT_EQ("Still in CONNECTING state.", scope.getExceptionState().message()); | 601 EXPECT_EQ("Still in CONNECTING state.", scope.getExceptionState().message()); |
602 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 602 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
603 } | 603 } |
604 | 604 |
605 TEST(DOMWebSocketTest, sendStringWhenClosing) { | 605 TEST(DOMWebSocketTest, sendStringWhenClosing) { |
606 V8TestingScope scope; | 606 V8TestingScope scope; |
607 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 607 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
608 Checkpoint checkpoint; | 608 Checkpoint checkpoint; |
609 { | 609 { |
610 InSequence s; | 610 InSequence s; |
611 EXPECT_CALL(webSocketScope.channel(), | 611 EXPECT_CALL(webSocketScope.channel(), |
612 connect(KURL(KURL(), "ws://example.com/"), String())) | 612 connect(KURL(KURL(), "ws://example.com/"), String())) |
613 .WillOnce(Return(true)); | 613 .WillOnce(Return(true)); |
614 EXPECT_CALL(webSocketScope.channel(), failMock(_, _, _)); | 614 EXPECT_CALL(webSocketScope.channel(), failMock(_, _, _)); |
615 } | 615 } |
616 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 616 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
617 scope.getExceptionState()); | 617 scope.getExceptionState()); |
618 | 618 |
619 EXPECT_FALSE(scope.getExceptionState().hadException()); | 619 EXPECT_FALSE(scope.getExceptionState().hadException()); |
620 | 620 |
621 webSocketScope.socket().close(scope.getExceptionState()); | 621 webSocketScope.socket().close(scope.getExceptionState()); |
622 EXPECT_FALSE(scope.getExceptionState().hadException()); | 622 EXPECT_FALSE(scope.getExceptionState().hadException()); |
623 | 623 |
624 webSocketScope.socket().send("hello", scope.getExceptionState()); | 624 webSocketScope.socket().send("hello", scope.getExceptionState()); |
625 | 625 |
626 EXPECT_FALSE(scope.getExceptionState().hadException()); | 626 EXPECT_FALSE(scope.getExceptionState().hadException()); |
627 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 627 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
628 } | 628 } |
629 | 629 |
630 TEST(DOMWebSocketTest, sendStringWhenClosed) { | 630 TEST(DOMWebSocketTest, sendStringWhenClosed) { |
631 V8TestingScope scope; | 631 V8TestingScope scope; |
632 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 632 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
633 Checkpoint checkpoint; | 633 Checkpoint checkpoint; |
634 { | 634 { |
635 InSequence s; | 635 InSequence s; |
636 EXPECT_CALL(webSocketScope.channel(), | 636 EXPECT_CALL(webSocketScope.channel(), |
637 connect(KURL(KURL(), "ws://example.com/"), String())) | 637 connect(KURL(KURL(), "ws://example.com/"), String())) |
638 .WillOnce(Return(true)); | 638 .WillOnce(Return(true)); |
639 EXPECT_CALL(webSocketScope.channel(), disconnect()); | 639 EXPECT_CALL(webSocketScope.channel(), disconnect()); |
640 EXPECT_CALL(checkpoint, Call(1)); | 640 EXPECT_CALL(checkpoint, Call(1)); |
641 } | 641 } |
642 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 642 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
643 scope.getExceptionState()); | 643 scope.getExceptionState()); |
644 | 644 |
645 EXPECT_FALSE(scope.getExceptionState().hadException()); | 645 EXPECT_FALSE(scope.getExceptionState().hadException()); |
646 | 646 |
647 webSocketScope.socket().didClose( | 647 webSocketScope.socket().didClose( |
648 WebSocketChannelClient::ClosingHandshakeIncomplete, 1006, ""); | 648 WebSocketChannelClient::ClosingHandshakeIncomplete, 1006, ""); |
649 checkpoint.Call(1); | 649 checkpoint.Call(1); |
650 | 650 |
651 webSocketScope.socket().send("hello", scope.getExceptionState()); | 651 webSocketScope.socket().send("hello", scope.getExceptionState()); |
652 | 652 |
653 EXPECT_FALSE(scope.getExceptionState().hadException()); | 653 EXPECT_FALSE(scope.getExceptionState().hadException()); |
654 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 654 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
655 } | 655 } |
656 | 656 |
657 TEST(DOMWebSocketTest, sendStringSuccess) { | 657 TEST(DOMWebSocketTest, sendStringSuccess) { |
658 V8TestingScope scope; | 658 V8TestingScope scope; |
659 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 659 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
660 { | 660 { |
661 InSequence s; | 661 InSequence s; |
662 EXPECT_CALL(webSocketScope.channel(), | 662 EXPECT_CALL(webSocketScope.channel(), |
663 connect(KURL(KURL(), "ws://example.com/"), String())) | 663 connect(KURL(KURL(), "ws://example.com/"), String())) |
664 .WillOnce(Return(true)); | 664 .WillOnce(Return(true)); |
665 EXPECT_CALL(webSocketScope.channel(), send(CString("hello"))); | 665 EXPECT_CALL(webSocketScope.channel(), send(CString("hello"))); |
666 } | 666 } |
667 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 667 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
668 scope.getExceptionState()); | 668 scope.getExceptionState()); |
669 | 669 |
670 EXPECT_FALSE(scope.getExceptionState().hadException()); | 670 EXPECT_FALSE(scope.getExceptionState().hadException()); |
671 | 671 |
672 webSocketScope.socket().didConnect("", ""); | 672 webSocketScope.socket().didConnect("", ""); |
673 webSocketScope.socket().send("hello", scope.getExceptionState()); | 673 webSocketScope.socket().send("hello", scope.getExceptionState()); |
674 | 674 |
675 EXPECT_FALSE(scope.getExceptionState().hadException()); | 675 EXPECT_FALSE(scope.getExceptionState().hadException()); |
676 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 676 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
677 } | 677 } |
678 | 678 |
679 TEST(DOMWebSocketTest, sendNonLatin1String) { | 679 TEST(DOMWebSocketTest, sendNonLatin1String) { |
680 V8TestingScope scope; | 680 V8TestingScope scope; |
681 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 681 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
682 { | 682 { |
683 InSequence s; | 683 InSequence s; |
684 EXPECT_CALL(webSocketScope.channel(), | 684 EXPECT_CALL(webSocketScope.channel(), |
685 connect(KURL(KURL(), "ws://example.com/"), String())) | 685 connect(KURL(KURL(), "ws://example.com/"), String())) |
686 .WillOnce(Return(true)); | 686 .WillOnce(Return(true)); |
687 EXPECT_CALL(webSocketScope.channel(), | 687 EXPECT_CALL(webSocketScope.channel(), |
688 send(CString("\xe7\x8b\x90\xe0\xa4\x94"))); | 688 send(CString("\xe7\x8b\x90\xe0\xa4\x94"))); |
689 } | 689 } |
690 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 690 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
691 scope.getExceptionState()); | 691 scope.getExceptionState()); |
692 | 692 |
693 EXPECT_FALSE(scope.getExceptionState().hadException()); | 693 EXPECT_FALSE(scope.getExceptionState().hadException()); |
694 | 694 |
695 webSocketScope.socket().didConnect("", ""); | 695 webSocketScope.socket().didConnect("", ""); |
696 UChar nonLatin1String[] = {0x72d0, 0x0914, 0x0000}; | 696 UChar nonLatin1String[] = {0x72d0, 0x0914, 0x0000}; |
697 webSocketScope.socket().send(nonLatin1String, scope.getExceptionState()); | 697 webSocketScope.socket().send(nonLatin1String, scope.getExceptionState()); |
698 | 698 |
699 EXPECT_FALSE(scope.getExceptionState().hadException()); | 699 EXPECT_FALSE(scope.getExceptionState().hadException()); |
700 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 700 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
701 } | 701 } |
702 | 702 |
703 TEST(DOMWebSocketTest, sendArrayBufferWhenConnecting) { | 703 TEST(DOMWebSocketTest, sendArrayBufferWhenConnecting) { |
704 V8TestingScope scope; | 704 V8TestingScope scope; |
705 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 705 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
706 DOMArrayBufferView* view = DOMUint8Array::create(8); | 706 DOMArrayBufferView* view = DOMUint8Array::create(8); |
707 { | 707 { |
708 InSequence s; | 708 InSequence s; |
709 EXPECT_CALL(webSocketScope.channel(), | 709 EXPECT_CALL(webSocketScope.channel(), |
710 connect(KURL(KURL(), "ws://example.com/"), String())) | 710 connect(KURL(KURL(), "ws://example.com/"), String())) |
711 .WillOnce(Return(true)); | 711 .WillOnce(Return(true)); |
712 } | 712 } |
713 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 713 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
714 scope.getExceptionState()); | 714 scope.getExceptionState()); |
715 | 715 |
716 EXPECT_FALSE(scope.getExceptionState().hadException()); | 716 EXPECT_FALSE(scope.getExceptionState().hadException()); |
717 | 717 |
718 webSocketScope.socket().send(view->buffer(), scope.getExceptionState()); | 718 webSocketScope.socket().send(view->buffer(), scope.getExceptionState()); |
719 | 719 |
720 EXPECT_TRUE(scope.getExceptionState().hadException()); | 720 EXPECT_TRUE(scope.getExceptionState().hadException()); |
721 EXPECT_EQ(InvalidStateError, scope.getExceptionState().code()); | 721 EXPECT_EQ(InvalidStateError, scope.getExceptionState().code()); |
722 EXPECT_EQ("Still in CONNECTING state.", scope.getExceptionState().message()); | 722 EXPECT_EQ("Still in CONNECTING state.", scope.getExceptionState().message()); |
723 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 723 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
724 } | 724 } |
725 | 725 |
726 TEST(DOMWebSocketTest, sendArrayBufferWhenClosing) { | 726 TEST(DOMWebSocketTest, sendArrayBufferWhenClosing) { |
727 V8TestingScope scope; | 727 V8TestingScope scope; |
728 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 728 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
729 DOMArrayBufferView* view = DOMUint8Array::create(8); | 729 DOMArrayBufferView* view = DOMUint8Array::create(8); |
730 { | 730 { |
731 InSequence s; | 731 InSequence s; |
732 EXPECT_CALL(webSocketScope.channel(), | 732 EXPECT_CALL(webSocketScope.channel(), |
733 connect(KURL(KURL(), "ws://example.com/"), String())) | 733 connect(KURL(KURL(), "ws://example.com/"), String())) |
734 .WillOnce(Return(true)); | 734 .WillOnce(Return(true)); |
735 EXPECT_CALL(webSocketScope.channel(), failMock(_, _, _)); | 735 EXPECT_CALL(webSocketScope.channel(), failMock(_, _, _)); |
736 } | 736 } |
737 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 737 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
738 scope.getExceptionState()); | 738 scope.getExceptionState()); |
739 | 739 |
740 EXPECT_FALSE(scope.getExceptionState().hadException()); | 740 EXPECT_FALSE(scope.getExceptionState().hadException()); |
741 | 741 |
742 webSocketScope.socket().close(scope.getExceptionState()); | 742 webSocketScope.socket().close(scope.getExceptionState()); |
743 EXPECT_FALSE(scope.getExceptionState().hadException()); | 743 EXPECT_FALSE(scope.getExceptionState().hadException()); |
744 | 744 |
745 webSocketScope.socket().send(view->buffer(), scope.getExceptionState()); | 745 webSocketScope.socket().send(view->buffer(), scope.getExceptionState()); |
746 | 746 |
747 EXPECT_FALSE(scope.getExceptionState().hadException()); | 747 EXPECT_FALSE(scope.getExceptionState().hadException()); |
748 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 748 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
749 } | 749 } |
750 | 750 |
751 TEST(DOMWebSocketTest, sendArrayBufferWhenClosed) { | 751 TEST(DOMWebSocketTest, sendArrayBufferWhenClosed) { |
752 V8TestingScope scope; | 752 V8TestingScope scope; |
753 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 753 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
754 Checkpoint checkpoint; | 754 Checkpoint checkpoint; |
755 DOMArrayBufferView* view = DOMUint8Array::create(8); | 755 DOMArrayBufferView* view = DOMUint8Array::create(8); |
756 { | 756 { |
757 InSequence s; | 757 InSequence s; |
758 EXPECT_CALL(webSocketScope.channel(), | 758 EXPECT_CALL(webSocketScope.channel(), |
759 connect(KURL(KURL(), "ws://example.com/"), String())) | 759 connect(KURL(KURL(), "ws://example.com/"), String())) |
760 .WillOnce(Return(true)); | 760 .WillOnce(Return(true)); |
761 EXPECT_CALL(webSocketScope.channel(), disconnect()); | 761 EXPECT_CALL(webSocketScope.channel(), disconnect()); |
762 EXPECT_CALL(checkpoint, Call(1)); | 762 EXPECT_CALL(checkpoint, Call(1)); |
763 } | 763 } |
764 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 764 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
765 scope.getExceptionState()); | 765 scope.getExceptionState()); |
766 | 766 |
767 EXPECT_FALSE(scope.getExceptionState().hadException()); | 767 EXPECT_FALSE(scope.getExceptionState().hadException()); |
768 | 768 |
769 webSocketScope.socket().didClose( | 769 webSocketScope.socket().didClose( |
770 WebSocketChannelClient::ClosingHandshakeIncomplete, 1006, ""); | 770 WebSocketChannelClient::ClosingHandshakeIncomplete, 1006, ""); |
771 checkpoint.Call(1); | 771 checkpoint.Call(1); |
772 | 772 |
773 webSocketScope.socket().send(view->buffer(), scope.getExceptionState()); | 773 webSocketScope.socket().send(view->buffer(), scope.getExceptionState()); |
774 | 774 |
775 EXPECT_FALSE(scope.getExceptionState().hadException()); | 775 EXPECT_FALSE(scope.getExceptionState().hadException()); |
776 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().readyState()); | 776 EXPECT_EQ(DOMWebSocket::kClosed, webSocketScope.socket().getReadyState()); |
777 } | 777 } |
778 | 778 |
779 TEST(DOMWebSocketTest, sendArrayBufferSuccess) { | 779 TEST(DOMWebSocketTest, sendArrayBufferSuccess) { |
780 V8TestingScope scope; | 780 V8TestingScope scope; |
781 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 781 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
782 DOMArrayBufferView* view = DOMUint8Array::create(8); | 782 DOMArrayBufferView* view = DOMUint8Array::create(8); |
783 { | 783 { |
784 InSequence s; | 784 InSequence s; |
785 EXPECT_CALL(webSocketScope.channel(), | 785 EXPECT_CALL(webSocketScope.channel(), |
786 connect(KURL(KURL(), "ws://example.com/"), String())) | 786 connect(KURL(KURL(), "ws://example.com/"), String())) |
787 .WillOnce(Return(true)); | 787 .WillOnce(Return(true)); |
788 EXPECT_CALL(webSocketScope.channel(), send(Ref(*view->buffer()), 0, 8)); | 788 EXPECT_CALL(webSocketScope.channel(), send(Ref(*view->buffer()), 0, 8)); |
789 } | 789 } |
790 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 790 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
791 scope.getExceptionState()); | 791 scope.getExceptionState()); |
792 | 792 |
793 EXPECT_FALSE(scope.getExceptionState().hadException()); | 793 EXPECT_FALSE(scope.getExceptionState().hadException()); |
794 | 794 |
795 webSocketScope.socket().didConnect("", ""); | 795 webSocketScope.socket().didConnect("", ""); |
796 webSocketScope.socket().send(view->buffer(), scope.getExceptionState()); | 796 webSocketScope.socket().send(view->buffer(), scope.getExceptionState()); |
797 | 797 |
798 EXPECT_FALSE(scope.getExceptionState().hadException()); | 798 EXPECT_FALSE(scope.getExceptionState().hadException()); |
799 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().readyState()); | 799 EXPECT_EQ(DOMWebSocket::kOpen, webSocketScope.socket().getReadyState()); |
800 } | 800 } |
801 | 801 |
802 // FIXME: We should have Blob tests here. | 802 // FIXME: We should have Blob tests here. |
803 // We can't create a Blob because the blob registration cannot be mocked yet. | 803 // We can't create a Blob because the blob registration cannot be mocked yet. |
804 | 804 |
805 // FIXME: We should add tests for bufferedAmount. | 805 // FIXME: We should add tests for bufferedAmount. |
806 | 806 |
807 // FIXME: We should add tests for data receiving. | 807 // FIXME: We should add tests for data receiving. |
808 | 808 |
809 TEST(DOMWebSocketTest, binaryType) { | 809 TEST(DOMWebSocketTest, binaryType) { |
(...skipping 22 matching lines...) Expand all Loading... |
832 InSequence s; | 832 InSequence s; |
833 EXPECT_CALL(webSocketScope.channel(), | 833 EXPECT_CALL(webSocketScope.channel(), |
834 connect(KURL(KURL(), "ws://example.com/"), String())) | 834 connect(KURL(KURL(), "ws://example.com/"), String())) |
835 .WillOnce(Return(true)); | 835 .WillOnce(Return(true)); |
836 EXPECT_CALL(webSocketScope.channel(), failMock(_, _, _)); | 836 EXPECT_CALL(webSocketScope.channel(), failMock(_, _, _)); |
837 } | 837 } |
838 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 838 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
839 scope.getExceptionState()); | 839 scope.getExceptionState()); |
840 | 840 |
841 EXPECT_FALSE(scope.getExceptionState().hadException()); | 841 EXPECT_FALSE(scope.getExceptionState().hadException()); |
842 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 842 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
843 | 843 |
844 webSocketScope.socket().close(GetParam(), "bye", scope.getExceptionState()); | 844 webSocketScope.socket().close(GetParam(), "bye", scope.getExceptionState()); |
845 | 845 |
846 EXPECT_FALSE(scope.getExceptionState().hadException()); | 846 EXPECT_FALSE(scope.getExceptionState().hadException()); |
847 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().readyState()); | 847 EXPECT_EQ(DOMWebSocket::kClosing, webSocketScope.socket().getReadyState()); |
848 } | 848 } |
849 | 849 |
850 INSTANTIATE_TEST_CASE_P(DOMWebSocketValidClosing, | 850 INSTANTIATE_TEST_CASE_P(DOMWebSocketValidClosing, |
851 DOMWebSocketValidClosingTest, | 851 DOMWebSocketValidClosingTest, |
852 ::testing::Values(1000, 3000, 3001, 4998, 4999)); | 852 ::testing::Values(1000, 3000, 3001, 4998, 4999)); |
853 | 853 |
854 class DOMWebSocketInvalidClosingCodeTest | 854 class DOMWebSocketInvalidClosingCodeTest |
855 : public ::testing::TestWithParam<unsigned short> {}; | 855 : public ::testing::TestWithParam<unsigned short> {}; |
856 | 856 |
857 TEST_P(DOMWebSocketInvalidClosingCodeTest, test) { | 857 TEST_P(DOMWebSocketInvalidClosingCodeTest, test) { |
858 V8TestingScope scope; | 858 V8TestingScope scope; |
859 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); | 859 DOMWebSocketTestScope webSocketScope(scope.getExecutionContext()); |
860 { | 860 { |
861 InSequence s; | 861 InSequence s; |
862 EXPECT_CALL(webSocketScope.channel(), | 862 EXPECT_CALL(webSocketScope.channel(), |
863 connect(KURL(KURL(), "ws://example.com/"), String())) | 863 connect(KURL(KURL(), "ws://example.com/"), String())) |
864 .WillOnce(Return(true)); | 864 .WillOnce(Return(true)); |
865 } | 865 } |
866 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), | 866 webSocketScope.socket().connect("ws://example.com/", Vector<String>(), |
867 scope.getExceptionState()); | 867 scope.getExceptionState()); |
868 | 868 |
869 EXPECT_FALSE(scope.getExceptionState().hadException()); | 869 EXPECT_FALSE(scope.getExceptionState().hadException()); |
870 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 870 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
871 | 871 |
872 webSocketScope.socket().close(GetParam(), "bye", scope.getExceptionState()); | 872 webSocketScope.socket().close(GetParam(), "bye", scope.getExceptionState()); |
873 | 873 |
874 EXPECT_TRUE(scope.getExceptionState().hadException()); | 874 EXPECT_TRUE(scope.getExceptionState().hadException()); |
875 EXPECT_EQ(InvalidAccessError, scope.getExceptionState().code()); | 875 EXPECT_EQ(InvalidAccessError, scope.getExceptionState().code()); |
876 EXPECT_EQ(String::format("The code must be either 1000, or between 3000 and " | 876 EXPECT_EQ(String::format("The code must be either 1000, or between 3000 and " |
877 "4999. %d is neither.", | 877 "4999. %d is neither.", |
878 GetParam()), | 878 GetParam()), |
879 scope.getExceptionState().message()); | 879 scope.getExceptionState().message()); |
880 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().readyState()); | 880 EXPECT_EQ(DOMWebSocket::kConnecting, webSocketScope.socket().getReadyState()); |
881 } | 881 } |
882 | 882 |
883 INSTANTIATE_TEST_CASE_P( | 883 INSTANTIATE_TEST_CASE_P( |
884 DOMWebSocketInvalidClosingCode, | 884 DOMWebSocketInvalidClosingCode, |
885 DOMWebSocketInvalidClosingCodeTest, | 885 DOMWebSocketInvalidClosingCodeTest, |
886 ::testing::Values(0, 1, 998, 999, 1001, 2999, 5000, 9999, 65535)); | 886 ::testing::Values(0, 1, 998, 999, 1001, 2999, 5000, 9999, 65535)); |
887 | 887 |
888 } // namespace | 888 } // namespace |
889 | 889 |
890 } // namespace blink | 890 } // namespace blink |
OLD | NEW |