summaryrefslogtreecommitdiffstats
path: root/mojo/common
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-26 16:10:36 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-26 16:10:36 +0000
commitcbf95636d13a9239987ca22d39941adf121c3c3f (patch)
tree88ca5d8e07989b84b5798a623867e2c15a95e0d1 /mojo/common
parent3ec029031d606e964a97dadbfb191fcf9c9c7895 (diff)
downloadchromium_src-cbf95636d13a9239987ca22d39941adf121c3c3f.zip
chromium_src-cbf95636d13a9239987ca22d39941adf121c3c3f.tar.gz
chromium_src-cbf95636d13a9239987ca22d39941adf121c3c3f.tar.bz2
Adds type converters for string16
BUG=none TEST=covered by unit tests R=darin@chromium.org Review URL: https://codereview.chromium.org/208743010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@259596 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo/common')
-rw-r--r--mojo/common/common_type_converters.cc18
-rw-r--r--mojo/common/common_type_converters.h8
-rw-r--r--mojo/common/common_type_converters_unittest.cc26
3 files changed, 52 insertions, 0 deletions
diff --git a/mojo/common/common_type_converters.cc b/mojo/common/common_type_converters.cc
index f02be67..b207e1e 100644
--- a/mojo/common/common_type_converters.cc
+++ b/mojo/common/common_type_converters.cc
@@ -4,6 +4,10 @@
#include "mojo/common/common_type_converters.h"
+#include <string>
+
+#include "base/strings/utf_string_conversions.h"
+
namespace mojo {
// static
@@ -21,4 +25,18 @@ base::StringPiece TypeConverter<String, base::StringPiece>::ConvertTo(
base::StringPiece(&input[0], input.size());
}
+// static
+String TypeConverter<String, base::string16>::ConvertFrom(
+ const base::string16& input,
+ Buffer* buf) {
+ return TypeConverter<String, base::StringPiece>::ConvertFrom(
+ base::UTF16ToUTF8(input), buf);
+}
+// static
+base::string16 TypeConverter<String, base::string16>::ConvertTo(
+ const String& input) {
+ return input.is_null() ? base::string16() :
+ base::UTF8ToUTF16(base::StringPiece(&input[0], input.size()));
+}
+
} // namespace mojo
diff --git a/mojo/common/common_type_converters.h b/mojo/common/common_type_converters.h
index 1c4ca75..5437ec4 100644
--- a/mojo/common/common_type_converters.h
+++ b/mojo/common/common_type_converters.h
@@ -5,6 +5,7 @@
#ifndef MOJO_COMMON_COMMON_TYPE_CONVERTERS_H_
#define MOJO_COMMON_COMMON_TYPE_CONVERTERS_H_
+#include "base/strings/string16.h"
#include "base/strings/string_piece.h"
#include "mojo/common/mojo_common_export.h"
#include "mojo/public/bindings/array.h"
@@ -19,6 +20,13 @@ class MOJO_COMMON_EXPORT TypeConverter<String, base::StringPiece> {
static base::StringPiece ConvertTo(const String& input);
};
+template <>
+class MOJO_COMMON_EXPORT TypeConverter<String, base::string16> {
+ public:
+ static String ConvertFrom(const base::string16& input, Buffer* buf);
+ static base::string16 ConvertTo(const 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 5c7a47b..5e825c0 100644
--- a/mojo/common/common_type_converters_unittest.cc
+++ b/mojo/common/common_type_converters_unittest.cc
@@ -3,6 +3,8 @@
// found in the LICENSE file.
#include "mojo/common/common_type_converters.h"
+
+#include "base/strings/utf_string_conversions.h"
#include "mojo/public/bindings/allocation_scope.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -21,6 +23,16 @@ void ExpectEqualsMojoString(const std::string& expected,
EXPECT_EQ(expected, str.To<std::string>());
}
+void ExpectEqualsString16(const base::string16& expected,
+ const base::string16& actual) {
+ EXPECT_EQ(expected, actual);
+}
+
+void ExpectEqualsMojoString(const base::string16& expected,
+ const String& str) {
+ EXPECT_EQ(expected, str.To<base::string16>());
+}
+
} // namespace
TEST(CommonTypeConvertersTest, StringPiece) {
@@ -43,6 +55,20 @@ TEST(CommonTypeConvertersTest, StringPiece) {
EXPECT_TRUE(empty_string_piece.empty());
}
+TEST(CommonTypeConvertersTest, String16) {
+ AllocationScope scope;
+
+ const base::string16 string16(base::ASCIIToUTF16("hello world"));
+ const String mojo_string(string16);
+
+ ExpectEqualsMojoString(string16, mojo_string);
+ EXPECT_EQ(string16, mojo_string.To<base::string16>());
+
+ // Test implicit construction and conversion:
+ ExpectEqualsMojoString(string16, string16);
+ ExpectEqualsString16(string16, mojo_string);
+}
+
} // namespace test
} // namespace common
} // namespace mojo