|  | // Copyright (c) 2012 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 "base/json/json_string_value_serializer.h" | 
|  |  | 
|  | #include "base/json/json_reader.h" | 
|  | #include "base/json/json_writer.h" | 
|  | #include "base/logging.h" | 
|  |  | 
|  | using base::Value; | 
|  |  | 
|  | JSONStringValueSerializer::JSONStringValueSerializer(std::string* json_string) | 
|  | : json_string_(json_string), | 
|  | pretty_print_(false) { | 
|  | } | 
|  |  | 
|  | JSONStringValueSerializer::~JSONStringValueSerializer() = default; | 
|  |  | 
|  | bool JSONStringValueSerializer::Serialize(const Value& root) { | 
|  | return SerializeInternal(root, false); | 
|  | } | 
|  |  | 
|  | bool JSONStringValueSerializer::SerializeAndOmitBinaryValues( | 
|  | const Value& root) { | 
|  | return SerializeInternal(root, true); | 
|  | } | 
|  |  | 
|  | bool JSONStringValueSerializer::SerializeInternal(const Value& root, | 
|  | bool omit_binary_values) { | 
|  | if (!json_string_) | 
|  | return false; | 
|  |  | 
|  | int options = 0; | 
|  | if (omit_binary_values) | 
|  | options |= base::JSONWriter::OPTIONS_OMIT_BINARY_VALUES; | 
|  | if (pretty_print_) | 
|  | options |= base::JSONWriter::OPTIONS_PRETTY_PRINT; | 
|  |  | 
|  | return base::JSONWriter::WriteWithOptions(root, options, json_string_); | 
|  | } | 
|  |  | 
|  | JSONStringValueDeserializer::JSONStringValueDeserializer( | 
|  | const base::StringPiece& json_string, | 
|  | int options) | 
|  | : json_string_(json_string), options_(options) {} | 
|  |  | 
|  | JSONStringValueDeserializer::~JSONStringValueDeserializer() = default; | 
|  |  | 
|  | std::unique_ptr<Value> JSONStringValueDeserializer::Deserialize( | 
|  | int* error_code, | 
|  | std::string* error_str) { | 
|  | return base::JSONReader::ReadAndReturnError(json_string_, options_, | 
|  | error_code, error_str); | 
|  | } |