summaryrefslogtreecommitdiffstats
path: root/mojo/common
diff options
context:
space:
mode:
authorerg <erg@chromium.org>2014-09-16 14:27:31 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-16 21:28:00 +0000
commit757286d8a2c778fe4622890140c9b9d2afd21063 (patch)
tree0eb4553e68befd7123af21563187e464d6ce70f8 /mojo/common
parentdb519299d767b02329fc7d9a1edb9af4527ef463 (diff)
downloadchromium_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.cc16
-rw-r--r--mojo/common/common_type_converters.h15
-rw-r--r--mojo/common/common_type_converters_unittest.cc21
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