15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_string_value_serializer.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_reader.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using base::Value; 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)JSONStringValueSerializer::~JSONStringValueSerializer() {} 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool JSONStringValueSerializer::Serialize(const Value& root) { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SerializeInternal(root, false); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool JSONStringValueSerializer::SerializeAndOmitBinaryValues( 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Value& root) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SerializeInternal(root, true); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool JSONStringValueSerializer::SerializeInternal(const Value& root, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool omit_binary_values) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!json_string_ || initialized_with_const_string_) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int options = 0; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (omit_binary_values) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= base::JSONWriter::OPTIONS_OMIT_BINARY_VALUES; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pretty_print_) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= base::JSONWriter::OPTIONS_PRETTY_PRINT; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::JSONWriter::WriteWithOptions(&root, options, json_string_); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Value* JSONStringValueSerializer::Deserialize(int* error_code, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* error_str) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!json_string_) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::JSONReader::ReadAndReturnError(*json_string_, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_trailing_comma_ ? base::JSON_ALLOW_TRAILING_COMMAS : 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSON_PARSE_RFC, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_code, error_str); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 48