• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef NET_SHARED_DICTIONARY_SHARED_DICTIONARY_ISOLATION_KEY_H_
6 #define NET_SHARED_DICTIONARY_SHARED_DICTIONARY_ISOLATION_KEY_H_
7 
8 #include <optional>
9 
10 #include "net/base/net_export.h"
11 #include "net/base/schemeful_site.h"
12 #include "url/origin.h"
13 
14 namespace net {
15 class IsolationInfo;
16 class NetworkIsolationKey;
17 
18 // Key used to isolate shared dictionary storages.
19 class NET_EXPORT SharedDictionaryIsolationKey {
20  public:
21   // Creates a SharedDictionaryIsolationKey. Returns nullopt when
22   // `frame_origin` or `top_frame_origin` of `isolation_info` is not set or
23   // opaque, or `nonce` is set.
24   static std::optional<SharedDictionaryIsolationKey> MaybeCreate(
25       const IsolationInfo& isolation_info);
26 
27   // Creates a SharedDictionaryIsolationKey. Returns nullopt when
28   // `frame_origin` or `top_frame_origin` of `network_isolation_key` is not set
29   // or opaque, or `nonce` of `network_isolation_key` is set.
30   static std::optional<SharedDictionaryIsolationKey> MaybeCreate(
31       const NetworkIsolationKey& network_isolation_key,
32       const std::optional<url::Origin>& frame_origin);
33 
34   SharedDictionaryIsolationKey() = default;
35   SharedDictionaryIsolationKey(const url::Origin& frame_origin,
36                                const SchemefulSite& top_frame_site);
37 
frame_origin()38   const url::Origin& frame_origin() const { return frame_origin_; }
top_frame_site()39   const SchemefulSite& top_frame_site() const { return top_frame_site_; }
40 
41   ~SharedDictionaryIsolationKey();
42 
43   SharedDictionaryIsolationKey(const SharedDictionaryIsolationKey& other);
44   SharedDictionaryIsolationKey(SharedDictionaryIsolationKey&& other);
45   SharedDictionaryIsolationKey& operator=(
46       const SharedDictionaryIsolationKey& other);
47   SharedDictionaryIsolationKey& operator=(SharedDictionaryIsolationKey&& other);
48 
49   bool operator==(const SharedDictionaryIsolationKey& other) const {
50     return std::tie(frame_origin_, top_frame_site_) ==
51            std::tie(other.frame_origin_, other.top_frame_site_);
52   }
53   bool operator!=(const SharedDictionaryIsolationKey& other) const {
54     return !(*this == other);
55   }
56   bool operator<(const SharedDictionaryIsolationKey& other) const {
57     return std::tie(frame_origin_, top_frame_site_) <
58            std::tie(other.frame_origin_, other.top_frame_site_);
59   }
60 
61  private:
62   url::Origin frame_origin_;
63   SchemefulSite top_frame_site_;
64 };
65 
66 }  // namespace net
67 
68 #endif  // NET_SHARED_DICTIONARY_SHARED_DICTIONARY_ISOLATION_KEY_H_
69