| 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 | 
|---|