Commit 1b21e379 authored by Ken Rockot's avatar Ken Rockot Committed by Commit Bot

Migrate URL and Origin typemaps to GN definitions

Also moves some longer bits of code out-of-line.

Bug: 1059389
Change-Id: Idd1b3606e26504ab92e9aefebc933823919a2431
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2092695
Commit-Queue: Ken Rockot <rockot@google.com>
Reviewed-by: default avatarDave Tapuska <dtapuska@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748058}
parent 6d890c8b
...@@ -61,7 +61,6 @@ _typemap_imports = [ ...@@ -61,7 +61,6 @@ _typemap_imports = [
"//ui/gfx/typemaps.gni", "//ui/gfx/typemaps.gni",
"//ui/gl/typemaps.gni", "//ui/gl/typemaps.gni",
"//ui/latency/mojom/typemaps.gni", "//ui/latency/mojom/typemaps.gni",
"//url/mojom/typemaps.gni",
] ]
_typemaps = [] _typemaps = []
......
...@@ -18,3 +18,38 @@ mojom_cpp_typemap("big_string_typemap") { ...@@ -18,3 +18,38 @@ mojom_cpp_typemap("big_string_typemap") {
] ]
public_deps = [ "//mojo/public/cpp/base" ] public_deps = [ "//mojo/public/cpp/base" ]
} }
mojom_cpp_typemap("url_typemap") {
types = [
{
mojom = "url.mojom.Url"
cpp = "::blink::KURL"
force_serialize = true
},
]
public_headers = [
"//third_party/blink/renderer/platform/mojo/kurl_mojom_traits.h",
"//third_party/blink/renderer/platform/weborigin/kurl.h",
"//third_party/blink/renderer/platform/weborigin/kurl_hash.h",
]
# NOTE: Consumers of this typemap must themselves depend on platform.
public_deps = [ "//url" ]
}
mojom_cpp_typemap("origin_typemap") {
types = [
{
mojom = "url.mojom.Origin"
cpp = "::scoped_refptr<const ::blink::SecurityOrigin>"
nullable_is_same_type = true
},
]
public_headers = [
"//third_party/blink/renderer/platform/mojo/security_origin_mojom_traits.h",
"//third_party/blink/renderer/platform/weborigin/security_origin.h",
]
# NOTE: Consumers of this typemap must themselves depend on platform.
public_deps = [ "//url" ]
}
...@@ -21,8 +21,6 @@ typemaps = [ ...@@ -21,8 +21,6 @@ typemaps = [
"//third_party/blink/renderer/platform/blob/serialized_blob.typemap", "//third_party/blink/renderer/platform/blob/serialized_blob.typemap",
"//third_party/blink/renderer/platform/cookie/canonical_cookie.typemap", "//third_party/blink/renderer/platform/cookie/canonical_cookie.typemap",
"//third_party/blink/renderer/platform/mojo/fetch_api_request_headers.typemap", "//third_party/blink/renderer/platform/mojo/fetch_api_request_headers.typemap",
"//third_party/blink/renderer/platform/mojo/kurl.typemap",
"//third_party/blink/renderer/platform/mojo/security_origin.typemap",
"//third_party/blink/renderer/platform/mojo/string.typemap", "//third_party/blink/renderer/platform/mojo/string.typemap",
"//third_party/blink/renderer/platform/mojo/time.typemap", "//third_party/blink/renderer/platform/mojo/time.typemap",
"//third_party/blink/renderer/platform/network/encoded_form_data_element.typemap", "//third_party/blink/renderer/platform/network/encoded_form_data_element.typemap",
......
# 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.
mojom = "//url/mojom/url.mojom"
public_headers = [
"//third_party/blink/renderer/platform/weborigin/kurl.h",
"//third_party/blink/renderer/platform/weborigin/kurl_hash.h",
]
traits_headers =
[ "//third_party/blink/renderer/platform/mojo/kurl_mojom_traits.h" ]
# Note: consumers of this typemap must themselves depend on platform.
deps = [
"//mojo/public/cpp/bindings",
"//url",
]
type_mappings = [ "url.mojom.Url=::blink::KURL[force_serialize]" ]
...@@ -5,15 +5,16 @@ ...@@ -5,15 +5,16 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_KURL_MOJOM_TRAITS_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_KURL_MOJOM_TRAITS_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_KURL_MOJOM_TRAITS_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_KURL_MOJOM_TRAITS_H_
#include "mojo/public/cpp/bindings/string_traits_wtf.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "url/mojom/url.mojom-blink-forward.h" #include "url/mojom/url.mojom-shared.h"
#include "url/url_constants.h" #include "url/url_constants.h"
namespace mojo { namespace mojo {
template <> template <>
struct StructTraits<url::mojom::blink::Url::DataView, ::blink::KURL> { struct StructTraits<url::mojom::UrlDataView, ::blink::KURL> {
static WTF::String url(const ::blink::KURL& blinkUrl) { static WTF::String url(const ::blink::KURL& blinkUrl) {
if (!blinkUrl.IsValid() || if (!blinkUrl.IsValid() ||
blinkUrl.GetString().length() > url::kMaxURLChars) { blinkUrl.GetString().length() > url::kMaxURLChars) {
...@@ -22,7 +23,7 @@ struct StructTraits<url::mojom::blink::Url::DataView, ::blink::KURL> { ...@@ -22,7 +23,7 @@ struct StructTraits<url::mojom::blink::Url::DataView, ::blink::KURL> {
return blinkUrl.GetString(); return blinkUrl.GetString();
} }
static bool Read(url::mojom::blink::Url::DataView data, ::blink::KURL* out) { static bool Read(url::mojom::UrlDataView data, ::blink::KURL* out) {
WTF::String urlString; WTF::String urlString;
if (!data.ReadUrl(&urlString)) if (!data.ReadUrl(&urlString))
return false; return false;
......
# 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.
mojom = "//url/mojom/origin.mojom"
public_headers =
[ "//third_party/blink/renderer/platform/weborigin/security_origin.h" ]
traits_headers = [
"//third_party/blink/renderer/platform/mojo/security_origin_mojom_traits.h",
]
# Note: consumers of this typemap must themselves depend on platform.
deps = [
"//mojo/public/cpp/bindings",
"//url",
]
type_mappings = [ "url.mojom.Origin=::scoped_refptr<const ::blink::SecurityOrigin>[nullable_is_same_type]" ]
...@@ -5,10 +5,12 @@ ...@@ -5,10 +5,12 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_SECURITY_ORIGIN_MOJOM_TRAITS_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_SECURITY_ORIGIN_MOJOM_TRAITS_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_SECURITY_ORIGIN_MOJOM_TRAITS_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_SECURITY_ORIGIN_MOJOM_TRAITS_H_
#include "mojo/public/cpp/base/unguessable_token_mojom_traits.h"
#include "mojo/public/cpp/bindings/string_traits_wtf.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/weborigin/security_origin.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "url/mojom/origin.mojom-blink-forward.h" #include "url/mojom/origin.mojom-shared.h"
#include "url/scheme_host_port.h" #include "url/scheme_host_port.h"
namespace mojo { namespace mojo {
...@@ -45,7 +47,7 @@ struct UrlOriginAdapter { ...@@ -45,7 +47,7 @@ struct UrlOriginAdapter {
}; };
template <> template <>
struct StructTraits<url::mojom::blink::Origin::DataView, struct StructTraits<url::mojom::OriginDataView,
scoped_refptr<const ::blink::SecurityOrigin>> { scoped_refptr<const ::blink::SecurityOrigin>> {
static WTF::String scheme( static WTF::String scheme(
const scoped_refptr<const ::blink::SecurityOrigin>& origin) { const scoped_refptr<const ::blink::SecurityOrigin>& origin) {
...@@ -65,7 +67,7 @@ struct StructTraits<url::mojom::blink::Origin::DataView, ...@@ -65,7 +67,7 @@ struct StructTraits<url::mojom::blink::Origin::DataView,
const scoped_refptr<const ::blink::SecurityOrigin>& origin) { const scoped_refptr<const ::blink::SecurityOrigin>& origin) {
return UrlOriginAdapter::nonce_if_opaque(origin); return UrlOriginAdapter::nonce_if_opaque(origin);
} }
static bool Read(url::mojom::blink::Origin::DataView data, static bool Read(url::mojom::OriginDataView data,
scoped_refptr<const ::blink::SecurityOrigin>* out) { scoped_refptr<const ::blink::SecurityOrigin>* out) {
// This implementation is very close to // This implementation is very close to
// SecurityOrigin::CreateFromUrlOrigin, so keep in sync if modifications // SecurityOrigin::CreateFromUrlOrigin, so keep in sync if modifications
......
...@@ -7,6 +7,9 @@ import("//mojo/public/tools/bindings/mojom.gni") ...@@ -7,6 +7,9 @@ import("//mojo/public/tools/bindings/mojom.gni")
mojom("url_mojom_gurl") { mojom("url_mojom_gurl") {
generate_java = true generate_java = true
sources = [ "url.mojom" ] sources = [ "url.mojom" ]
cpp_typemaps = [ ":url_typemap" ]
blink_cpp_typemaps =
[ "//third_party/blink/renderer/platform/mojo:url_typemap" ]
} }
mojom("url_mojom_origin") { mojom("url_mojom_origin") {
...@@ -19,6 +22,10 @@ mojom("url_mojom_origin") { ...@@ -19,6 +22,10 @@ mojom("url_mojom_origin") {
] ]
check_includes_blink = false check_includes_blink = false
cpp_typemaps = [ ":origin_typemap" ]
blink_cpp_typemaps =
[ "//third_party/blink/renderer/platform/mojo:origin_typemap" ]
} }
mojom("test_url_mojom_gurl") { mojom("test_url_mojom_gurl") {
...@@ -29,3 +36,58 @@ mojom("test_url_mojom_gurl") { ...@@ -29,3 +36,58 @@ mojom("test_url_mojom_gurl") {
":url_mojom_origin", ":url_mojom_origin",
] ]
} }
component("mojom_traits") {
output_name = "url_mojom_traits"
sources = [
"origin_mojom_traits.cc",
"origin_mojom_traits.h",
"url_gurl_mojom_traits.cc",
"url_gurl_mojom_traits.h",
]
defines = [ "IS_URL_MOJOM_TRAITS_IMPL" ]
public_deps = [
":url_mojom_gurl_shared",
":url_mojom_origin_shared",
"//base",
"//mojo/public/cpp/base:shared_typemap_traits",
"//url",
]
}
mojom_cpp_typemap("url_typemap") {
types = [
{
mojom = "url.mojom.Url"
cpp = "::GURL"
},
]
public_headers = [
"//url/gurl.h",
"//url/mojom/url_gurl_mojom_traits.h",
]
public_deps = [
":mojom_traits",
"//url",
]
}
mojom_cpp_typemap("origin_typemap") {
types = [
{
mojom = "url.mojom.Origin"
cpp = "::url::Origin"
},
]
public_headers = [
"//url/origin.h",
"//url/mojom/origin_mojom_traits.h",
]
public_deps = [
":mojom_traits",
"//url",
]
}
...@@ -2,6 +2,4 @@ per-file *.mojom=set noparent ...@@ -2,6 +2,4 @@ per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS per-file *.mojom=file://ipc/SECURITY_OWNERS
per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=set noparent
per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
per-file *.typemap=set noparent
per-file *.typemap=file://ipc/SECURITY_OWNERS
# COMPONENT: Internals>Mojo # COMPONENT: Internals>Mojo
# 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.
mojom = "//url/mojom/url.mojom"
public_headers = [ "//url/gurl.h" ]
traits_headers = [ "//url/mojom/url_gurl_mojom_traits.h" ]
deps = [
"//url",
]
type_mappings = [ "url.mojom.Url=::GURL" ]
# 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.
mojom = "//url/mojom/origin.mojom"
public_headers = [ "//url/origin.h" ]
traits_headers = [ "//url/mojom/origin_mojom_traits.h" ]
deps = [
"//url",
]
type_mappings = [ "url.mojom.Origin=::url::Origin" ]
// Copyright 2020 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.
#include "url/mojom/origin_mojom_traits.h"
#include "base/strings/string_piece.h"
namespace mojo {
// static
bool StructTraits<url::mojom::OriginDataView, url::Origin>::Read(
url::mojom::OriginDataView data,
url::Origin* out) {
base::StringPiece scheme, host;
base::Optional<base::UnguessableToken> nonce_if_opaque;
if (!data.ReadScheme(&scheme) || !data.ReadHost(&host) ||
!data.ReadNonceIfOpaque(&nonce_if_opaque))
return false;
base::Optional<url::Origin> creation_result =
nonce_if_opaque
? url::Origin::UnsafelyCreateOpaqueOriginWithoutNormalization(
scheme, host, data.port(), url::Origin::Nonce(*nonce_if_opaque))
: url::Origin::UnsafelyCreateTupleOriginWithoutNormalization(
scheme, host, data.port());
if (!creation_result)
return false;
*out = std::move(creation_result.value());
return true;
}
} // namespace mojo
...@@ -5,16 +5,18 @@ ...@@ -5,16 +5,18 @@
#ifndef URL_MOJO_ORIGIN_MOJOM_TRAITS_H_ #ifndef URL_MOJO_ORIGIN_MOJOM_TRAITS_H_
#define URL_MOJO_ORIGIN_MOJOM_TRAITS_H_ #define URL_MOJO_ORIGIN_MOJOM_TRAITS_H_
#include "base/strings/string_piece.h" #include "base/component_export.h"
#include "base/optional.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "mojo/public/cpp/base/unguessable_token_mojom_traits.h" #include "mojo/public/cpp/base/unguessable_token_mojom_traits.h"
#include "url/mojom/origin.mojom.h" #include "url/mojom/origin.mojom-shared.h"
#include "url/origin.h" #include "url/origin.h"
namespace mojo { namespace mojo {
template <> template <>
struct StructTraits<url::mojom::OriginDataView, url::Origin> { struct COMPONENT_EXPORT(URL_MOJOM_TRAITS)
StructTraits<url::mojom::OriginDataView, url::Origin> {
static const std::string& scheme(const url::Origin& r) { static const std::string& scheme(const url::Origin& r) {
return r.GetTupleOrPrecursorTupleIfOpaque().scheme(); return r.GetTupleOrPrecursorTupleIfOpaque().scheme();
} }
...@@ -29,26 +31,7 @@ struct StructTraits<url::mojom::OriginDataView, url::Origin> { ...@@ -29,26 +31,7 @@ struct StructTraits<url::mojom::OriginDataView, url::Origin> {
// TODO(nasko): Consider returning a const reference here. // TODO(nasko): Consider returning a const reference here.
return r.GetNonceForSerialization(); return r.GetNonceForSerialization();
} }
static bool Read(url::mojom::OriginDataView data, url::Origin* out) { static bool Read(url::mojom::OriginDataView data, url::Origin* out);
base::StringPiece scheme, host;
base::Optional<base::UnguessableToken> nonce_if_opaque;
if (!data.ReadScheme(&scheme) || !data.ReadHost(&host) ||
!data.ReadNonceIfOpaque(&nonce_if_opaque))
return false;
base::Optional<url::Origin> creation_result =
nonce_if_opaque
? url::Origin::UnsafelyCreateOpaqueOriginWithoutNormalization(
scheme, host, data.port(),
url::Origin::Nonce(*nonce_if_opaque))
: url::Origin::UnsafelyCreateTupleOriginWithoutNormalization(
scheme, host, data.port());
if (!creation_result)
return false;
*out = std::move(creation_result.value());
return true;
}
}; };
} // namespace mojo } // namespace mojo
......
# 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.
typemaps = [
"//url/mojom/origin.typemap",
"//url/mojom/gurl.typemap",
]
// Copyright 2020 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.
#include "url/mojom/url_gurl_mojom_traits.h"
#include "url/url_constants.h"
namespace mojo {
// static
base::StringPiece StructTraits<url::mojom::UrlDataView, GURL>::url(
const GURL& r) {
if (r.possibly_invalid_spec().length() > url::kMaxURLChars || !r.is_valid()) {
return base::StringPiece();
}
return base::StringPiece(r.possibly_invalid_spec().c_str(),
r.possibly_invalid_spec().length());
}
// static
bool StructTraits<url::mojom::UrlDataView, GURL>::Read(
url::mojom::UrlDataView data,
GURL* out) {
base::StringPiece url_string;
if (!data.ReadUrl(&url_string))
return false;
if (url_string.length() > url::kMaxURLChars)
return false;
*out = GURL(url_string);
if (!url_string.empty() && !out->is_valid())
return false;
return true;
}
} // namespace mojo
...@@ -5,38 +5,19 @@ ...@@ -5,38 +5,19 @@
#ifndef URL_MOJOM_URL_GURL_MOJOM_TRAITS_H_ #ifndef URL_MOJOM_URL_GURL_MOJOM_TRAITS_H_
#define URL_MOJOM_URL_GURL_MOJOM_TRAITS_H_ #define URL_MOJOM_URL_GURL_MOJOM_TRAITS_H_
#include "base/component_export.h"
#include "base/strings/string_piece.h" #include "base/strings/string_piece.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "url/gurl.h" #include "url/gurl.h"
#include "url/mojom/url.mojom.h" #include "url/mojom/url.mojom-shared.h"
#include "url/url_constants.h"
namespace mojo { namespace mojo {
template <> template <>
struct StructTraits<url::mojom::UrlDataView, GURL> { struct COMPONENT_EXPORT(URL_MOJOM_TRAITS)
static base::StringPiece url(const GURL& r) { StructTraits<url::mojom::UrlDataView, GURL> {
if (r.possibly_invalid_spec().length() > url::kMaxURLChars || static base::StringPiece url(const GURL& r);
!r.is_valid()) { static bool Read(url::mojom::UrlDataView data, GURL* out);
return base::StringPiece();
}
return base::StringPiece(r.possibly_invalid_spec().c_str(),
r.possibly_invalid_spec().length());
}
static bool Read(url::mojom::UrlDataView data, GURL* out) {
base::StringPiece url_string;
if (!data.ReadUrl(&url_string))
return false;
if (url_string.length() > url::kMaxURLChars)
return false;
*out = GURL(url_string);
if (!url_string.empty() && !out->is_valid())
return false;
return true;
}
}; };
} // namespace mojo } // namespace mojo
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment