Chromium Code Reviews| Index: components/safe_json/safe_json_parser.cc |
| diff --git a/components/safe_json/safe_json_parser.cc b/components/safe_json/safe_json_parser.cc |
| index af30a19f2d7be77f18052233b91acff618c1e833..8193d0358e42fee709e2e7904937ef8ec5f2d24b 100644 |
| --- a/components/safe_json/safe_json_parser.cc |
| +++ b/components/safe_json/safe_json_parser.cc |
| @@ -4,101 +4,30 @@ |
| #include "components/safe_json/safe_json_parser.h" |
| -#include <string> |
| - |
| -#include "base/single_thread_task_runner.h" |
| -#include "base/strings/utf_string_conversions.h" |
| -#include "base/thread_task_runner_handle.h" |
| -#include "base/tuple.h" |
| -#include "base/values.h" |
| -#include "components/safe_json/safe_json_parser_messages.h" |
| -#include "content/public/browser/browser_thread.h" |
| -#include "content/public/browser/utility_process_host.h" |
| -#include "grit/components_strings.h" |
| -#include "ipc/ipc_message_macros.h" |
| -#include "ui/base/l10n/l10n_util.h" |
| - |
| -using content::BrowserThread; |
| -using content::UtilityProcessHost; |
| +#include "components/safe_json/safe_json_parser_impl.h" |
| namespace safe_json { |
| -SafeJsonParser::SafeJsonParser(const std::string& unsafe_json, |
| - const SuccessCallback& success_callback, |
| - const ErrorCallback& error_callback) |
| - : unsafe_json_(unsafe_json), |
| - success_callback_(success_callback), |
| - error_callback_(error_callback) { |
| -} |
| - |
| -void SafeJsonParser::Start() { |
| - caller_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
| - |
| - BrowserThread::PostTask( |
| - BrowserThread::IO, FROM_HERE, |
| - base::Bind(&SafeJsonParser::StartWorkOnIOThread, this)); |
| -} |
| - |
| -SafeJsonParser::~SafeJsonParser() { |
| -} |
| - |
| -void SafeJsonParser::StartWorkOnIOThread() { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - UtilityProcessHost* host = UtilityProcessHost::Create( |
| - this, base::ThreadTaskRunnerHandle::Get().get()); |
| - host->SetName( |
| - l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_JSON_PARSER_NAME)); |
| - host->Send(new SafeJsonParserMsg_ParseJSON(unsafe_json_)); |
| -} |
| - |
| -void SafeJsonParser::OnJSONParseSucceeded(const base::ListValue& wrapper) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - const base::Value* value = NULL; |
| - CHECK(wrapper.Get(0, &value)); |
| - |
| - parsed_json_.reset(value->DeepCopy()); |
| - ReportResults(); |
| -} |
| - |
| -void SafeJsonParser::OnJSONParseFailed(const std::string& error_message) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - error_ = error_message; |
| - ReportResults(); |
| -} |
| +namespace { |
| -void SafeJsonParser::ReportResults() { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| +SafeJsonParser::Factory g_factory = nullptr; |
| - caller_task_runner_->PostTask( |
| - FROM_HERE, |
| - base::Bind(&SafeJsonParser::ReportResultsOnOriginThread, this)); |
| -} |
| +} // namespace |
| -void SafeJsonParser::ReportResultsOnOriginThread() { |
| - // Current callers of this class are known to either come from |
| - // the UI or IO threads. This DCHECK can be removed/further enhanced |
| - // in case this class is useable outside of these contexts. |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || |
| - BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - if (error_.empty() && parsed_json_) { |
| - if (!success_callback_.is_null()) |
| - success_callback_.Run(parsed_json_.Pass()); |
| - } else { |
| - if (!error_callback_.is_null()) |
| - error_callback_.Run(error_); |
| - } |
| +// static |
| +void SafeJsonParser::SetFactoryForTesting(Factory factory) { |
| + g_factory = factory; |
| } |
| -bool SafeJsonParser::OnMessageReceived(const IPC::Message& message) { |
| - bool handled = true; |
| - IPC_BEGIN_MESSAGE_MAP(SafeJsonParser, message) |
| - IPC_MESSAGE_HANDLER(SafeJsonParserHostMsg_ParseJSON_Succeeded, |
| - OnJSONParseSucceeded) |
| - IPC_MESSAGE_HANDLER(SafeJsonParserHostMsg_ParseJSON_Failed, |
| - OnJSONParseFailed) |
| - IPC_MESSAGE_UNHANDLED(handled = false) |
| - IPC_END_MESSAGE_MAP() |
| - return handled; |
| +// static |
| +void SafeJsonParser::Parse(const std::string& unsafe_json, |
| + const SuccessCallback& success_callback, |
| + const ErrorCallback& error_callback) { |
| + SafeJsonParser* parser = |
| + g_factory ? g_factory(unsafe_json, success_callback, error_callback) |
| + : new SafeJsonParserImpl(unsafe_json, success_callback, |
|
Robert Sesek
2015/07/02 17:28:19
Is this going to get released propery? Callers put
Bernhard Bauer
2015/07/02 22:38:23
SafeJsonParserImpl is still refcounted, by virtue
Robert Sesek
2015/07/06 17:31:35
Ah, right. Our C++ RefCounted impl starts the ref-
|
| + error_callback); |
| + parser->Start(); |
| } |
| } // namespace safe_json |