xref: /aosp_15_r20/external/cronet/net/extras/shared_dictionary/shared_dictionary_isolation_key.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2023 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 "net/extras/shared_dictionary/shared_dictionary_isolation_key.h"
6 
7 #include "net/base/isolation_info.h"
8 #include "net/base/network_isolation_key.h"
9 
10 namespace net {
11 
12 // static
13 std::optional<SharedDictionaryIsolationKey>
MaybeCreate(const net::IsolationInfo & isolation_info)14 SharedDictionaryIsolationKey::MaybeCreate(
15     const net::IsolationInfo& isolation_info) {
16   if (!isolation_info.frame_origin() ||
17       isolation_info.frame_origin()->opaque() ||
18       !isolation_info.top_frame_origin() ||
19       isolation_info.top_frame_origin()->opaque() ||
20       isolation_info.nonce().has_value()) {
21     return std::nullopt;
22   }
23   return SharedDictionaryIsolationKey(
24       *isolation_info.frame_origin(),
25       net::SchemefulSite(*isolation_info.top_frame_origin()));
26 }
27 
28 // static
29 std::optional<SharedDictionaryIsolationKey>
MaybeCreate(const NetworkIsolationKey & network_isolation_key,const std::optional<url::Origin> & frame_origin)30 SharedDictionaryIsolationKey::MaybeCreate(
31     const NetworkIsolationKey& network_isolation_key,
32     const std::optional<url::Origin>& frame_origin) {
33   if (!frame_origin || frame_origin->opaque() ||
34       !network_isolation_key.GetTopFrameSite() ||
35       network_isolation_key.GetTopFrameSite()->opaque() ||
36       network_isolation_key.GetNonce().has_value()) {
37     return std::nullopt;
38   }
39   return SharedDictionaryIsolationKey(*frame_origin,
40                                       *network_isolation_key.GetTopFrameSite());
41 }
42 
SharedDictionaryIsolationKey(const url::Origin & frame_origin,const net::SchemefulSite & top_frame_site)43 SharedDictionaryIsolationKey::SharedDictionaryIsolationKey(
44     const url::Origin& frame_origin,
45     const net::SchemefulSite& top_frame_site)
46     : frame_origin_(frame_origin), top_frame_site_(top_frame_site) {
47   CHECK(!frame_origin.opaque());
48   CHECK(!top_frame_site.opaque());
49 }
50 
51 SharedDictionaryIsolationKey::~SharedDictionaryIsolationKey() = default;
52 
53 SharedDictionaryIsolationKey::SharedDictionaryIsolationKey(
54     const SharedDictionaryIsolationKey& other) = default;
55 
56 SharedDictionaryIsolationKey::SharedDictionaryIsolationKey(
57     SharedDictionaryIsolationKey&& other) = default;
58 
59 SharedDictionaryIsolationKey& SharedDictionaryIsolationKey::operator=(
60     const SharedDictionaryIsolationKey& other) = default;
61 
62 SharedDictionaryIsolationKey& SharedDictionaryIsolationKey::operator=(
63     SharedDictionaryIsolationKey&& other) = default;
64 
65 }  // namespace net
66