diff options
author | jam <jam@chromium.org> | 2016-03-03 20:00:49 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-04 04:03:35 +0000 |
commit | 48bad7d8bdba983529cbdba6713ed94e89d15598 (patch) | |
tree | 50fd88d1f4fd08f65d78e420f624a7172122efb8 /url | |
parent | 62f11383f7caf145bbb3cb7c336c3fea14558eaf (diff) | |
download | chromium_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.gn | 20 | ||||
-rw-r--r-- | url/mojo/origin.mojom | 12 | ||||
-rw-r--r-- | url/mojo/origin.typemap | 14 | ||||
-rw-r--r-- | url/mojo/origin_struct_traits.h | 45 | ||||
-rw-r--r-- | url/mojo/url_gurl_struct_traits.h | 15 | ||||
-rw-r--r-- | url/mojo/url_gurl_struct_traits_unittest.cc | 32 | ||||
-rw-r--r-- | url/mojo/url_test.mojom | 8 | ||||
-rw-r--r-- | url/url.gyp | 20 |
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', ], }, |