// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_COOKIE_SETTINGS_BASE_H_ #define COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_COOKIE_SETTINGS_BASE_H_ #include <optional> #include <string> #include "base/containers/fixed_flat_set.h" #include "components/content_settings/core/common/content_settings.h" #include "net/cookies/cookie_constants.h" #include "net/cookies/cookie_setting_override.h" #include "net/cookies/cookie_util.h" #include "net/cookies/site_for_cookies.h" #include "third_party/abseil-cpp/absl/types/variant.h" namespace net { class SiteForCookies; } // namespace net namespace url { class Origin; } // namespace url namespace content_settings { // Many CookieSettings methods handle the parameters |url|, |site_for_cookies| // |top_frame_origin| and |first_party_url|. // // |url| is the URL of the requested resource. // |site_for_cookies| is usually the URL shown in the omnibox but can also be // empty, e.g. for subresource loads initiated from cross-site iframes, and is // used to determine if a request is done in a third-party context. // |top_frame_origin| is the origin shown in the omnibox. // // Example: // https://a.com/index.html // <html> // <body> // <iframe href="https://b.com/frame.html"> // #document // <html> // <body> // <img href="https://a.com/img.jpg> // <img href="https://b.com/img.jpg> // <img href="https://c.com/img.jpg> // </body> // </html> // </iframe> // </body> // </html> // // When each of these resources get fetched, |top_frame_origin| will always be // "https://a.com" and |site_for_cookies| is set the following: // https://a.com/index.html -> https://a.com/ (1p request) // https://b.com/frame.html -> https://a.com/ (3p request) // https://a.com/img.jpg -> <empty-url> (treated as 3p request) // https://b.com/img.jpg -> <empty-url> (3p because from cross site iframe) // https://c.com/img.jpg -> <empty-url> (3p request in cross site iframe) // // Content settings can be used to allow or block access to cookies. // When third-party cookies are blocked, an ALLOW setting will give access to // cookies in third-party contexts. // The primary pattern of each setting is matched against |url|. // The secondary pattern is matched against |top_frame_origin|. // // Some methods only take |url| and |first_party_url|. For |first_party_url|, // clients either pass a value that is like |site_for_cookies| or // |top_frame_origin|. This is done inconsistently and needs to be fixed. class CookieSettingsBase { … }; } // namespace content_settings #endif // COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_COOKIE_SETTINGS_BASE_H_