| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 #include "public/platform/Platform.h" | 48 #include "public/platform/Platform.h" |
| 49 #include "public/platform/WebSocketHandle.h" | 49 #include "public/platform/WebSocketHandle.h" |
| 50 #include "public/platform/WebString.h" | 50 #include "public/platform/WebString.h" |
| 51 #include "public/platform/WebURL.h" | 51 #include "public/platform/WebURL.h" |
| 52 #include "public/platform/WebVector.h" | 52 #include "public/platform/WebVector.h" |
| 53 #include "weborigin/SecurityOrigin.h" | 53 #include "weborigin/SecurityOrigin.h" |
| 54 #include "wtf/ArrayBuffer.h" | 54 #include "wtf/ArrayBuffer.h" |
| 55 #include "wtf/Vector.h" | 55 #include "wtf/Vector.h" |
| 56 #include "wtf/text/WTFString.h" | 56 #include "wtf/text/WTFString.h" |
| 57 | 57 |
| 58 using WebKit::WebSocketHandle; | 58 using blink::WebSocketHandle; |
| 59 | 59 |
| 60 namespace WebCore { | 60 namespace WebCore { |
| 61 | 61 |
| 62 namespace { | 62 namespace { |
| 63 | 63 |
| 64 bool isClean(int code) | 64 bool isClean(int code) |
| 65 { | 65 { |
| 66 return code == WebSocketChannel::CloseEventCodeNormalClosure | 66 return code == WebSocketChannel::CloseEventCodeNormalClosure |
| 67 || (WebSocketChannel::CloseEventCodeMinimumUserDefined <= code | 67 || (WebSocketChannel::CloseEventCodeMinimumUserDefined <= code |
| 68 && code <= WebSocketChannel::CloseEventCodeMaximumUserDefined); | 68 && code <= WebSocketChannel::CloseEventCodeMaximumUserDefined); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 } | 109 } |
| 110 | 110 |
| 111 void NewWebSocketChannelImpl::BlobLoader::didFail(FileError::ErrorCode errorCode
) | 111 void NewWebSocketChannelImpl::BlobLoader::didFail(FileError::ErrorCode errorCode
) |
| 112 { | 112 { |
| 113 m_channel->didFailLoadingBlob(errorCode); | 113 m_channel->didFailLoadingBlob(errorCode); |
| 114 // |this| is deleted here. | 114 // |this| is deleted here. |
| 115 } | 115 } |
| 116 | 116 |
| 117 NewWebSocketChannelImpl::NewWebSocketChannelImpl(ExecutionContext* context, WebS
ocketChannelClient* client, const String& sourceURL, unsigned lineNumber) | 117 NewWebSocketChannelImpl::NewWebSocketChannelImpl(ExecutionContext* context, WebS
ocketChannelClient* client, const String& sourceURL, unsigned lineNumber) |
| 118 : ContextLifecycleObserver(context) | 118 : ContextLifecycleObserver(context) |
| 119 , m_handle(adoptPtr(WebKit::Platform::current()->createWebSocketHandle())) | 119 , m_handle(adoptPtr(blink::Platform::current()->createWebSocketHandle())) |
| 120 , m_client(client) | 120 , m_client(client) |
| 121 , m_identifier(0) | 121 , m_identifier(0) |
| 122 , m_sendingQuota(0) | 122 , m_sendingQuota(0) |
| 123 , m_receivedDataSizeForFlowControl(receivedDataSizeForFlowControlHighWaterMa
rk * 2) // initial quota | 123 , m_receivedDataSizeForFlowControl(receivedDataSizeForFlowControlHighWaterMa
rk * 2) // initial quota |
| 124 , m_bufferedAmount(0) | 124 , m_bufferedAmount(0) |
| 125 , m_sentSizeOfTopMessage(0) | 125 , m_sentSizeOfTopMessage(0) |
| 126 , m_sourceURLAtConnection(sourceURL) | 126 , m_sourceURLAtConnection(sourceURL) |
| 127 , m_lineNumberAtConnection(lineNumber) | 127 , m_lineNumberAtConnection(lineNumber) |
| 128 { | 128 { |
| 129 if (context->isDocument() && toDocument(context)->page()) | 129 if (context->isDocument() && toDocument(context)->page()) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 142 return; | 142 return; |
| 143 m_url = url; | 143 m_url = url; |
| 144 Vector<String> protocols; | 144 Vector<String> protocols; |
| 145 // Avoid placing an empty token in the Vector when the protocol string is | 145 // Avoid placing an empty token in the Vector when the protocol string is |
| 146 // empty. | 146 // empty. |
| 147 if (!protocol.isEmpty()) { | 147 if (!protocol.isEmpty()) { |
| 148 // Since protocol is already verified and escaped, we can simply split | 148 // Since protocol is already verified and escaped, we can simply split |
| 149 // it. | 149 // it. |
| 150 protocol.split(", ", true, protocols); | 150 protocol.split(", ", true, protocols); |
| 151 } | 151 } |
| 152 WebKit::WebVector<WebKit::WebString> webProtocols(protocols.size()); | 152 blink::WebVector<blink::WebString> webProtocols(protocols.size()); |
| 153 for (size_t i = 0; i < protocols.size(); ++i) { | 153 for (size_t i = 0; i < protocols.size(); ++i) { |
| 154 webProtocols[i] = protocols[i]; | 154 webProtocols[i] = protocols[i]; |
| 155 } | 155 } |
| 156 String origin = executionContext()->securityOrigin()->toString(); | 156 String origin = executionContext()->securityOrigin()->toString(); |
| 157 m_handle->connect(url, webProtocols, origin, this); | 157 m_handle->connect(url, webProtocols, origin, this); |
| 158 flowControlIfNecessary(); | 158 flowControlIfNecessary(); |
| 159 if (m_identifier) | 159 if (m_identifier) |
| 160 InspectorInstrumentation::didCreateWebSocket(document(), m_identifier, u
rl, protocol); | 160 InspectorInstrumentation::didCreateWebSocket(document(), m_identifier, u
rl, protocol); |
| 161 RefPtr<ScriptCallStack> callStack = createScriptCallStack(1, true); | 161 RefPtr<ScriptCallStack> callStack = createScriptCallStack(1, true); |
| 162 if (callStack && callStack->size()) { | 162 if (callStack && callStack->size()) { |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 } | 364 } |
| 365 | 365 |
| 366 Document* NewWebSocketChannelImpl::document() | 366 Document* NewWebSocketChannelImpl::document() |
| 367 { | 367 { |
| 368 ASSERT(m_identifier); | 368 ASSERT(m_identifier); |
| 369 ExecutionContext* context = executionContext(); | 369 ExecutionContext* context = executionContext(); |
| 370 ASSERT(context->isDocument()); | 370 ASSERT(context->isDocument()); |
| 371 return toDocument(context); | 371 return toDocument(context); |
| 372 } | 372 } |
| 373 | 373 |
| 374 void NewWebSocketChannelImpl::didConnect(WebSocketHandle* handle, bool fail, con
st WebKit::WebString& selectedProtocol, const WebKit::WebString& extensions) | 374 void NewWebSocketChannelImpl::didConnect(WebSocketHandle* handle, bool fail, con
st blink::WebString& selectedProtocol, const blink::WebString& extensions) |
| 375 { | 375 { |
| 376 LOG(Network, "NewWebSocketChannelImpl %p didConnect(%p, %d, %s, %s)", this,
handle, fail, selectedProtocol.utf8().data(), extensions.utf8().data()); | 376 LOG(Network, "NewWebSocketChannelImpl %p didConnect(%p, %d, %s, %s)", this,
handle, fail, selectedProtocol.utf8().data(), extensions.utf8().data()); |
| 377 ASSERT(m_handle); | 377 ASSERT(m_handle); |
| 378 ASSERT(handle == m_handle); | 378 ASSERT(handle == m_handle); |
| 379 ASSERT(m_client); | 379 ASSERT(m_client); |
| 380 if (fail) { | 380 if (fail) { |
| 381 failAsError("Cannot connect to " + m_url.string() + "."); | 381 failAsError("Cannot connect to " + m_url.string() + "."); |
| 382 // failAsError may delete this object. | 382 // failAsError may delete this object. |
| 383 return; | 383 return; |
| 384 } | 384 } |
| 385 // FIXME: We should have Request / Response information to be output. | 385 // FIXME: We should have Request / Response information to be output. |
| 386 // InspectorInstrumentation::willSendWebSocketHandshakeRequest(document(), m
_identifier, ""); | 386 // InspectorInstrumentation::willSendWebSocketHandshakeRequest(document(), m
_identifier, ""); |
| 387 // InspectorInstrumentation::didReceiveWebSocketHandshakeResponse(document()
, m_identifier, ""); | 387 // InspectorInstrumentation::didReceiveWebSocketHandshakeResponse(document()
, m_identifier, ""); |
| 388 | 388 |
| 389 m_subprotocol = selectedProtocol; | 389 m_subprotocol = selectedProtocol; |
| 390 m_extensions = extensions; | 390 m_extensions = extensions; |
| 391 m_client->didConnect(); | 391 m_client->didConnect(); |
| 392 } | 392 } |
| 393 | 393 |
| 394 void NewWebSocketChannelImpl::didFail(WebSocketHandle* handle, const WebKit::Web
String& message) | 394 void NewWebSocketChannelImpl::didFail(WebSocketHandle* handle, const blink::WebS
tring& message) |
| 395 { | 395 { |
| 396 LOG(Network, "NewWebSocketChannelImpl %p didFail(%p, %s)", this, handle, mes
sage.utf8().data()); | 396 LOG(Network, "NewWebSocketChannelImpl %p didFail(%p, %s)", this, handle, mes
sage.utf8().data()); |
| 397 // FIXME: Hande the failure correctly. | 397 // FIXME: Hande the failure correctly. |
| 398 // CloseEventCodeAbnormalClosure is the closing code for the closure | 398 // CloseEventCodeAbnormalClosure is the closing code for the closure |
| 399 // without sending or receiving a Close control frame. | 399 // without sending or receiving a Close control frame. |
| 400 didClose(handle, false, CloseEventCodeAbnormalClosure, WebKit::WebString()); | 400 didClose(handle, false, CloseEventCodeAbnormalClosure, blink::WebString()); |
| 401 // |this| may be deleted. | 401 // |this| may be deleted. |
| 402 } | 402 } |
| 403 | 403 |
| 404 void NewWebSocketChannelImpl::didReceiveData(WebSocketHandle* handle, bool fin,
WebSocketHandle::MessageType type, const char* data, size_t size) | 404 void NewWebSocketChannelImpl::didReceiveData(WebSocketHandle* handle, bool fin,
WebSocketHandle::MessageType type, const char* data, size_t size) |
| 405 { | 405 { |
| 406 LOG(Network, "NewWebSocketChannelImpl %p didReceiveData(%p, %d, %d, (%p, %zu
))", this, handle, fin, type, data, size); | 406 LOG(Network, "NewWebSocketChannelImpl %p didReceiveData(%p, %d, %d, (%p, %zu
))", this, handle, fin, type, data, size); |
| 407 ASSERT(m_handle); | 407 ASSERT(m_handle); |
| 408 ASSERT(handle == m_handle); | 408 ASSERT(handle == m_handle); |
| 409 ASSERT(m_client); | 409 ASSERT(m_client); |
| 410 // Non-final frames cannot be empty. | 410 // Non-final frames cannot be empty. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 } else { | 445 } else { |
| 446 m_client->didReceiveMessage(message); | 446 m_client->didReceiveMessage(message); |
| 447 } | 447 } |
| 448 } else { | 448 } else { |
| 449 OwnPtr<Vector<char> > binaryData = adoptPtr(new Vector<char>); | 449 OwnPtr<Vector<char> > binaryData = adoptPtr(new Vector<char>); |
| 450 binaryData->swap(m_receivingMessageData); | 450 binaryData->swap(m_receivingMessageData); |
| 451 m_client->didReceiveBinaryData(binaryData.release()); | 451 m_client->didReceiveBinaryData(binaryData.release()); |
| 452 } | 452 } |
| 453 } | 453 } |
| 454 | 454 |
| 455 void NewWebSocketChannelImpl::didClose(WebSocketHandle* handle, bool wasClean, u
nsigned short code, const WebKit::WebString& reason) | 455 void NewWebSocketChannelImpl::didClose(WebSocketHandle* handle, bool wasClean, u
nsigned short code, const blink::WebString& reason) |
| 456 { | 456 { |
| 457 // FIXME: Use |wasClean| appropriately. | 457 // FIXME: Use |wasClean| appropriately. |
| 458 LOG(Network, "NewWebSocketChannelImpl %p didClose(%p, %d, %u, %s)", this, ha
ndle, wasClean, code, String(reason).utf8().data()); | 458 LOG(Network, "NewWebSocketChannelImpl %p didClose(%p, %d, %u, %s)", this, ha
ndle, wasClean, code, String(reason).utf8().data()); |
| 459 ASSERT(m_handle); | 459 ASSERT(m_handle); |
| 460 m_handle.clear(); | 460 m_handle.clear(); |
| 461 if (m_identifier) { | 461 if (m_identifier) { |
| 462 InspectorInstrumentation::didCloseWebSocket(document(), m_identifier); | 462 InspectorInstrumentation::didCloseWebSocket(document(), m_identifier); |
| 463 m_identifier = 0; | 463 m_identifier = 0; |
| 464 } | 464 } |
| 465 | 465 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 493 if (errorCode == FileError::ABORT_ERR) { | 493 if (errorCode == FileError::ABORT_ERR) { |
| 494 // The error is caused by cancel(). | 494 // The error is caused by cancel(). |
| 495 return; | 495 return; |
| 496 } | 496 } |
| 497 // FIXME: Generate human-friendly reason message. | 497 // FIXME: Generate human-friendly reason message. |
| 498 failAsError("Failed to load Blob: error code = " + String::number(errorCode)
); | 498 failAsError("Failed to load Blob: error code = " + String::number(errorCode)
); |
| 499 // |this| can be deleted here. | 499 // |this| can be deleted here. |
| 500 } | 500 } |
| 501 | 501 |
| 502 } // namespace WebCore | 502 } // namespace WebCore |
| OLD | NEW |