blob: dc00533bb54e9c48d6a576582fdb11acc068166e [file] [log] [blame]
sfiera6e6e5412016-11-18 20:13:191// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/ntp_tiles/json_unsafe_parser.h"
6
7#include "base/bind.h"
8#include "base/callback.h"
9#include "base/json/json_parser.h"
10#include "base/strings/stringprintf.h"
11#include "base/threading/thread_task_runner_handle.h"
12#include "base/values.h"
13
14namespace ntp_tiles {
15
16void JsonUnsafeParser::Parse(const std::string& unsafe_json,
17 const SuccessCallback& success_callback,
18 const ErrorCallback& error_callback) {
19 base::ThreadTaskRunnerHandle::Get()->PostTask(
20 FROM_HERE,
21 base::Bind(
22 [](const std::string& unsafe_json,
23 const SuccessCallback& success_callback,
24 const ErrorCallback& error_callback) {
25 std::string error_msg;
26 int error_line, error_column;
27 std::unique_ptr<base::Value> value =
28 base::JSONReader::ReadAndReturnError(
29 unsafe_json, base::JSON_ALLOW_TRAILING_COMMAS, nullptr,
30 &error_msg, &error_line, &error_column);
31 if (value) {
32 success_callback.Run(std::move(value));
33 } else {
34 error_callback.Run(base::StringPrintf(
35 "%s (%d:%d)", error_msg.c_str(), error_line, error_column));
36 }
37 },
38 unsafe_json, success_callback, error_callback));
39}
40
41} // namespace ntp_tiles