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 41e0da8774c9c957ffc3c464b5e8e5156e2a1329..e78d9afd1b86ecc66315030dd92b3dfdce99062f 100644 |
--- a/chrome/test/chromedriver/devtools_client_impl.cc |
+++ b/chrome/test/chromedriver/devtools_client_impl.cc |
@@ -44,7 +44,13 @@ DevToolsClientImpl::DevToolsClientImpl( |
connected_(false), |
next_id_(1) {} |
-DevToolsClientImpl::~DevToolsClientImpl() {} |
+DevToolsClientImpl::~DevToolsClientImpl() { |
+ for (ResponseMap::iterator iter = cmd_response_map_.begin(); |
+ iter != cmd_response_map_.end(); ++iter) { |
+ LOG(WARNING) << "Finished with no response for command " << iter->first; |
+ delete iter->second; |
+ } |
+} |
Status DevToolsClientImpl::SendCommand( |
const std::string& method, |
@@ -120,22 +126,25 @@ Status DevToolsClientImpl::ReceiveCommandResponse( |
internal::InspectorMessageType type; |
internal::InspectorEvent event; |
internal::InspectorCommandResponse response; |
- while (true) { |
+ cmd_response_map_[command_id] = NULL; |
kkania
2013/01/30 22:36:05
what's this about?
craigdh
2013/01/30 23:05:21
The overarching idea is that we support overlappin
|
+ while (cmd_response_map_[command_id] == NULL) { |
Status status = ReceiveNextMessage(command_id, &type, &event, &response); |
if (status.IsError()) { |
return status; |
} else if (type == internal::kCommandResponseMessageType) { |
- if (response.id != command_id) { |
+ if (cmd_response_map_.count(response.id) == 0) { |
return Status(kUnknownError, |
"received response for unknown command ID"); |
+ } else if (response.result) { |
+ cmd_response_map_[response.id] = response.result.release(); |
+ } else { |
+ return Status(kUnknownError, "inspector error: " + response.error); |
} |
- if (response.result) { |
- result->reset(response.result.release()); |
- return Status(kOk); |
- } |
- return Status(kUnknownError, "inspector error: " + response.error); |
} |
} |
+ result->reset(cmd_response_map_[command_id]); |
+ cmd_response_map_.erase(command_id); |
+ return Status(kOk); |
} |
Status DevToolsClientImpl::ReceiveNextMessage( |