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)12bool 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