Chromium Code Reviews| Index: chrome/test/chromedriver/devtools_client_impl.cc |
| diff --git a/chrome/test/chromedriver/devtools_client_impl.cc b/chrome/test/chromedriver/devtools_client_impl.cc |
| index a5cb79fda45f39d8649708e64ac842ee132cb330..31fcc30b2138146c65bf3aa748834c422d469fa2 100644 |
| --- a/chrome/test/chromedriver/devtools_client_impl.cc |
| +++ b/chrome/test/chromedriver/devtools_client_impl.cc |
| @@ -48,21 +48,23 @@ InspectorCommandResponse::~InspectorCommandResponse() {} |
| DevToolsClientImpl::DevToolsClientImpl( |
| const SyncWebSocketFactory& factory, |
| - const std::string& url) |
| + const std::string& url, |
| + const FrontendCloserFunc& frontend_closer_func) |
| : socket_(factory.Run().Pass()), |
| url_(url), |
| + frontend_closer_func_(frontend_closer_func), |
| parser_func_(base::Bind(&internal::ParseInspectorMessage)), |
| - connected_(false), |
| next_id_(1) {} |
| DevToolsClientImpl::DevToolsClientImpl( |
| const SyncWebSocketFactory& factory, |
| const std::string& url, |
| + const FrontendCloserFunc& frontend_closer_func, |
| const ParserFunc& parser_func) |
| : socket_(factory.Run().Pass()), |
| url_(url), |
| + frontend_closer_func_(frontend_closer_func), |
| parser_func_(parser_func), |
| - connected_(false), |
| next_id_(1) {} |
| DevToolsClientImpl::~DevToolsClientImpl() { |
| @@ -78,6 +80,21 @@ void DevToolsClientImpl::SetParserFuncForTesting( |
| parser_func_ = parser_func; |
| } |
| +Status DevToolsClientImpl::EnsureConnected() { |
| + if (!socket_->IsConnected()) { |
| + // Try to close devtools frontend and then reconnect. |
| + Status status = frontend_closer_func_.Run(); |
|
kkania
2013/03/04 23:33:57
do we want to try to connect before closing all th
chrisgao (Use stgao instead)
2013/03/05 06:58:17
Done.
|
| + if (status.IsError()) |
| + return status; |
| + if (!socket_->Connect(url_)) |
| + return Status(kDisconnected, "unable to connect to renderer"); |
| + |
| + // OnConnected notification will be sent out in method ReceiveNextMessage. |
| + listeners_for_on_connected_ = listeners_; |
| + } |
| + return Status(kOk); |
| +} |
| + |
| Status DevToolsClientImpl::SendCommand( |
| const std::string& method, |
| const base::DictionaryValue& params) { |
| @@ -122,14 +139,8 @@ Status DevToolsClientImpl::SendCommandInternal( |
| const std::string& method, |
| const base::DictionaryValue& params, |
| scoped_ptr<base::DictionaryValue>* result) { |
| - if (!connected_) { |
| - if (!socket_->Connect(url_)) |
| - return Status(kDisconnected, "unable to connect to renderer"); |
| - connected_ = true; |
| - |
| - // OnConnected notification will be sent out in method ReceiveNextMessage. |
| - listeners_for_on_connected_ = listeners_; |
| - } |
| + if (!socket_->IsConnected()) |
| + return Status(kDisconnected, "unable to connect to renderer"); |
| int command_id = next_id_++; |
| base::DictionaryValue command; |
| @@ -138,10 +149,8 @@ Status DevToolsClientImpl::SendCommandInternal( |
| command.Set("params", params.DeepCopy()); |
| std::string message; |
| base::JSONWriter::Write(&command, &message); |
| - if (!socket_->Send(message)) { |
| - connected_ = false; |
| + if (!socket_->Send(message)) |
| return Status(kDisconnected, "unable to send message to renderer"); |
| - } |
| return ReceiveCommandResponse(command_id, result); |
| } |
| @@ -180,11 +189,8 @@ Status DevToolsClientImpl::ReceiveNextMessage( |
| return Status(kOk); |
| std::string message; |
| - if (!socket_->ReceiveNextMessage(&message)) { |
| - connected_ = false; |
| - return Status(kDisconnected, |
| - "unable to receive message from renderer"); |
| - } |
| + if (!socket_->ReceiveNextMessage(&message)) |
| + return Status(kDisconnected, "unable to receive message from renderer"); |
| if (!parser_func_.Run(message, expected_id, type, event, response)) |
| return Status(kUnknownError, "bad inspector message: " + message); |
| if (*type == internal::kEventMessageType) |
| @@ -214,10 +220,8 @@ Status DevToolsClientImpl::NotifyEventListeners( |
| iter != listeners_.end(); ++iter) { |
| (*iter)->OnEvent(method, params); |
| } |
| - if (method == "Inspector.detached") { |
| - connected_ = false; |
| + if (method == "Inspector.detached") |
| return Status(kDisconnected, "received Inspector.detached event"); |
| - } |
| return Status(kOk); |
| } |