From 490e88eee68dd6907195dfeb0922d9e7cf37a693 Mon Sep 17 00:00:00 2001 From: jam Date: Fri, 18 Mar 2016 17:29:32 -0700 Subject: Implement the renderer side of the mojo based local storage implementation. This is based on the existing chrome IPC based implementation. BUG=586194 Review URL: https://codereview.chromium.org/1814003002 Cr-Commit-Position: refs/heads/master@{#382138} --- mojo/common/common_type_converters.cc | 23 +++++++++++++++++++--- mojo/common/common_type_converters.h | 16 ++++++++++----- mojo/common/common_type_converters_unittest.cc | 27 ++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 8 deletions(-) (limited to 'mojo') diff --git a/mojo/common/common_type_converters.cc b/mojo/common/common_type_converters.cc index 2740853..78418f8 100644 --- a/mojo/common/common_type_converters.cc +++ b/mojo/common/common_type_converters.cc @@ -39,9 +39,9 @@ base::string16 TypeConverter::Convert( return base::UTF8ToUTF16(input.To()); } -std::string TypeConverter >::Convert( +std::string TypeConverter>::Convert( const Array& input) { - if (input.is_null() || input.size() == 0u) + if (input.is_null() || input.empty()) return std::string(); return std::string(reinterpret_cast(&input.front()), @@ -51,9 +51,26 @@ std::string TypeConverter >::Convert( Array TypeConverter, std::string>::Convert( const std::string& input) { Array result(input.size()); - if (input.size() > 0) + if (!input.empty()) memcpy(&result.front(), input.c_str(), input.size()); return result; } +base::string16 TypeConverter>::Convert( + const Array& input) { + if (input.is_null() || input.empty()) + return base::string16(); + + return base::string16(reinterpret_cast(&input.front()), + input.size() / sizeof(base::char16)); +} + +Array TypeConverter, base::string16>::Convert( + const base::string16& input) { + Array result(input.size() * sizeof(base::char16)); + if (!input.empty()) + memcpy(&result.front(), input.c_str(), input.size() * sizeof(base::char16)); + return result; +} + } // namespace mojo diff --git a/mojo/common/common_type_converters.h b/mojo/common/common_type_converters.h index 5f6e3c5..6dc31f1 100644 --- a/mojo/common/common_type_converters.h +++ b/mojo/common/common_type_converters.h @@ -36,12 +36,8 @@ struct MOJO_COMMON_EXPORT TypeConverter { static base::string16 Convert(const String& input); }; -// TODO(erg): In the very long term, we will want to remove conversion between -// std::strings and arrays of unsigned bytes. However, there is too much code -// across chrome which uses std::string as a bag of bytes that we probably -// don't want to roll this function at each callsite. template <> -struct MOJO_COMMON_EXPORT TypeConverter > { +struct MOJO_COMMON_EXPORT TypeConverter> { static std::string Convert(const Array& input); }; @@ -50,6 +46,16 @@ struct MOJO_COMMON_EXPORT TypeConverter, std::string> { static Array Convert(const std::string& input); }; +template <> +struct MOJO_COMMON_EXPORT TypeConverter> { + static base::string16 Convert(const Array& input); +}; + +template <> +struct MOJO_COMMON_EXPORT TypeConverter, base::string16> { + static Array Convert(const base::string16& input); +}; + } // namespace mojo #endif // MOJO_COMMON_COMMON_TYPE_CONVERTERS_H_ diff --git a/mojo/common/common_type_converters_unittest.cc b/mojo/common/common_type_converters_unittest.cc index af8f640..302bcbe 100644 --- a/mojo/common/common_type_converters_unittest.cc +++ b/mojo/common/common_type_converters_unittest.cc @@ -108,6 +108,33 @@ TEST(CommonTypeConvertersTest, StdStringToArrayUint8) { EXPECT_EQ('a', data[3]); } +TEST(CommonTypeConvertersTest, ArrayUint8ToString16) { + Array data(8); + data[0] = 'd'; + data[2] = 'a'; + data[4] = 't'; + data[6] = 'a'; + + EXPECT_EQ(base::ASCIIToUTF16("data"), data.To()); +} + +TEST(CommonTypeConvertersTest, String16ToArrayUint8) { + base::string16 input(base::ASCIIToUTF16("data")); + Array data = Array::From(input); + + ASSERT_EQ(8ul, data.size()); + EXPECT_EQ('d', data[0]); + EXPECT_EQ('a', data[2]); + EXPECT_EQ('t', data[4]); + EXPECT_EQ('a', data[6]); +} + +TEST(CommonTypeConvertersTest, String16ToArrayUint8AndBack) { + base::string16 input(base::ASCIIToUTF16("data")); + Array data = Array::From(input); + EXPECT_EQ(input, data.To()); +} + TEST(CommonTypeConvertersTest, EmptyStringToArrayUint8) { Array data = Array::From(std::string()); -- cgit v1.1