diff options
Diffstat (limited to 'chrome/browser/automation/automation_provider_json.cc')
-rw-r--r-- | chrome/browser/automation/automation_provider_json.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/chrome/browser/automation/automation_provider_json.cc b/chrome/browser/automation/automation_provider_json.cc new file mode 100644 index 0000000..05f3a1b --- /dev/null +++ b/chrome/browser/automation/automation_provider_json.cc @@ -0,0 +1,55 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/automation/automation_provider_json.h" + +#include "base/json/json_writer.h" +#include "base/json/string_escape.h" +#include "chrome/test/automation/automation_messages.h" + +namespace { + +// Util for creating a JSON error return string (dict with key +// 'error' and error string value). No need to quote input. +std::string JSONErrorString(const std::string& err) { + std::string prefix = "{\"error\": \""; + std::string no_quote_err; + std::string suffix = "\"}"; + + base::JsonDoubleQuote(err, false, &no_quote_err); + return prefix + no_quote_err + suffix; +} + +} // namespace + +AutomationJSONReply::AutomationJSONReply(AutomationProvider* provider, + IPC::Message* reply_message) + : provider_(provider), + message_(reply_message) { +} + +AutomationJSONReply::~AutomationJSONReply() { + DCHECK(!message_) << "JSON automation request not replied!"; +} + +void AutomationJSONReply::SendSuccess(const Value* value) { + DCHECK(message_) << "Resending reply for JSON automation request"; + std::string json_string = "{}"; + if (value) + base::JSONWriter::Write(value, false, &json_string); + AutomationMsg_SendJSONRequest::WriteReplyParams( + message_, json_string, true); + provider_->Send(message_); + message_ = NULL; +} + +void AutomationJSONReply::SendError(const std::string& error_message) { + DCHECK(message_) << "Resending reply for JSON automation request"; + std::string json_string = JSONErrorString(error_message); + AutomationMsg_SendJSONRequest::WriteReplyParams( + message_, json_string, false); + provider_->Send(message_); + message_ = NULL; +} + |