summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/cookie_store/cookie_change_event.cc
diff options
context:
space:
mode:
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.cc71
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