| // 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); | 
 | } |