| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.web; |
| |
| // RFC6265 specifies that implementations must support at least 4096 of data |
| // per-cookie (including name, value & attributes) but does not specify an |
| // upper-bound on their size. |
| alias CookieName = string:MAX; |
| |
| /// Provides methods for monitoring and accessing browser cookie state. |
| protocol CookieManager { |
| /// Observe changes to all cookies named `name` that would be sent in a request to `url`. |
| /// |
| /// If neither `url` nor `name` are set then all cookies are observed. If only `url` is set |
| /// then all cookies for that URL are observed. If both are set then only cookies matching both |
| /// fields are observed. |
| /// |
| /// `changes` iterates over a stream of cookie changes. Additions or updates are expressed as |
| /// complete cookies, while deletions are expressed as cookies with no `value` set. |
| ObserveCookieChanges(resource struct { |
| url Url:optional; |
| name CookieName:optional; |
| changes server_end:CookiesIterator; |
| }); |
| |
| /// Returns a list of Cookies, optionally limited to those matching `url`, and optionally |
| /// `name`. `cookies` iterates over the matching cookies, including their `value`s. |
| GetCookieList(resource struct { |
| url Url:optional; |
| name CookieName:optional; |
| cookies server_end:CookiesIterator; |
| }); |
| }; |
| |
| /// Used to iterator over a set of cookies, or a stream of changes to cookies. |
| protocol CookiesIterator { |
| /// Fetches the next batch of cookies, or of changes to cookies. |
| /// RFC6265 does not specify an upper-bound on the number of cookies which |
| /// may be stored. |
| GetNext() -> (resource struct { |
| changed_cookies vector<Cookie>:MAX; |
| }); |
| }; |
| |
| type CookieId = table { |
| /// An RFC2616 "token" chosen by the site to identify the cookie. |
| 1: name CookieName; |
| |
| /// The RFC1034 "subdomain" to which this cookie is scoped. |
| /// e.g. "example.com" allows access from all *.example.com sub-domains. |
| 2: domain string:MAX_HOST_LENGTH; |
| |
| /// The URL "path" prefix to which this cookie is scoped. |
| /// e.g. "/" allows access from all paths. |
| 3: path string:MAX_URL_LENGTH; |
| }; |
| |
| type Cookie = resource table { |
| /// A table with fields to identify a cookie. |
| 1: id CookieId; |
| |
| /// The cookie value. |
| /// RFC6265 does not specify an upper limit on cookie size, but recommends |
| /// that at least 4096 bytes are supported. |
| 2: value string:MAX; |
| }; |