1 // Copyright (c) 2011 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 "chrome/browser/sync/js_arg_list.h" 6 7 #include "base/json/json_writer.h" 8 #include "base/memory/scoped_ptr.h" 9 10 namespace browser_sync { 11 12 JsArgList::JsArgList() : args_(new SharedListValue()) {} 13 14 JsArgList::JsArgList(const ListValue& args) 15 : args_(new SharedListValue(args)) {} 16 17 JsArgList::JsArgList(const std::vector<const Value*>& args) 18 : args_(new SharedListValue(args)) {} 19 20 JsArgList::~JsArgList() {} 21 22 const ListValue& JsArgList::Get() const { 23 return args_->Get(); 24 } 25 26 std::string JsArgList::ToString() const { 27 std::string str; 28 base::JSONWriter::Write(&Get(), false, &str); 29 return str; 30 } 31 32 JsArgList::SharedListValue::SharedListValue() {} 33 34 JsArgList::SharedListValue::SharedListValue(const ListValue& list_value) { 35 // Go through contortions to copy the list since ListValues are not 36 // copyable. 37 scoped_ptr<ListValue> list_value_copy(list_value.DeepCopy()); 38 list_value_.Swap(list_value_copy.get()); 39 } 40 41 JsArgList::SharedListValue::SharedListValue( 42 const std::vector<const Value*>& value_list) { 43 for (std::vector<const Value*>::const_iterator it = value_list.begin(); 44 it != value_list.end(); ++it) { 45 list_value_.Append((*it)->DeepCopy()); 46 } 47 } 48 49 const ListValue& JsArgList::SharedListValue::Get() const { 50 return list_value_; 51 } 52 53 JsArgList::SharedListValue::~SharedListValue() {} 54 55 } // namespace browser_sync 56