xref: /aosp_15_r20/external/cronet/url/mojom/origin_mojom_traits.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2020 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "url/mojom/origin_mojom_traits.h"
6 
7 #include <string_view>
8 
9 namespace mojo {
10 
11 // static
Read(url::mojom::OriginDataView data,url::Origin * out)12 bool StructTraits<url::mojom::OriginDataView, url::Origin>::Read(
13     url::mojom::OriginDataView data,
14     url::Origin* out) {
15   std::string_view scheme, host;
16   std::optional<base::UnguessableToken> nonce_if_opaque;
17   if (!data.ReadScheme(&scheme) || !data.ReadHost(&host) ||
18       !data.ReadNonceIfOpaque(&nonce_if_opaque))
19     return false;
20 
21   std::optional<url::Origin> creation_result =
22       nonce_if_opaque
23           ? url::Origin::UnsafelyCreateOpaqueOriginWithoutNormalization(
24                 scheme, host, data.port(), url::Origin::Nonce(*nonce_if_opaque))
25           : url::Origin::UnsafelyCreateTupleOriginWithoutNormalization(
26                 scheme, host, data.port());
27   if (!creation_result)
28     return false;
29 
30   *out = std::move(creation_result.value());
31   return true;
32 }
33 
34 }  // namespace mojo
35