From fee3eb776d9c2797be9ee0abc619f9b4e5fb6a2d Mon Sep 17 00:00:00 2001 From: "ukai@chromium.org" Date: Mon, 5 Apr 2010 09:09:16 +0000 Subject: Update new WebSocket API. Add new readyState CLOSING. Fix close() to match the API spec. OnError reports WebSocket error, and OnSocketError reports socket level error OnClose reports was_clean. BUG=none TEST=none Review URL: http://codereview.chromium.org/1587008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43605 0039d316-1c4b-4281-b951-d872f2087c98 --- .../websocket_experiment_task.cc | 21 ++++++++++++++++----- .../websocket_experiment_task.h | 5 +++-- 2 files changed, 19 insertions(+), 7 deletions(-) (limited to 'chrome') diff --git a/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc b/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc index 174c6d8..6a43e17 100644 --- a/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc +++ b/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc @@ -322,7 +322,12 @@ void WebSocketExperimentTask::OnMessage( DoLoop(result); } -void WebSocketExperimentTask::OnClose(net::WebSocket* websocket) { +void WebSocketExperimentTask::OnError(net::WebSocket* websocket) { + // TODO(ukai): record error count? +} + +void WebSocketExperimentTask::OnClose( + net::WebSocket* websocket, bool was_clean) { RevokeTimeoutTimer(); websocket_ = NULL; result_.websocket_total = @@ -330,14 +335,20 @@ void WebSocketExperimentTask::OnClose(net::WebSocket* websocket) { int result = net::ERR_CONNECTION_CLOSED; if (last_websocket_error_ != net::OK) result = last_websocket_error_; - if (next_state_ == STATE_WEBSOCKET_CLOSE_COMPLETE) - result = net::OK; + if (config_.protocol_version == net::WebSocket::DEFAULT_VERSION) { + if (next_state_ == STATE_WEBSOCKET_CLOSE_COMPLETE && was_clean) + result = net::OK; + } else { + // DRAFT75 doesn't report was_clean correctly. + if (next_state_ == STATE_WEBSOCKET_CLOSE_COMPLETE) + result = net::OK; + } DoLoop(result); } -void WebSocketExperimentTask::OnError( +void WebSocketExperimentTask::OnSocketError( const net::WebSocket* websocket, int error) { - DLOG(INFO) << "WebSocket error=" << net::ErrorToString(error) + DLOG(INFO) << "WebSocket socket level error=" << net::ErrorToString(error) << " next_state=" << next_state_ << " for " << config_.url; last_websocket_error_ = error; diff --git a/chrome/browser/net/websocket_experiment/websocket_experiment_task.h b/chrome/browser/net/websocket_experiment/websocket_experiment_task.h index 4ae9078..e3ec500 100644 --- a/chrome/browser/net/websocket_experiment/websocket_experiment_task.h +++ b/chrome/browser/net/websocket_experiment/websocket_experiment_task.h @@ -154,8 +154,9 @@ class WebSocketExperimentTask : public URLFetcher::Delegate, // net::WebSocketDelegate methods virtual void OnOpen(net::WebSocket* websocket); virtual void OnMessage(net::WebSocket* websocket, const std::string& msg); - virtual void OnClose(net::WebSocket* websocket); - virtual void OnError(const net::WebSocket* websocket, int error); + virtual void OnError(net::WebSocket* websocket); + virtual void OnClose(net::WebSocket* websocket, bool was_clean); + virtual void OnSocketError(const net::WebSocket* websocket, int error); void SetContext(Context* context); -- cgit v1.1