1// Copyright (c) 2012 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 "base/value_conversions.h" 6 7#include "base/files/file_path.h" 8#include "base/strings/string_number_conversions.h" 9#include "base/time/time.h" 10#include "base/values.h" 11 12namespace base { 13 14// |Value| internally stores strings in UTF-8, so we have to convert from the 15// system native code to UTF-8 and back. 16StringValue* CreateFilePathValue(const FilePath& in_value) { 17 return new StringValue(in_value.AsUTF8Unsafe()); 18} 19 20bool GetValueAsFilePath(const Value& value, FilePath* file_path) { 21 std::string str; 22 if (!value.GetAsString(&str)) 23 return false; 24 if (file_path) 25 *file_path = FilePath::FromUTF8Unsafe(str); 26 return true; 27} 28 29// |Value| does not support 64-bit integers, and doubles do not have enough 30// precision, so we store the 64-bit time value as a string instead. 31StringValue* CreateTimeDeltaValue(const TimeDelta& time) { 32 std::string string_value = base::Int64ToString(time.ToInternalValue()); 33 return new StringValue(string_value); 34} 35 36bool GetValueAsTimeDelta(const Value& value, TimeDelta* time) { 37 std::string str; 38 int64 int_value; 39 if (!value.GetAsString(&str) || !base::StringToInt64(str, &int_value)) 40 return false; 41 if (time) 42 *time = TimeDelta::FromInternalValue(int_value); 43 return true; 44} 45 46} // namespace base 47