// https://github.com/WICG/cookie-store/blob/gh-pages/explainer.md

dictionary CookieListItem {
  USVString name;
  USVString value;
};

typedef sequence<CookieListItem> CookieList;

dictionary CookieChangeEventInit : EventInit {
  CookieList changed;
  CookieList deleted;
};

[
  Exposed=(ServiceWorker,Window),
  Constructor(DOMString type, optional CookieChangeEventInit eventInitDict)
] interface CookieChangeEvent : Event {
  readonly attribute CookieList changed;
  readonly attribute CookieList deleted;
};

enum CookieMatchType {
  "equals",
  "startsWith"
};

dictionary CookieStoreGetOptions {
  USVString name;
  USVString url;
  CookieMatchType matchType = "equals";
};

dictionary CookieStoreSetOptions {
  USVString name;
  USVString value;
  DOMTimeStamp? expires = null;
  USVString domain;
  USVString path = "/";
  boolean? secure;
  boolean httpOnly = false;
};

[
  Exposed=(ServiceWorker,Window)
] interface CookieStore : EventTarget {
  Promise<CookieList?> getAll(USVString name, optional CookieStoreGetOptions options);
  Promise<CookieList?> getAll(optional CookieStoreGetOptions options);

  Promise<CookieListItem?> get(USVString name, optional CookieStoreGetOptions options);
  Promise<CookieListItem?> get(optional CookieStoreGetOptions options);

  Promise<boolean> has(USVString name, optional CookieStoreGetOptions options);
  Promise<boolean> has(optional CookieStoreGetOptions options);

  Promise<void> set(USVString name, USVString value, optional CookieStoreSetOptions options);
  Promise<void> set(CookieStoreSetOptions options);

  Promise<void> delete(USVString name, optional CookieStoreSetOptions options);
  Promise<void> delete(CookieStoreSetOptions options);

  attribute EventHandler onchange;
};

partial interface Window {
  [Replaceable, SameObject] readonly attribute CookieStore cookieStore;
};

partial interface ServiceWorkerGlobalScope {
  [Replaceable, SameObject] readonly attribute CookieStore cookieStore;
};
