diff options
author | erg <erg@chromium.org> | 2014-09-16 14:27:31 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-16 21:28:00 +0000 |
commit | 757286d8a2c778fe4622890140c9b9d2afd21063 (patch) | |
tree | 0eb4553e68befd7123af21563187e464d6ce70f8 /mojo/common | |
parent | db519299d767b02329fc7d9a1edb9af4527ef463 (diff) | |
download | chromium_src-757286d8a2c778fe4622890140c9b9d2afd21063.zip chromium_src-757286d8a2c778fe4622890140c9b9d2afd21063.tar.gz chromium_src-757286d8a2c778fe4622890140c9b9d2afd21063.tar.bz2 |
mojo: Create a basic clipboard.
This creates a basic clipboard interface and uses it from
html_viewer. This is a minimal implementation and does not actually
interact with the system clipboard.
BUG=411039
Review URL: https://codereview.chromium.org/562483002
Cr-Commit-Position: refs/heads/master@{#295143}
Diffstat (limited to 'mojo/common')
-rw-r--r-- | mojo/common/common_type_converters.cc | 16 | ||||
-rw-r--r-- | mojo/common/common_type_converters.h | 15 | ||||
-rw-r--r-- | mojo/common/common_type_converters_unittest.cc | 21 |
3 files changed, 52 insertions, 0 deletions
diff --git a/mojo/common/common_type_converters.cc b/mojo/common/common_type_converters.cc index ffc1907..114b409 100644 --- a/mojo/common/common_type_converters.cc +++ b/mojo/common/common_type_converters.cc @@ -46,4 +46,20 @@ GURL TypeConverter<GURL, String>::Convert(const String& input) { return GURL(input.get()); } +std::string TypeConverter<std::string, Array<uint8_t> >::Convert( + const Array<uint8_t>& input) { + if (input.is_null()) + return std::string(); + + return std::string(reinterpret_cast<const char*>(&input.front()), + input.size()); +} + +Array<uint8_t> TypeConverter<Array<uint8_t>, std::string>::Convert( + const std::string& input) { + Array<uint8_t> result(input.size()); + memcpy(&result.front(), input.c_str(), input.size()); + return result.Pass(); +} + } // namespace mojo diff --git a/mojo/common/common_type_converters.h b/mojo/common/common_type_converters.h index 159325e..7b0260a 100644 --- a/mojo/common/common_type_converters.h +++ b/mojo/common/common_type_converters.h @@ -8,6 +8,7 @@ #include "base/strings/string16.h" #include "base/strings/string_piece.h" #include "mojo/common/mojo_common_export.h" +#include "mojo/public/cpp/bindings/array.h" #include "mojo/public/cpp/bindings/string.h" #include "mojo/public/cpp/bindings/type_converter.h" @@ -45,6 +46,20 @@ struct MOJO_COMMON_EXPORT TypeConverter<GURL, String> { static GURL 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<std::string, Array<uint8_t> > { + static std::string Convert(const Array<uint8_t>& input); +}; + +template <> +struct MOJO_COMMON_EXPORT TypeConverter<Array<uint8_t>, std::string> { + static Array<uint8_t> Convert(const std::string& 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 314f180..f97be0a 100644 --- a/mojo/common/common_type_converters_unittest.cc +++ b/mojo/common/common_type_converters_unittest.cc @@ -84,6 +84,27 @@ TEST(CommonTypeConvertersTest, URL) { ASSERT_EQ(0U, string_from_invalid.size()); } +TEST(CommonTypeConvertersTest, ArrayUint8ToStdString) { + Array<uint8_t> data(4); + data[0] = 'd'; + data[1] = 'a'; + data[2] = 't'; + data[3] = 'a'; + + EXPECT_EQ("data", data.To<std::string>()); +} + +TEST(CommonTypeConvertersTest, StdStringToArrayUint8) { + std::string input("data"); + Array<uint8_t> data = Array<uint8_t>::From(input); + + ASSERT_EQ(4ul, data.size()); + EXPECT_EQ('d', data[0]); + EXPECT_EQ('a', data[1]); + EXPECT_EQ('t', data[2]); + EXPECT_EQ('a', data[3]); +} + } // namespace test } // namespace common } // namespace mojo |