// Copyright 2021 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. #ifndef NET_COOKIES_SAME_PARTY_CONTEXT_H_ #define NET_COOKIES_SAME_PARTY_CONTEXT_H_ #include "net/base/net_export.h" namespace net { // This struct bundles together a few different notions of same-party-ness. // `context_type()` gives the notion of same-party-ness that Chromium should use // in all cases except metrics; other accessors are just for metrics purposes, // to explore the impact of different definitions of "same-party". class NET_EXPORT SamePartyContext { public: // Computed in URLRequestHttpJob for every cookie access attempt but is only // relevant for SameParty cookies. enum class Type { // The opposite to kSameParty. Should be the default value. kCrossParty = 0, // If the request URL is in the same First-Party Sets as the top-frame site // and each member of the isolation_info.party_context. kSameParty = 1, }; SamePartyContext() = default; explicit SamePartyContext(Type type); SamePartyContext(Type context_type, Type ancestors_for_metrics, Type top_resource_for_metrics); bool operator==(const SamePartyContext& other) const; // How trusted is the current browser environment when it comes to accessing // SameParty cookies. Default is not trusted, e.g. kCrossParty. Type context_type() const { return context_type_; } // We store the type of the SameParty context if we inferred singleton sets, // for the purpose of metrics. Type ancestors_for_metrics_only() const { return ancestors_for_metrics_only_; } // We also store the type of the SameParty context if it were computed using // only the top frame and resource URL and inferred singleton sets, for the // purpose of metrics. Type top_resource_for_metrics_only() const { return top_resource_for_metrics_only_; } // Creates a SamePartyContext that is as permissive as possible. static SamePartyContext MakeInclusive(); private: Type context_type_ = Type::kCrossParty; Type ancestors_for_metrics_only_ = Type::kCrossParty; Type top_resource_for_metrics_only_ = Type::kCrossParty; }; } // namespace net #endif // NET_COOKIES_SAME_PARTY_CONTEXT_H_