Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/plugins/ppapi/ppb_websocket_impl.h" | 5 #include "webkit/plugins/ppapi/ppb_websocket_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 using ppapi::StringVar; | 31 using ppapi::StringVar; |
| 32 using ppapi::thunk::PPB_WebSocket_API; | 32 using ppapi::thunk::PPB_WebSocket_API; |
| 33 using ppapi::VarTracker; | 33 using ppapi::VarTracker; |
| 34 using WebKit::WebData; | 34 using WebKit::WebData; |
| 35 using WebKit::WebDocument; | 35 using WebKit::WebDocument; |
| 36 using WebKit::WebString; | 36 using WebKit::WebString; |
| 37 using WebKit::WebSocket; | 37 using WebKit::WebSocket; |
| 38 using WebKit::WebSocketClient; | 38 using WebKit::WebSocketClient; |
| 39 using WebKit::WebURL; | 39 using WebKit::WebURL; |
| 40 | 40 |
| 41 namespace { | |
| 42 | |
| 43 const uint32_t kMaxReasonSizeInBytes = 123; | 41 const uint32_t kMaxReasonSizeInBytes = 123; |
| 44 const size_t kHybiBaseFramingOverhead = 2; | 42 const size_t kHybiBaseFramingOverhead = 2; |
| 45 const size_t kHybiMaskingKeyLength = 4; | 43 const size_t kHybiMaskingKeyLength = 4; |
| 46 const size_t kMinimumPayloadSizeWithTwoByteExtendedPayloadLength = 126; | 44 const size_t kMinimumPayloadSizeWithTwoByteExtendedPayloadLength = 126; |
| 47 const size_t kMinimumPayloadSizeWithEightByteExtendedPayloadLength = 0x10000; | 45 const size_t kMinimumPayloadSizeWithEightByteExtendedPayloadLength = 0x10000; |
| 48 | 46 |
| 47 namespace { | |
| 48 | |
|
dmichael (off chromium)
2011/12/01 16:46:08
Why did you move the namespace? It would seem bett
Takashi Toyoshima
2011/12/02 02:20:27
Yuta suggest me this change because constant varia
| |
| 49 uint64_t SaturateAdd(uint64_t a, uint64_t b) { | 49 uint64_t SaturateAdd(uint64_t a, uint64_t b) { |
| 50 if (kuint64max - a < b) | 50 if (kuint64max - a < b) |
| 51 return kuint64max; | 51 return kuint64max; |
| 52 return a + b; | 52 return a + b; |
| 53 } | 53 } |
| 54 | 54 |
| 55 uint64_t GetFrameSize(uint64_t payload_size) { | 55 uint64_t GetFrameSize(uint64_t payload_size) { |
| 56 if (!payload_size) | 56 if (!payload_size) |
| 57 return 0; | 57 return 0; |
| 58 | 58 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 132 return PP_ERROR_BADARGUMENT; | 132 return PP_ERROR_BADARGUMENT; |
| 133 GURL gurl(url_string->value()); | 133 GURL gurl(url_string->value()); |
| 134 url_ = new StringVar( | 134 url_ = new StringVar( |
| 135 PpapiGlobals::Get()->GetModuleForInstance(pp_instance()), gurl.spec()); | 135 PpapiGlobals::Get()->GetModuleForInstance(pp_instance()), gurl.spec()); |
| 136 if (!gurl.is_valid()) | 136 if (!gurl.is_valid()) |
| 137 return PP_ERROR_BADARGUMENT; | 137 return PP_ERROR_BADARGUMENT; |
| 138 if (!gurl.SchemeIs("ws") && !gurl.SchemeIs("wss")) | 138 if (!gurl.SchemeIs("ws") && !gurl.SchemeIs("wss")) |
| 139 return PP_ERROR_BADARGUMENT; | 139 return PP_ERROR_BADARGUMENT; |
| 140 if (gurl.has_ref()) | 140 if (gurl.has_ref()) |
| 141 return PP_ERROR_BADARGUMENT; | 141 return PP_ERROR_BADARGUMENT; |
| 142 // TODO(toyoshim): Must check if the port is allowed by default. | 142 if (!net::IsPortAllowedByDefault(gurl.IntPort())) |
| 143 // We could not just use net::IsPortAllowedByDefault() because it doesn't | 143 return PP_ERROR_BADARGUMENT; |
| 144 // be exported over the shared library. | |
| 145 WebURL web_url(gurl); | 144 WebURL web_url(gurl); |
| 146 | 145 |
| 147 // Validate protocols and convert it to WebString. | 146 // Validate protocols and convert it to WebString. |
| 148 // TODO(toyoshim): Detect duplicated protocols as error. | 147 // TODO(toyoshim): Detect duplicated protocols as error. |
| 149 std::string protocol_string; | 148 std::string protocol_string; |
| 150 for (uint32_t i = 0; i < protocol_count; i++) { | 149 for (uint32_t i = 0; i < protocol_count; i++) { |
| 151 // TODO(toyoshim): Similar function exist in WebKit::WebSocket. | 150 // TODO(toyoshim): Similar function exist in WebKit::WebSocket. |
| 152 // We must rearrange them into WebKit::WebChannel and share its protocol | 151 // We must rearrange them into WebKit::WebChannel and share its protocol |
| 153 // related implementation via WebKit API. | 152 // related implementation via WebKit API. |
| 154 scoped_refptr<StringVar> string_var; | 153 scoped_refptr<StringVar> string_var; |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 229 close_callback_ = callback; | 228 close_callback_ = callback; |
| 230 | 229 |
| 231 if (state_ == PP_WEBSOCKETREADYSTATE_CONNECTING_DEV) { | 230 if (state_ == PP_WEBSOCKETREADYSTATE_CONNECTING_DEV) { |
| 232 state_ = PP_WEBSOCKETREADYSTATE_CLOSING_DEV; | 231 state_ = PP_WEBSOCKETREADYSTATE_CLOSING_DEV; |
| 233 PP_RunAndClearCompletionCallback(&connect_callback_, PP_ERROR_ABORTED); | 232 PP_RunAndClearCompletionCallback(&connect_callback_, PP_ERROR_ABORTED); |
| 234 websocket_->fail( | 233 websocket_->fail( |
| 235 "WebSocket was closed before the connection was established."); | 234 "WebSocket was closed before the connection was established."); |
| 236 return PP_OK_COMPLETIONPENDING; | 235 return PP_OK_COMPLETIONPENDING; |
| 237 } | 236 } |
| 238 | 237 |
| 239 // TODO(toyoshim): Handle bufferedAmount here. | |
| 240 | |
| 241 state_ = PP_WEBSOCKETREADYSTATE_CLOSING_DEV; | 238 state_ = PP_WEBSOCKETREADYSTATE_CLOSING_DEV; |
| 242 WebString web_reason = WebString::fromUTF8(reason_string->value()); | 239 WebString web_reason = WebString::fromUTF8(reason_string->value()); |
| 243 websocket_->close(code, web_reason); | 240 websocket_->close(code, web_reason); |
| 244 | 241 |
| 245 return PP_OK_COMPLETIONPENDING; | 242 return PP_OK_COMPLETIONPENDING; |
| 246 } | 243 } |
| 247 | 244 |
| 248 int32_t PPB_WebSocket_Impl::ReceiveMessage(PP_Var* message, | 245 int32_t PPB_WebSocket_Impl::ReceiveMessage(PP_Var* message, |
| 249 PP_CompletionCallback callback) { | 246 PP_CompletionCallback callback) { |
| 250 // Check state. | 247 // Check state. |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 429 | 426 |
| 430 *receive_callback_var_ = received_messages_.front(); | 427 *receive_callback_var_ = received_messages_.front(); |
| 431 received_messages_.pop(); | 428 received_messages_.pop(); |
| 432 receive_callback_var_ = NULL; | 429 receive_callback_var_ = NULL; |
| 433 wait_for_receive_ = false; | 430 wait_for_receive_ = false; |
| 434 return PP_OK; | 431 return PP_OK; |
| 435 } | 432 } |
| 436 | 433 |
| 437 } // namespace ppapi | 434 } // namespace ppapi |
| 438 } // namespace webkit | 435 } // namespace webkit |
| OLD | NEW |