cookie_access_delegate_impl.cc 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "services/network/cookie_access_delegate_impl.h"
  5. #include <set>
  6. #include "base/callback_forward.h"
  7. #include "base/containers/flat_map.h"
  8. #include "base/containers/flat_set.h"
  9. #include "net/base/schemeful_site.h"
  10. #include "net/cookies/cookie_constants.h"
  11. #include "net/cookies/cookie_util.h"
  12. #include "net/cookies/first_party_set_metadata.h"
  13. #include "services/network/public/cpp/is_potentially_trustworthy.h"
  14. #include "third_party/abseil-cpp/absl/types/optional.h"
  15. namespace network {
  16. CookieAccessDelegateImpl::CookieAccessDelegateImpl(
  17. mojom::CookieAccessDelegateType type,
  18. FirstPartySetsAccessDelegate* const first_party_sets_access_delegate,
  19. const CookieSettings* cookie_settings)
  20. : type_(type),
  21. cookie_settings_(cookie_settings),
  22. first_party_sets_access_delegate_(first_party_sets_access_delegate) {
  23. if (type == mojom::CookieAccessDelegateType::USE_CONTENT_SETTINGS) {
  24. DCHECK(cookie_settings);
  25. }
  26. }
  27. CookieAccessDelegateImpl::~CookieAccessDelegateImpl() = default;
  28. bool CookieAccessDelegateImpl::ShouldTreatUrlAsTrustworthy(
  29. const GURL& url) const {
  30. return IsUrlPotentiallyTrustworthy(url);
  31. }
  32. net::CookieAccessSemantics CookieAccessDelegateImpl::GetAccessSemantics(
  33. const net::CanonicalCookie& cookie) const {
  34. switch (type_) {
  35. case mojom::CookieAccessDelegateType::ALWAYS_LEGACY:
  36. return net::CookieAccessSemantics::LEGACY;
  37. case mojom::CookieAccessDelegateType::ALWAYS_NONLEGACY:
  38. return net::CookieAccessSemantics::NONLEGACY;
  39. case mojom::CookieAccessDelegateType::USE_CONTENT_SETTINGS:
  40. return cookie_settings_->GetCookieAccessSemanticsForDomain(
  41. cookie.Domain());
  42. }
  43. }
  44. bool CookieAccessDelegateImpl::ShouldIgnoreSameSiteRestrictions(
  45. const GURL& url,
  46. const net::SiteForCookies& site_for_cookies) const {
  47. if (cookie_settings_) {
  48. return cookie_settings_->ShouldIgnoreSameSiteRestrictions(url,
  49. site_for_cookies);
  50. }
  51. return false;
  52. }
  53. absl::optional<net::FirstPartySetMetadata>
  54. CookieAccessDelegateImpl::ComputeFirstPartySetMetadataMaybeAsync(
  55. const net::SchemefulSite& site,
  56. const net::SchemefulSite* top_frame_site,
  57. const std::set<net::SchemefulSite>& party_context,
  58. base::OnceCallback<void(net::FirstPartySetMetadata)> callback) const {
  59. if (!first_party_sets_access_delegate_)
  60. return {net::FirstPartySetMetadata()};
  61. return first_party_sets_access_delegate_->ComputeMetadata(
  62. site, top_frame_site, party_context, std::move(callback));
  63. }
  64. absl::optional<FirstPartySetsAccessDelegate::OwnersResult>
  65. CookieAccessDelegateImpl::FindFirstPartySetOwners(
  66. const base::flat_set<net::SchemefulSite>& sites,
  67. base::OnceCallback<void(FirstPartySetsAccessDelegate::OwnersResult)>
  68. callback) const {
  69. if (!first_party_sets_access_delegate_)
  70. return {{}};
  71. return first_party_sets_access_delegate_->FindOwners(sites,
  72. std::move(callback));
  73. }
  74. } // namespace network