diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/base/util/values/values_util.cc | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/base/util/values/values_util.cc')
-rw-r--r-- | chromium/base/util/values/values_util.cc | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/chromium/base/util/values/values_util.cc b/chromium/base/util/values/values_util.cc index 43b317b3100..fc9341035ce 100644 --- a/chromium/base/util/values/values_util.cc +++ b/chromium/base/util/values/values_util.cc @@ -4,10 +4,33 @@ #include "base/util/values/values_util.h" +#include "base/files/file_path.h" #include "base/strings/string_number_conversions.h" +#include "base/time/time.h" +#include "base/unguessable_token.h" + +// Warning: The Values involved could be stored on persistent storage like files +// on disks. Therefore, changes in implementation could lead to data corruption +// and must be done with caution. namespace util { +namespace { + +// Helper to serialize/deserialize an UnguessableToken. +// +// It assumes a little-endian CPU, which is arguably a bug. +union UnguessableTokenRepresentation { + struct Field { + uint64_t high; + uint64_t low; + } field; + + uint8_t buffer[sizeof(Field)]; +}; + +} // namespace + base::Value Int64ToValue(int64_t integer) { return base::Value(base::NumberToString(integer)); } @@ -57,4 +80,40 @@ base::Optional<base::Time> ValueToTime(const base::Value& value) { return base::Time::FromDeltaSinceWindowsEpoch(*time_delta); } +base::Value FilePathToValue(base::FilePath file_path) { + return base::Value(file_path.AsUTF8Unsafe()); +} + +base::Optional<base::FilePath> ValueToFilePath(const base::Value* value) { + return value ? ValueToFilePath(*value) : base::nullopt; +} + +base::Optional<base::FilePath> ValueToFilePath(const base::Value& value) { + if (!value.is_string()) + return base::nullopt; + return base::FilePath::FromUTF8Unsafe(value.GetString()); +} + +base::Value UnguessableTokenToValue(base::UnguessableToken token) { + UnguessableTokenRepresentation repr; + repr.field.high = token.GetHighForSerialization(); + repr.field.low = token.GetLowForSerialization(); + return base::Value(base::HexEncode(repr.buffer, sizeof(repr.buffer))); +} + +base::Optional<base::UnguessableToken> ValueToUnguessableToken( + const base::Value* value) { + return value ? ValueToUnguessableToken(*value) : base::nullopt; +} + +base::Optional<base::UnguessableToken> ValueToUnguessableToken( + const base::Value& value) { + if (!value.is_string()) + return base::nullopt; + UnguessableTokenRepresentation repr; + if (!base::HexStringToSpan(value.GetString(), repr.buffer)) + return base::nullopt; + return base::UnguessableToken::Deserialize(repr.field.high, repr.field.low); +} + } // namespace util |