Chromium Code Reviews| Index: chrome/test/chromedriver/net/sync_websocket_impl.cc |
| diff --git a/chrome/test/chromedriver/net/sync_websocket_impl.cc b/chrome/test/chromedriver/net/sync_websocket_impl.cc |
| index b3fcd79d82b2941b54370eae7ce5d41aaffa40f5..b91e2fd614346258ab7526f040d05bcf1695fa05 100644 |
| --- a/chrome/test/chromedriver/net/sync_websocket_impl.cc |
| +++ b/chrome/test/chromedriver/net/sync_websocket_impl.cc |
| @@ -19,6 +19,10 @@ SyncWebSocketImpl::SyncWebSocketImpl( |
| SyncWebSocketImpl::~SyncWebSocketImpl() {} |
| +bool SyncWebSocketImpl::IsConnected() { |
| + return core_->IsConnected(); |
| +} |
| + |
| bool SyncWebSocketImpl::Connect(const GURL& url) { |
| return core_->Connect(url); |
| } |
| @@ -37,9 +41,14 @@ bool SyncWebSocketImpl::HasNextMessage() { |
| SyncWebSocketImpl::Core::Core(net::URLRequestContextGetter* context_getter) |
| : context_getter_(context_getter), |
| - closed_(false), |
| + open_(false), |
| on_update_event_(&lock_) {} |
| +bool SyncWebSocketImpl::Core::IsConnected() { |
| + base::AutoLock lock(lock_); |
| + return open_; |
| +} |
| + |
| bool SyncWebSocketImpl::Core::Connect(const GURL& url) { |
| bool success = false; |
| base::WaitableEvent event(false, false); |
| @@ -64,8 +73,8 @@ bool SyncWebSocketImpl::Core::Send(const std::string& message) { |
| bool SyncWebSocketImpl::Core::ReceiveNextMessage(std::string* message) { |
| base::AutoLock lock(lock_); |
| - while (received_queue_.empty() && !closed_) on_update_event_.Wait(); |
| - if (closed_) |
| + while (received_queue_.empty() && open_) on_update_event_.Wait(); |
| + if (!open_) |
| return false; |
| *message = received_queue_.front(); |
| received_queue_.pop_front(); |
| @@ -85,7 +94,7 @@ void SyncWebSocketImpl::Core::OnMessageReceived(const std::string& message) { |
| void SyncWebSocketImpl::Core::OnClose() { |
| base::AutoLock lock(lock_); |
| - closed_ = true; |
| + open_ = false; |
| on_update_event_.Signal(); |
| } |
| @@ -95,6 +104,8 @@ void SyncWebSocketImpl::Core::ConnectOnIO( |
| const GURL& url, |
| bool* success, |
| base::WaitableEvent* event) { |
| + base::AutoLock lock(lock_); |
|
kkania
2013/03/04 23:33:57
unlock after the queue is cleared, in case WebSock
chrisgao (Use stgao instead)
2013/03/05 06:58:17
Done.
|
| + received_queue_.clear(); |
| socket_.reset(new WebSocket(context_getter_, url, this)); |
| socket_->Connect(base::Bind( |
| &SyncWebSocketImpl::Core::OnConnectCompletedOnIO, |
| @@ -106,6 +117,10 @@ void SyncWebSocketImpl::Core::OnConnectCompletedOnIO( |
| base::WaitableEvent* event, |
| int error) { |
| *success = (error == net::OK); |
| + if (*success) { |
| + base::AutoLock lock(lock_); |
| + open_ = true; |
| + } |
| event->Signal(); |
| } |