Re: [ServiceWorker] Add cookie accessor/setter methods? (#707)

I think this is an opportunity to introduce a decent cookie API. Async, so it can be accessed from worker contexts. I imagine this would be part of the fetch spec, @annevk?

```
partial interface Navigator {
  [SameObject] readonly attribute CookiesContainer cookies;
};

partial interface WorkerNavigator {
  [SameObject] readonly attribute CookiesContainer cookies;
};

[Exposed=(Window,Worker)]
interface CookiesContainer {
  [NewObject] Promise<Cookie> get(USVString name);
  [NewObject] Promise<sequence<Cookie>> getAll();
  [NewObject] Promise<void> set(Cookie cookie);
};

[Constructor(USVString name, USVString value, optional CookieOptions options),
Exposed=(Window,Worker)]
interface Cookie {
  attribute USVString name;
  attribute USVString value;
  attribute USVString domain;
  attribute USVString path;
  attribute Date expires;
  attribute Boolean secure;
}

dictionary CookieOptions {
  USVString domain; // defaults to location.host
  USVString path = "/";
  Date expires;
  Boolean secure = false;
}
```

Usage:

```js
// read cookies value
navigator.cookies.get('hello').then(c => c && c.value).then(value => {
  if (value) {
    // …
  }
});

// create/overwrite cookie value
navigator.cookies.set(new Cookie('hello', 'world', {
  path: '/foo/'
}));

// change cookie value
navigator.cookies.get('viewCount').then(c => c || new Cookie('viewCount', '0')).then(viewCookie => {
  viewCookie.value = Number(viewCookie.value) + 1;
  return navigator.cookies.set(viewCookie);
});

// delete cookie
navigator.cookies.delete('viewCount').then(cookieWasDeleted => {
  // …
});

// output all cookie name/vals as urlencoded string
navigator.cookies.getAll().then(cookies => {
  var params = new URLSearchParams();
  for (var cookie of cookies) {
    params.append(cookie.name, cookies.value);
  }
  return params.toString();
});
```

---
Reply to this email directly or view it on GitHub:
https://github.com/slightlyoff/ServiceWorker/issues/707#issuecomment-110280181

Received on Tuesday, 9 June 2015 08:51:33 UTC