// Copyright 2016 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 "components/ntp_tiles/json_unsafe_parser.h"

#include "base/bind.h"
#include "base/callback.h"
#include "base/json/json_parser.h"
#include "base/strings/stringprintf.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/values.h"

namespace ntp_tiles {

void JsonUnsafeParser::Parse(const std::string& unsafe_json,
                             const SuccessCallback& success_callback,
                             const ErrorCallback& error_callback) {
  base::ThreadTaskRunnerHandle::Get()->PostTask(
      FROM_HERE,
      base::BindOnce(
          [](const std::string& unsafe_json,
             const SuccessCallback& success_callback,
             const ErrorCallback& error_callback) {
            std::string error_msg;
            int error_line, error_column;
            std::unique_ptr<base::Value> value =
                base::JSONReader::ReadAndReturnErrorDeprecated(
                    unsafe_json, base::JSON_ALLOW_TRAILING_COMMAS, nullptr,
                    &error_msg, &error_line, &error_column);
            if (value) {
              success_callback.Run(std::move(value));
            } else {
              error_callback.Run(base::StringPrintf(
                  "%s (%d:%d)", error_msg.c_str(), error_line, error_column));
            }
          },
          unsafe_json, success_callback, error_callback));
}

}  // namespace ntp_tiles
