Chromium Code Reviews| 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 825a4e94f92ee5cab56ebfcb8042cc66041ad07f..b3fb63ed9ec721c5c087fa3bf27c47d93ef3fadb 100644 |
| --- a/webkit/plugins/ppapi/ppb_websocket_impl.cc |
| +++ b/webkit/plugins/ppapi/ppb_websocket_impl.cc |
| @@ -79,22 +79,26 @@ PPB_WebSocket_Impl::PPB_WebSocket_Impl(PP_Instance instance) |
| : Resource(instance), |
| state_(PP_WEBSOCKETREADYSTATE_INVALID_DEV), |
| error_was_received_(false), |
| + connect_callback_(PP_BlockUntilComplete()), |
| + receive_callback_(PP_BlockUntilComplete()), |
| receive_callback_var_(NULL), |
| wait_for_receive_(false), |
| + close_callback_(PP_BlockUntilComplete()), |
| close_code_(0), |
| close_was_clean_(PP_FALSE), |
| buffered_amount_(0), |
| buffered_amount_after_close_(0) { |
|
Takashi Toyoshima
2011/12/22 07:56:29
Replace initializers for callbacks by my ongoing c
|
| - connect_callback_.func = NULL; |
| - connect_callback_.user_data = NULL; |
| - receive_callback_.func = NULL; |
| - receive_callback_.user_data = NULL; |
| - close_callback_.func = NULL; |
| - close_callback_.user_data = NULL; |
| empty_string_ = new StringVar("", 0); |
| } |
| PPB_WebSocket_Impl::~PPB_WebSocket_Impl() { |
| + // Abort outstanding processings having a callback. |
| + if (connect_callback_.func) |
| + PP_RunAndClearCompletionCallback(&connect_callback_, PP_ERROR_ABORTED); |
| + AbortOutstandingReceive(); |
| + if (close_callback_.func) |
| + PP_RunAndClearCompletionCallback(&close_callback_, PP_ERROR_ABORTED); |
| + |
| if (websocket_.get()) |
| websocket_->disconnect(); |
| @@ -262,11 +266,7 @@ int32_t PPB_WebSocket_Impl::Close(uint16_t code, |
| } |
| // Abort ongoing receive. |
| - if (wait_for_receive_) { |
| - wait_for_receive_ = false; |
| - receive_callback_var_ = NULL; |
| - PP_RunAndClearCompletionCallback(&receive_callback_, PP_ERROR_ABORTED); |
| - } |
| + AbortOutstandingReceive(); |
| // Close connection. |
| state_ = PP_WEBSOCKETREADYSTATE_CLOSING_DEV; |
| @@ -484,11 +484,7 @@ void PPB_WebSocket_Impl::didClose(unsigned long unhandled_buffered_amount, |
| if (state == PP_WEBSOCKETREADYSTATE_CONNECTING_DEV) |
| PP_RunAndClearCompletionCallback(&connect_callback_, PP_ERROR_FAILED); |
| - if (wait_for_receive_) { |
| - wait_for_receive_ = false; |
| - receive_callback_var_ = NULL; |
| - PP_RunAndClearCompletionCallback(&receive_callback_, PP_ERROR_ABORTED); |
| - } |
| + AbortOutstandingReceive(); |
| if (state == PP_WEBSOCKETREADYSTATE_CLOSING_DEV) |
| PP_RunAndClearCompletionCallback(&close_callback_, PP_OK); |
| @@ -509,5 +505,13 @@ int32_t PPB_WebSocket_Impl::DoReceive() { |
| return PP_OK; |
| } |
| +void PPB_WebSocket_Impl::AbortOutstandingReceive() { |
| + if (!wait_for_receive_) |
| + return; |
| + wait_for_receive_ = false; |
| + receive_callback_var_ = NULL; |
| + PP_RunAndClearCompletionCallback(&receive_callback_, PP_ERROR_ABORTED); |
| +} |
| + |
| } // namespace ppapi |
| } // namespace webkit |