Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(663)

Unified Diff: webkit/plugins/ppapi/ppb_websocket_impl.cc

Issue 10332138: WebSocket Pepper API: allow to close connection without code and reason (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: revert enum name change Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/tests/test_websocket.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/plugins/ppapi/ppb_websocket_impl.cc
diff --git a/webkit/plugins/ppapi/ppb_websocket_impl.cc b/webkit/plugins/ppapi/ppb_websocket_impl.cc
index c639fc6b40591107c166eea01caa279570b1dfa3..8cdada8aff86324f4f49a61c6a2d40038cce46bb 100644
--- a/webkit/plugins/ppapi/ppb_websocket_impl.cc
+++ b/webkit/plugins/ppapi/ppb_websocket_impl.cc
@@ -211,28 +211,35 @@ int32_t PPB_WebSocket_Impl::Close(uint16_t code,
if (!websocket_.get())
return PP_ERROR_FAILED;
- // Validate |code|. Need to cast |CloseEventCodeNotSpecified| which is -1 to
- // uint16_t for the comparison to work.
- if (code != static_cast<uint16_t>(WebSocket::CloseEventCodeNotSpecified)) {
- if (!(code == WebSocket::CloseEventCodeNormalClosure ||
- (WebSocket::CloseEventCodeMinimumUserDefined <= code &&
- code <= WebSocket::CloseEventCodeMaximumUserDefined)))
- // RFC 6455 limits applications to use reserved connection close code in
- // section 7.4.2.. The WebSocket API (http://www.w3.org/TR/websockets/)
- // defines this out of range error as InvalidAccessError in JavaScript.
- return PP_ERROR_NOACCESS;
- }
-
+ // Validate |code| and |reason|.
scoped_refptr<StringVar> reason_string;
WebString web_reason;
- // |reason| must be ignored if it is PP_VARTYPE_UNDEFINED.
- if (reason.type != PP_VARTYPE_UNDEFINED) {
- // Validate |reason|.
- reason_string = StringVar::FromPPVar(reason);
- if (!reason_string ||
- reason_string->value().size() > kMaxReasonSizeInBytes)
- return PP_ERROR_BADARGUMENT;
- web_reason = WebString::fromUTF8(reason_string->value());
+ WebSocket::CloseEventCode event_code =
+ static_cast<WebSocket::CloseEventCode>(code);
+ if (code == PP_WEBSOCKETSTATUSCODE_NOT_SPECIFIED) {
+ // PP_WEBSOCKETSTATUSCODE_NOT_SPECIFIED and CloseEventCodeNotSpecified are
+ // assigned to different values. A conversion is needed if
+ // PP_WEBSOCKETSTATUSCODE_NOT_SPECIFIED is specified.
+ event_code = WebSocket::CloseEventCodeNotSpecified;
+ } else {
+ if (!(code == PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE ||
+ (PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MIN <= code &&
+ code <= PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MAX)))
+ // RFC 6455 limits applications to use reserved connection close code in
+ // section 7.4.2.. The WebSocket API (http://www.w3.org/TR/websockets/)
+ // defines this out of range error as InvalidAccessError in JavaScript.
+ return PP_ERROR_NOACCESS;
+
+ // |reason| must be ignored if it is PP_VARTYPE_UNDEFINED or |code| is
+ // PP_WEBSOCKETSTATUSCODE_NOT_SPECIFIED.
+ if (reason.type != PP_VARTYPE_UNDEFINED) {
+ // Validate |reason|.
+ reason_string = StringVar::FromPPVar(reason);
+ if (!reason_string ||
+ reason_string->value().size() > kMaxReasonSizeInBytes)
+ return PP_ERROR_BADARGUMENT;
+ web_reason = WebString::fromUTF8(reason_string->value());
+ }
}
// Check state.
@@ -271,7 +278,7 @@ int32_t PPB_WebSocket_Impl::Close(uint16_t code,
// Close connection.
state_ = PP_WEBSOCKETREADYSTATE_CLOSING;
- websocket_->close(code, web_reason);
+ websocket_->close(event_code, web_reason);
return PP_OK_COMPLETIONPENDING;
}
« no previous file with comments | « ppapi/tests/test_websocket.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698