summaryrefslogtreecommitdiffstats
path: root/chrome/browser/devtools/devtools_protocol.cc
diff options
context:
space:
mode:
authoreustas@chromium.org <eustas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-20 07:07:31 +0000
committereustas@chromium.org <eustas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-20 07:07:31 +0000
commitba67dc1aa6b3fb4baa57cfd786e44b0941f50642 (patch)
tree271c7ac2b18e01d75bdb953b305dceb03e1cc138 /chrome/browser/devtools/devtools_protocol.cc
parent33b568222a4ca4c455b3bedc22b236440a131565 (diff)
downloadchromium_src-ba67dc1aa6b3fb4baa57cfd786e44b0941f50642.zip
chromium_src-ba67dc1aa6b3fb4baa57cfd786e44b0941f50642.tar.gz
chromium_src-ba67dc1aa6b3fb4baa57cfd786e44b0941f50642.tar.bz2
DevTools: allow embedder handling remote debugger commands.
BUG=373325 Review URL: https://codereview.chromium.org/290873002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@271605 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/devtools/devtools_protocol.cc')
-rw-r--r--chrome/browser/devtools/devtools_protocol.cc80
1 files changed, 75 insertions, 5 deletions
diff --git a/chrome/browser/devtools/devtools_protocol.cc b/chrome/browser/devtools/devtools_protocol.cc
index f14864c..ef7cb6a 100644
--- a/chrome/browser/devtools/devtools_protocol.cc
+++ b/chrome/browser/devtools/devtools_protocol.cc
@@ -6,13 +6,23 @@
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
+#include "base/strings/stringprintf.h"
namespace {
+
+const char kErrorCodeParam[] = "code";
+const char kErrorParam[] = "error";
+const char kErrorMessageParam[] = "message";
const char kIdParam[] = "id";
const char kMethodParam[] = "method";
const char kParamsParam[] = "params";
-const char kErrorParam[] = "error";
-const char kErrorCodeParam[] = "code";
+const char kResultParam[] = "result";
+
+// JSON RPC 2.0 spec: http://www.jsonrpc.org/specification#error_object
+enum Error {
+ kErrorInvalidParams = -32602
+};
+
} // namespace
DevToolsProtocol::Message::~Message() {
@@ -46,6 +56,20 @@ std::string DevToolsProtocol::Command::Serialize() {
return json_command;
}
+scoped_ptr<DevToolsProtocol::Response>
+DevToolsProtocol::Command::SuccessResponse(base::DictionaryValue* result) {
+ return scoped_ptr<DevToolsProtocol::Response>(
+ new DevToolsProtocol::Response(id_, result));
+}
+
+scoped_ptr<DevToolsProtocol::Response>
+DevToolsProtocol::Command::InvalidParamResponse(const std::string& param) {
+ std::string message =
+ base::StringPrintf("Missing or invalid '%s' parameter", param.c_str());
+ return scoped_ptr<DevToolsProtocol::Response>(
+ new DevToolsProtocol::Response(id_, kErrorInvalidParams, message));
+}
+
DevToolsProtocol::Notification::~Notification() {
}
@@ -57,9 +81,55 @@ DevToolsProtocol::Notification::Notification(const std::string& method,
DevToolsProtocol::Response::~Response() {
}
-DevToolsProtocol::Response::Response(int id, int error_code)
+DevToolsProtocol::Response::Response(int id,
+ int error_code,
+ const std::string error_message)
+ : id_(id),
+ error_code_(error_code),
+ error_message_(error_message) {
+}
+
+DevToolsProtocol::Response::Response(int id, base::DictionaryValue* result)
: id_(id),
- error_code_(error_code) {
+ error_code_(0),
+ result_(result) {
+}
+
+base::DictionaryValue* DevToolsProtocol::Response::Serialize() {
+ base::DictionaryValue* response = new base::DictionaryValue();
+
+ response->SetInteger(kIdParam, id_);
+
+ if (error_code_) {
+ base::DictionaryValue* error_object = new base::DictionaryValue();
+ response->Set(kErrorParam, error_object);
+ error_object->SetInteger(kErrorCodeParam, error_code_);
+ if (!error_message_.empty())
+ error_object->SetString(kErrorMessageParam, error_message_);
+ } else if (result_) {
+ response->Set(kResultParam, result_->DeepCopy());
+ }
+
+ return response;
+}
+
+// static
+DevToolsProtocol::Command* DevToolsProtocol::ParseCommand(
+ base::DictionaryValue* command_dict) {
+ if (!command_dict)
+ return NULL;
+
+ int id;
+ if (!command_dict->GetInteger(kIdParam, &id) || id < 0)
+ return NULL;
+
+ std::string method;
+ if (!command_dict->GetString(kMethodParam, &method))
+ return NULL;
+
+ base::DictionaryValue* params = NULL;
+ command_dict->GetDictionary(kParamsParam, &params);
+ return new Command(id, method, params ? params->DeepCopy() : NULL);
}
// static
@@ -98,5 +168,5 @@ DevToolsProtocol::Response* DevToolsProtocol::ParseResponse(
base::DictionaryValue* error_dict = NULL;
if (dict->GetDictionary(kErrorParam, &error_dict))
error_dict->GetInteger(kErrorCodeParam, &error_code);
- return new Response(id, error_code);
+ return new Response(id, error_code, std::string());
}