diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/cookie_store/cookie_change_event.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/cookie_store/cookie_change_event.cc | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/modules/cookie_store/cookie_change_event.cc b/chromium/third_party/blink/renderer/modules/cookie_store/cookie_change_event.cc index 24f86d74f53..c91e99e779b 100644 --- a/chromium/third_party/blink/renderer/modules/cookie_store/cookie_change_event.cc +++ b/chromium/third_party/blink/renderer/modules/cookie_store/cookie_change_event.cc @@ -4,6 +4,7 @@ #include "third_party/blink/renderer/modules/cookie_store/cookie_change_event.h" +#include "third_party/blink/renderer/core/dom/dom_time_stamp.h" #include "third_party/blink/renderer/modules/cookie_store/cookie_change_event_init.h" #include "third_party/blink/renderer/modules/cookie_store/cookie_list_item.h" #include "third_party/blink/renderer/modules/event_modules.h" @@ -42,4 +43,74 @@ CookieChangeEvent::CookieChangeEvent(const AtomicString& type, deleted_ = initializer.deleted(); } +namespace { + +String ToCookieListItemSameSite(network::mojom::CookieSameSite same_site) { + switch (same_site) { + case network::mojom::CookieSameSite::STRICT_MODE: + return "strict"; + case network::mojom::CookieSameSite::LAX_MODE: + return "lax"; + case network::mojom::CookieSameSite::NO_RESTRICTION: + return "unrestricted"; + } + + NOTREACHED(); +} + +} // namespace + +// static +void CookieChangeEvent::ToCookieListItem( + const WebCanonicalCookie& canonical_cookie, + bool is_deleted, // True for the information from a cookie deletion event. + CookieListItem& list_item) { + list_item.setName(canonical_cookie.Name()); + list_item.setPath(canonical_cookie.Path()); + list_item.setSecure(canonical_cookie.IsSecure()); + list_item.setSameSite(ToCookieListItemSameSite(canonical_cookie.SameSite())); + + // The domain of host-only cookies is the host name, without a dot (.) prefix. + String cookie_domain = canonical_cookie.Domain(); + if (cookie_domain.StartsWith(".")) + list_item.setDomain(cookie_domain.Substring(1)); + + if (!is_deleted) { + list_item.setValue(canonical_cookie.Value()); + if (!canonical_cookie.ExpiryDate().is_null()) { + list_item.setExpires(ConvertSecondsToDOMTimeStamp( + canonical_cookie.ExpiryDate().ToDoubleT())); + } + } +} + +// static +void CookieChangeEvent::ToEventInfo( + const WebCanonicalCookie& backend_cookie, + ::network::mojom::CookieChangeCause change_cause, + HeapVector<CookieListItem>& changed, + HeapVector<CookieListItem>& deleted) { + switch (change_cause) { + case ::network::mojom::CookieChangeCause::INSERTED: + case ::network::mojom::CookieChangeCause::EXPLICIT: { + CookieListItem& cookie = changed.emplace_back(); + ToCookieListItem(backend_cookie, false /* is_deleted */, cookie); + break; + } + case ::network::mojom::CookieChangeCause::UNKNOWN_DELETION: + case ::network::mojom::CookieChangeCause::EXPIRED: + case ::network::mojom::CookieChangeCause::EVICTED: + case ::network::mojom::CookieChangeCause::EXPIRED_OVERWRITE: { + CookieListItem& cookie = deleted.emplace_back(); + ToCookieListItem(backend_cookie, true /* is_deleted */, cookie); + break; + } + + case ::network::mojom::CookieChangeCause::OVERWRITE: + // A cookie overwrite causes an OVERWRITE (meaning the old cookie was + // deleted) and an INSERTED. + break; + } +} + } // namespace blink |