OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 module content.mojom; |
| 6 |
| 7 import "mojo/common/time.mojom"; |
| 8 import "url/mojo/url.mojom"; |
| 9 |
| 10 enum CookiePriority { |
| 11 LOW, |
| 12 MEDIUM, |
| 13 HIGH |
| 14 }; |
| 15 |
| 16 // TODO(rdsmith): Document, if only by reference. |
| 17 enum CookieSameSite { |
| 18 NO_RESTRICTION, |
| 19 LAX_MODE, |
| 20 STRICT_MODE |
| 21 }; |
| 22 |
| 23 enum CookieSameSiteFilter { |
| 24 INCLUDE_STRICT_AND_LAX, |
| 25 INCLUDE_LAX, |
| 26 DO_NOT_INCLUDE |
| 27 }; |
| 28 |
| 29 // Keep defaults here in sync with net/cookies/cookie_options.cc. |
| 30 struct CookieOptions { |
| 31 bool exclude_httponly = true; |
| 32 CookieSameSiteFilter cookie_same_site_filter = DO_NOT_INCLUDE; |
| 33 bool update_access_time = true; |
| 34 mojo.common.mojom.Time? server_time; |
| 35 }; |
| 36 |
| 37 // See net/cookies/canonical_cookie.{h,cc} for documentation. |
| 38 // Keep defaults here in sync with those files. |
| 39 struct CanonicalCookie { |
| 40 string name; |
| 41 string value; |
| 42 string domain; |
| 43 string path; |
| 44 mojo.common.mojom.Time? creation; |
| 45 mojo.common.mojom.Time? expiry; |
| 46 mojo.common.mojom.Time? last_access; |
| 47 bool secure = true; |
| 48 bool httponly = false; |
| 49 CookieSameSite site_restrictions = NO_RESTRICTION; |
| 50 CookiePriority priority = MEDIUM; |
| 51 }; |
| 52 |
| 53 // Keep values here in sync with net::CookieStore::ChangeCause. |
| 54 // (Not typemapped to avoid forcing clients to know about net::CookieStore.) |
| 55 enum CookieChangeCause { |
| 56 // The cookie was inserted. |
| 57 INSERTED, |
| 58 // The cookie was changed directly by a consumer's action. |
| 59 EXPLICIT, |
| 60 // The cookie was deleted, but no more details are known. |
| 61 UNKNOWN_DELETION, |
| 62 // The cookie was automatically removed due to an insert operation that |
| 63 // overwrote it. |
| 64 OVERWRITE, |
| 65 // The cookie was automatically removed as it expired. |
| 66 EXPIRED, |
| 67 // The cookie was automatically evicted during garbage collection. |
| 68 EVICTED, |
| 69 // The cookie was overwritten with an already-expired expiration date. |
| 70 EXPIRED_OVERWRITE |
| 71 }; |
| 72 |
| 73 // Session cookies are cookies that expire at the end of the browser session. |
| 74 // That is represented in canonical cookies by a null expiry time. |
| 75 enum CookieDeletionSessionControl { |
| 76 IGNORE, |
| 77 SESSION, |
| 78 PERSISTENT, |
| 79 }; |
| 80 |
| 81 // All existing filters are ANDed together. I.e. if there is a value |
| 82 // for created_after_time and there's a value for domain_blacklist, |
| 83 // only cookies in the blacklist that have been created after the |
| 84 // specified date would be deleted. A value for |
| 85 // session_control of IGNORE is treated the same as optional values not |
| 86 // being present for the other filters. |
| 87 // Note that a whitelist should be considered a deletion filter for everything |
| 88 // that doesn't match the whitelist; i.e. a whitelist + a created_after_time |
| 89 // will only delete cookies that *aren't* in the whitelist AND *are* created |
| 90 // after the specified time. |
| 91 // If no filters are specified then all cookies will be deleted; this can be |
| 92 // thought of as there being a default "match everything" filter which |
| 93 // is ANDed in with all other filters. |
| 94 struct CookieDeletionFilter { |
| 95 // Delete cookies created after a date. |
| 96 mojo.common.mojom.Time? created_after_time; |
| 97 |
| 98 // Delete cookies created before a date. |
| 99 mojo.common.mojom.Time? created_before_time; |
| 100 |
| 101 // Delete cookies whose domains are in the blacklist. |
| 102 array<string>? domain_blacklist; |
| 103 |
| 104 // Deletes cookies whose domains are not in the whitelist. |
| 105 array<string>? domain_whitelist; |
| 106 |
| 107 // Delete session/persistent cookies. |
| 108 CookieDeletionSessionControl session_control = IGNORE; |
| 109 }; |
| 110 |
| 111 interface CookieChangeNotification { |
| 112 // TODO(rdsmith): Should this be made a batch interface? |
| 113 OnCookieChanged(CanonicalCookie cookie, CookieChangeCause cause); |
| 114 }; |
| 115 |
| 116 interface CookieService { |
| 117 // TODO(rdsmith): Worthwhile specifying a sort order for the getters? |
| 118 |
| 119 // Get all the cookies known to the service. |
| 120 GetAllCookies() => (array<CanonicalCookie> cookies); |
| 121 |
| 122 // Get all cookies for the specified URL and cookie options. |
| 123 GetCookieList(url.mojom.Url url, CookieOptions cookie_options) => |
| 124 (array<CanonicalCookie> cookies); |
| 125 |
| 126 // Set a cookie. |secure_source| indicates whether existing secure |
| 127 // cookies can be overwritten (secure cookies may be created from a |
| 128 // non-secure source). |modify_http_only| indicates whether http_only |
| 129 // cookies may be overwritten. |
| 130 SetCanonicalCookie( |
| 131 CanonicalCookie cookie, bool secure_source, bool modify_http_only) => |
| 132 (bool success); |
| 133 |
| 134 // Delete a set of cookies matching the passed filter. |
| 135 // To delete a single cookie, use SetCanonicalCookie with an expiry |
| 136 // time in the past. |
| 137 // Returns the number of cookies deleted. |
| 138 DeleteCookies(CookieDeletionFilter filter) => (uint32 num_deleted); |
| 139 |
| 140 // Request a CookieChangeNotification interface over which notification |
| 141 // for cookie changes can be received. When the specified cookie |
| 142 // associated with the domain/path specified in the URL changes, a |
| 143 // notification will be sent to the returned interface. |
| 144 // |
| 145 // TODO(rdsmith): Should this have a filter to register for a lot of |
| 146 // notifications at once? Maybe combine with the deletion filter? |
| 147 RequestNotification( |
| 148 url.mojom.Url url, |
| 149 string name) => (CookieChangeNotification& notification_interface); |
| 150 |
| 151 // Clone the interface for use somewhere else. After this call, |
| 152 // requests to the same implementation may be posted to the other side |
| 153 // of the pipe new_interface was configured on. |
| 154 CloneInterface(CookieService& new_interface); |
| 155 }; |
OLD | NEW |