summaryrefslogtreecommitdiffstats
path: root/url
diff options
context:
space:
mode:
authorjam <jam@chromium.org>2016-03-03 20:00:49 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-04 04:03:35 +0000
commit48bad7d8bdba983529cbdba6713ed94e89d15598 (patch)
tree50fd88d1f4fd08f65d78e420f624a7172122efb8 /url
parent62f11383f7caf145bbb3cb7c336c3fea14558eaf (diff)
downloadchromium_src-48bad7d8bdba983529cbdba6713ed94e89d15598.zip
chromium_src-48bad7d8bdba983529cbdba6713ed94e89d15598.tar.gz
chromium_src-48bad7d8bdba983529cbdba6713ed94e89d15598.tar.bz2
Add mojo struct traits for url::Origin so that it can be sent over mojoms.
BUG=586194 Review URL: https://codereview.chromium.org/1760333002 Cr-Commit-Position: refs/heads/master@{#379200}
Diffstat (limited to 'url')
-rw-r--r--url/mojo/BUILD.gn20
-rw-r--r--url/mojo/origin.mojom12
-rw-r--r--url/mojo/origin.typemap14
-rw-r--r--url/mojo/origin_struct_traits.h45
-rw-r--r--url/mojo/url_gurl_struct_traits.h15
-rw-r--r--url/mojo/url_gurl_struct_traits_unittest.cc32
-rw-r--r--url/mojo/url_test.mojom8
-rw-r--r--url/url.gyp20
8 files changed, 149 insertions, 17 deletions
diff --git a/url/mojo/BUILD.gn b/url/mojo/BUILD.gn
index 6c1b174..965bb0e 100644
--- a/url/mojo/BUILD.gn
+++ b/url/mojo/BUILD.gn
@@ -6,6 +6,7 @@ import("//mojo/public/tools/bindings/mojom.gni")
mojom("url_mojom") {
sources = [
+ "origin.mojom",
"url.mojom",
]
}
@@ -23,14 +24,31 @@ mojom("url_mojom_gurl") {
]
}
+mojom("url_mojom_origin") {
+ sources = [
+ "origin.mojom",
+ ]
+
+ variant = "chromium"
+ typemaps = [ "origin.typemap" ]
+
+ public_deps = [
+ ":url_mojom",
+ ]
+}
+
mojom("test_url_mojom_gurl") {
sources = [
"url_test.mojom",
]
- typemaps = [ "gurl.typemap" ]
+ typemaps = [
+ "gurl.typemap",
+ "origin.typemap",
+ ]
public_deps = [
":url_mojom_gurl",
+ ":url_mojom_origin",
]
}
diff --git a/url/mojo/origin.mojom b/url/mojo/origin.mojom
new file mode 100644
index 0000000..884357ba
--- /dev/null
+++ b/url/mojo/origin.mojom
@@ -0,0 +1,12 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module url.mojom;
+
+struct Origin {
+ string scheme;
+ string host;
+ uint16 port;
+ bool unique;
+};
diff --git a/url/mojo/origin.typemap b/url/mojo/origin.typemap
new file mode 100644
index 0000000..d5e49c3
--- /dev/null
+++ b/url/mojo/origin.typemap
@@ -0,0 +1,14 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+{
+ "c++": {
+ "url.mojom.Origin": {
+ "typename": "url::Origin",
+ "headers": [
+ "url/mojo/origin_struct_traits.h"
+ ]
+ }
+ }
+}
diff --git a/url/mojo/origin_struct_traits.h b/url/mojo/origin_struct_traits.h
new file mode 100644
index 0000000..1d28c87
--- /dev/null
+++ b/url/mojo/origin_struct_traits.h
@@ -0,0 +1,45 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef URL_MOJO_ORIGIN_STRUCT_TRAITS_H_
+#define URL_MOJO_ORIGIN_STRUCT_TRAITS_H_
+
+#include "base/strings/string_piece.h"
+#include "url/mojo/origin.mojom.h"
+#include "url/origin.h"
+
+namespace mojo {
+
+template <>
+struct StructTraits<url::mojom::Origin, url::Origin> {
+ static base::StringPiece scheme(const url::Origin& r) {
+ return base::StringPiece(r.scheme());
+ }
+ static base::StringPiece host(const url::Origin& r) {
+ return base::StringPiece(r.host());
+ }
+ static uint16_t port(const url::Origin& r) {
+ return r.port();
+ }
+ static bool unique(const url::Origin& r) {
+ return r.unique();
+ }
+ static bool Read(url::mojom::Origin::Reader r, url::Origin* out) {
+ *out = r.unique() ? url::Origin()
+ : url::Origin::UnsafelyCreateOriginWithoutNormalization(
+ r.scheme(), r.host(), r.port());
+
+ // If a unique origin was created, but the unique flag wasn't set, then
+ // the values provided to 'UnsafelyCreateOriginWithoutNormalization' were
+ // invalid.
+ if (!r.unique() && out->unique())
+ return false;
+
+ return true;
+ }
+};
+
+}
+
+#endif // URL_MOJO_ORIGIN_STRUCT_TRAITS_H_
diff --git a/url/mojo/url_gurl_struct_traits.h b/url/mojo/url_gurl_struct_traits.h
index 1894baf..4bad7d7 100644
--- a/url/mojo/url_gurl_struct_traits.h
+++ b/url/mojo/url_gurl_struct_traits.h
@@ -2,20 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#ifndef URL_MOJO_URL_GURL_STRUCT_TRAITS_H_
+#define URL_MOJO_URL_GURL_STRUCT_TRAITS_H_
+
#include "base/strings/string_piece.h"
#include "url/gurl.h"
#include "url/mojo/url.mojom.h"
+#include "url/url_constants.h"
namespace mojo {
-// copied from content/public/common/content_constants.cc: make that file use
-// this definition.
-const size_t kMaxUrlChars = 2 * 1024 * 1024;
-
template <>
struct StructTraits<url::mojom::Url, GURL> {
static base::StringPiece url(const GURL& r) {
- if (r.possibly_invalid_spec().length() > kMaxUrlChars || !r.is_valid()) {
+ if (r.possibly_invalid_spec().length() > url::kMaxURLChars ||
+ !r.is_valid()) {
return base::StringPiece();
}
@@ -23,7 +24,7 @@ struct StructTraits<url::mojom::Url, GURL> {
r.possibly_invalid_spec().length());
}
static bool Read(url::mojom::Url::Reader r, GURL* out) {
- if (r.url().length() > kMaxUrlChars) {
+ if (r.url().length() > url::kMaxURLChars) {
*out = GURL();
return false;
}
@@ -37,3 +38,5 @@ struct StructTraits<url::mojom::Url, GURL> {
};
}
+
+#endif // URL_MOJO_URL_GURL_STRUCT_TRAITS_H_
diff --git a/url/mojo/url_gurl_struct_traits_unittest.cc b/url/mojo/url_gurl_struct_traits_unittest.cc
index 061e114..be21f61 100644
--- a/url/mojo/url_gurl_struct_traits_unittest.cc
+++ b/url/mojo/url_gurl_struct_traits_unittest.cc
@@ -14,12 +14,17 @@ namespace url {
class UrlTestImpl : public mojom::UrlTest {
public:
- explicit UrlTestImpl(mojo::InterfaceRequest<url::mojom::UrlTest> request)
+ explicit UrlTestImpl(mojo::InterfaceRequest<mojom::UrlTest> request)
: binding_(this, std::move(request)) {
}
// UrlTest:
- void Bounce(const GURL& in, const BounceCallback& callback) override {
+ void BounceUrl(const GURL& in, const BounceUrlCallback& callback) override {
+ callback.Run(in);
+ }
+
+ void BounceOrigin(const Origin& in,
+ const BounceOriginCallback& callback) override {
callback.Run(in);
}
@@ -27,9 +32,8 @@ class UrlTestImpl : public mojom::UrlTest {
mojo::Binding<UrlTest> binding_;
};
-// Mojo version of chrome IPC test in
-// content/common/common_param_traits_unittest.cc
-TEST(MojoUrlGURLStructTraitsTest, Basic) {
+// Mojo version of chrome IPC test in url/ipc/url_param_traits_unittest.cc.
+TEST(MojoGURLStructTraitsTest, Basic) {
base::MessageLoop message_loop;
mojom::UrlTestPtr proxy;
@@ -43,7 +47,7 @@ TEST(MojoUrlGURLStructTraitsTest, Basic) {
for (size_t i = 0; i < arraysize(serialize_cases); i++) {
GURL input(serialize_cases[i]);
GURL output;
- EXPECT_TRUE(proxy->Bounce(input, &output));
+ EXPECT_TRUE(proxy->BounceUrl(input, &output));
// We want to test each component individually to make sure its range was
// correctly serialized and deserialized, not just the spec.
@@ -62,12 +66,24 @@ TEST(MojoUrlGURLStructTraitsTest, Basic) {
// Test an excessively long GURL.
{
const std::string url = std::string("http://example.org/").append(
- mojo::kMaxUrlChars + 1, 'a');
+ kMaxURLChars + 1, 'a');
GURL input(url.c_str());
GURL output;
- EXPECT_TRUE(proxy->Bounce(input, &output));
+ EXPECT_TRUE(proxy->BounceUrl(input, &output));
EXPECT_TRUE(output.is_empty());
}
+
+ // Test basic Origin serialization.
+ Origin non_unique = Origin::UnsafelyCreateOriginWithoutNormalization(
+ "http", "www.google.com", 80);
+ Origin output;
+ EXPECT_TRUE(proxy->BounceOrigin(non_unique, &output));
+ EXPECT_EQ(non_unique, output);
+ EXPECT_FALSE(non_unique.unique());
+
+ Origin unique;
+ EXPECT_TRUE(proxy->BounceOrigin(unique, &output));
+ EXPECT_TRUE(output.unique());
}
} // namespace url
diff --git a/url/mojo/url_test.mojom b/url/mojo/url_test.mojom
index 8efa8b2..c9b3469 100644
--- a/url/mojo/url_test.mojom
+++ b/url/mojo/url_test.mojom
@@ -4,9 +4,13 @@
module url.mojom;
+import "url/mojo/origin.mojom";
import "url/mojo/url.mojom";
interface UrlTest {
[Sync]
- Bounce(Url in) => (Url out);
-}; \ No newline at end of file
+ BounceUrl(Url in) => (Url out);
+
+ [Sync]
+ BounceOrigin(Origin in) => (Origin out);
+};
diff --git a/url/url.gyp b/url/url.gyp
index 6272689..08bb9ca 100644
--- a/url/url.gyp
+++ b/url/url.gyp
@@ -73,6 +73,7 @@
'type': 'none',
'variables': {
'mojom_files': [
+ 'mojo/origin.mojom',
'mojo/url.mojom',
],
},
@@ -96,6 +97,23 @@
],
},
{
+ 'target_name': 'origin_mojom_chromium',
+ 'type': 'none',
+ 'variables': {
+ 'mojom_variant': 'chromium',
+ 'mojom_extra_generator_args': [
+ '--typemap', '<(DEPTH)/url/mojo/origin.typemap',
+ ],
+ 'mojom_files': [
+ 'mojo/origin.mojom',
+ ],
+ },
+ 'includes': [ '../mojo/mojom_bindings_generator_explicit.gypi' ],
+ 'dependencies': [
+ 'url_interfaces_mojom',
+ ],
+ },
+ {
'target_name': 'url_mojom',
'type': 'static_library',
'export_dependent_settings': [
@@ -112,6 +130,7 @@
'variables': {
'mojom_extra_generator_args': [
'--typemap', '<(DEPTH)/url/mojo/gurl.typemap',
+ '--typemap', '<(DEPTH)/url/mojo/origin.typemap',
],
'mojom_files': [
'mojo/url_test.mojom',
@@ -120,6 +139,7 @@
'includes': [ '../mojo/mojom_bindings_generator_explicit.gypi' ],
'dependencies': [
'../mojo/mojo_public.gyp:mojo_cpp_bindings',
+ 'origin_mojom_chromium',
'url_mojom_chromium',
],
},