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 e3eca4f8d647bd206ae526a54ac1b84009c98968..cbebceb0ecfc344867cd34891f4ae5008403be56 100644 |
--- a/chrome/test/chromedriver/devtools_client_impl.cc |
+++ b/chrome/test/chromedriver/devtools_client_impl.cc |
@@ -14,6 +14,26 @@ |
#include "chrome/test/chromedriver/net/url_request_context_getter.h" |
#include "chrome/test/chromedriver/status.h" |
+namespace { |
+ |
+const char* kInspectorContextError = |
+ "Execution context with given id not found."; |
+ |
+Status ParseInspectorError(const std::string& error_json) { |
+ scoped_ptr<base::Value> error(base::JSONReader::Read(error_json)); |
+ base::DictionaryValue* error_dict; |
+ if (!error || !error->GetAsDictionary(&error_dict)) |
+ return Status(kUnknownError, "inspector error with no error message"); |
+ std::string error_message; |
+ if (error_dict->GetString("message", &error_message) && |
+ error_message == kInspectorContextError) { |
+ return Status(kNoSuchFrame); |
+ } |
+ return Status(kUnknownError, "unhandled inspector error: " + error_json); |
+} |
+ |
+} // namespace |
+ |
namespace internal { |
InspectorEvent::InspectorEvent() {} |
@@ -160,7 +180,8 @@ Status DevToolsClientImpl::ReceiveNextMessage( |
} else if (response->result) { |
cmd_response_map_[response->id] = response->result.release(); |
} else { |
- return Status(kUnknownError, "inspector error: " + response->error); |
+ cmd_response_map_.erase(response->id); |
+ return ParseInspectorError(response->error); |
} |
} |
return Status(kOk); |