xref: /aosp_15_r20/external/cronet/net/cookies/cookie_constants.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef NET_COOKIES_COOKIE_CONSTANTS_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_COOKIES_COOKIE_CONSTANTS_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
11*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
12*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker namespace net {
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker // The time threshold for considering a cookie "short-lived" for the purposes of
17*6777b538SAndroid Build Coastguard Worker // allowing unsafe methods for unspecified-SameSite cookies defaulted into Lax.
18*6777b538SAndroid Build Coastguard Worker NET_EXPORT extern const base::TimeDelta kLaxAllowUnsafeMaxAge;
19*6777b538SAndroid Build Coastguard Worker // The short version of the above time threshold, to be used for tests.
20*6777b538SAndroid Build Coastguard Worker NET_EXPORT extern const base::TimeDelta kShortLaxAllowUnsafeMaxAge;
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker enum CookiePriority {
23*6777b538SAndroid Build Coastguard Worker   COOKIE_PRIORITY_LOW     = 0,
24*6777b538SAndroid Build Coastguard Worker   COOKIE_PRIORITY_MEDIUM  = 1,
25*6777b538SAndroid Build Coastguard Worker   COOKIE_PRIORITY_HIGH    = 2,
26*6777b538SAndroid Build Coastguard Worker   COOKIE_PRIORITY_DEFAULT = COOKIE_PRIORITY_MEDIUM
27*6777b538SAndroid Build Coastguard Worker };
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker // See https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00
30*6777b538SAndroid Build Coastguard Worker // and https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis for
31*6777b538SAndroid Build Coastguard Worker // information about same site cookie restrictions.
32*6777b538SAndroid Build Coastguard Worker // These values are allowed for the SameSite field of a cookie. They mostly
33*6777b538SAndroid Build Coastguard Worker // correspond to CookieEffectiveSameSite values.
34*6777b538SAndroid Build Coastguard Worker // Note: Don't renumber, as these values are persisted to a database and
35*6777b538SAndroid Build Coastguard Worker // recorded to histograms.
36*6777b538SAndroid Build Coastguard Worker enum class CookieSameSite {
37*6777b538SAndroid Build Coastguard Worker   UNSPECIFIED = -1,
38*6777b538SAndroid Build Coastguard Worker   NO_RESTRICTION = 0,
39*6777b538SAndroid Build Coastguard Worker   LAX_MODE = 1,
40*6777b538SAndroid Build Coastguard Worker   STRICT_MODE = 2,
41*6777b538SAndroid Build Coastguard Worker   // Reserved 3 (was EXTENDED_MODE), next number is 4.
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   // Keep last, used for histograms.
44*6777b538SAndroid Build Coastguard Worker   kMaxValue = STRICT_MODE
45*6777b538SAndroid Build Coastguard Worker };
46*6777b538SAndroid Build Coastguard Worker 
47*6777b538SAndroid Build Coastguard Worker // The same as CookieSameSite except that the enums start at 0 to support
48*6777b538SAndroid Build Coastguard Worker // standard (non-sparse) enum histograms. Standard enum histograms do not
49*6777b538SAndroid Build Coastguard Worker // support negative numbers and while sparse histograms do they have
50*6777b538SAndroid Build Coastguard Worker // performance penalties that we want to avoid.
51*6777b538SAndroid Build Coastguard Worker enum class CookieSameSiteForMetrics {
52*6777b538SAndroid Build Coastguard Worker   UNSPECIFIED = 0,
53*6777b538SAndroid Build Coastguard Worker   NO_RESTRICTION = 1,
54*6777b538SAndroid Build Coastguard Worker   LAX_MODE = 2,
55*6777b538SAndroid Build Coastguard Worker   STRICT_MODE = 3,
56*6777b538SAndroid Build Coastguard Worker 
57*6777b538SAndroid Build Coastguard Worker   // Keep last, used for histograms.
58*6777b538SAndroid Build Coastguard Worker   kMaxValue = STRICT_MODE
59*6777b538SAndroid Build Coastguard Worker };
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker // These are the enforcement modes that may be applied to a cookie when deciding
62*6777b538SAndroid Build Coastguard Worker // inclusion/exclusion. They mostly correspond to CookieSameSite values.
63*6777b538SAndroid Build Coastguard Worker // Keep in sync with enums.xml.
64*6777b538SAndroid Build Coastguard Worker enum class CookieEffectiveSameSite {
65*6777b538SAndroid Build Coastguard Worker   NO_RESTRICTION = 0,
66*6777b538SAndroid Build Coastguard Worker   LAX_MODE = 1,
67*6777b538SAndroid Build Coastguard Worker   STRICT_MODE = 2,
68*6777b538SAndroid Build Coastguard Worker   LAX_MODE_ALLOW_UNSAFE = 3,
69*6777b538SAndroid Build Coastguard Worker   // Undefined is used when no value applies for the object as there is no
70*6777b538SAndroid Build Coastguard Worker   // valid cookie object to evaluate on.
71*6777b538SAndroid Build Coastguard Worker   UNDEFINED = 4,
72*6777b538SAndroid Build Coastguard Worker 
73*6777b538SAndroid Build Coastguard Worker   // Keep last, used for histograms.
74*6777b538SAndroid Build Coastguard Worker   COUNT
75*6777b538SAndroid Build Coastguard Worker };
76*6777b538SAndroid Build Coastguard Worker 
77*6777b538SAndroid Build Coastguard Worker // Used for histograms only. Do not renumber. Keep in sync with enums.xml.
78*6777b538SAndroid Build Coastguard Worker enum class CookieSameSiteString {
79*6777b538SAndroid Build Coastguard Worker   // No SameSite attribute is present.
80*6777b538SAndroid Build Coastguard Worker   kUnspecified = 0,
81*6777b538SAndroid Build Coastguard Worker   // The SameSite attribute is present but has no value.
82*6777b538SAndroid Build Coastguard Worker   kEmptyString = 1,
83*6777b538SAndroid Build Coastguard Worker   // The SameSite attribute has an unrecognized value.
84*6777b538SAndroid Build Coastguard Worker   kUnrecognized = 2,
85*6777b538SAndroid Build Coastguard Worker   // The SameSite attribute has a recognized value.
86*6777b538SAndroid Build Coastguard Worker   kLax = 3,
87*6777b538SAndroid Build Coastguard Worker   kStrict = 4,
88*6777b538SAndroid Build Coastguard Worker   kNone = 5,
89*6777b538SAndroid Build Coastguard Worker   kExtended = 6,  // Deprecated, kept for metrics only.
90*6777b538SAndroid Build Coastguard Worker 
91*6777b538SAndroid Build Coastguard Worker   // Keep last, update if adding new value.
92*6777b538SAndroid Build Coastguard Worker   kMaxValue = kExtended
93*6777b538SAndroid Build Coastguard Worker };
94*6777b538SAndroid Build Coastguard Worker 
95*6777b538SAndroid Build Coastguard Worker // What SameSite rules to apply when determining whether access to a particular
96*6777b538SAndroid Build Coastguard Worker // cookie is allowed.
97*6777b538SAndroid Build Coastguard Worker //
98*6777b538SAndroid Build Coastguard Worker // At present, NONLEGACY semantics enforces the following:
99*6777b538SAndroid Build Coastguard Worker //  1) SameSite=Lax by default: A cookie that does not specify a SameSite
100*6777b538SAndroid Build Coastguard Worker //     attribute will be treated as if it were Lax (except allowing unsafe
101*6777b538SAndroid Build Coastguard Worker //     top-level requests for 2 minutes after its creation; see
102*6777b538SAndroid Build Coastguard Worker //     "lax-allowing-unsafe" or "Lax+POST").
103*6777b538SAndroid Build Coastguard Worker //  2) SameSite=None requires Secure: A cookie specifying SameSite=None must
104*6777b538SAndroid Build Coastguard Worker //     also specify Secure.
105*6777b538SAndroid Build Coastguard Worker //  3) Schemeful Same-Site: When determining what requests are considered
106*6777b538SAndroid Build Coastguard Worker //     same-site or cross-site, a "site" is considered to be a registrable
107*6777b538SAndroid Build Coastguard Worker //     domain with a scheme (as opposed to just a registrable domain).
108*6777b538SAndroid Build Coastguard Worker //
109*6777b538SAndroid Build Coastguard Worker // When the semantics is LEGACY, these three behaviors are disabled. When the
110*6777b538SAndroid Build Coastguard Worker // semantics is UNKNOWN, the behavior may or may not depend on base::Features.
111*6777b538SAndroid Build Coastguard Worker enum class CookieAccessSemantics {
112*6777b538SAndroid Build Coastguard Worker   // Has not been checked yet or there is no way to check.
113*6777b538SAndroid Build Coastguard Worker   UNKNOWN = -1,
114*6777b538SAndroid Build Coastguard Worker   // Has been checked and the cookie should *not* be subject to legacy access
115*6777b538SAndroid Build Coastguard Worker   // rules.
116*6777b538SAndroid Build Coastguard Worker   NONLEGACY = 0,
117*6777b538SAndroid Build Coastguard Worker   // Has been checked and the cookie should be subject to legacy access rules.
118*6777b538SAndroid Build Coastguard Worker   LEGACY,
119*6777b538SAndroid Build Coastguard Worker };
120*6777b538SAndroid Build Coastguard Worker 
121*6777b538SAndroid Build Coastguard Worker // What scheme was used in the setting of a cookie.
122*6777b538SAndroid Build Coastguard Worker // Do not renumber.
123*6777b538SAndroid Build Coastguard Worker enum class CookieSourceScheme {
124*6777b538SAndroid Build Coastguard Worker   kUnset = 0,
125*6777b538SAndroid Build Coastguard Worker   kNonSecure = 1,
126*6777b538SAndroid Build Coastguard Worker   kSecure = 2,
127*6777b538SAndroid Build Coastguard Worker 
128*6777b538SAndroid Build Coastguard Worker   kMaxValue = kSecure  // Keep as the last value.
129*6777b538SAndroid Build Coastguard Worker };
130*6777b538SAndroid Build Coastguard Worker 
131*6777b538SAndroid Build Coastguard Worker enum class CookiePort {
132*6777b538SAndroid Build Coastguard Worker   // DO NOT REORDER OR RENUMBER. These are used for histograms.
133*6777b538SAndroid Build Coastguard Worker 
134*6777b538SAndroid Build Coastguard Worker   // Potentially interesting port values for cookies for use with histograms.
135*6777b538SAndroid Build Coastguard Worker 
136*6777b538SAndroid Build Coastguard Worker   // Not a port explicitly listed below, including invalid ports (-1, 65536,
137*6777b538SAndroid Build Coastguard Worker   // etc).
138*6777b538SAndroid Build Coastguard Worker   kOther = 0,
139*6777b538SAndroid Build Coastguard Worker   // HTTP
140*6777b538SAndroid Build Coastguard Worker   k80 = 1,
141*6777b538SAndroid Build Coastguard Worker   k81 = 2,
142*6777b538SAndroid Build Coastguard Worker   k82 = 3,
143*6777b538SAndroid Build Coastguard Worker   k83 = 4,
144*6777b538SAndroid Build Coastguard Worker   k84 = 5,
145*6777b538SAndroid Build Coastguard Worker   k85 = 6,
146*6777b538SAndroid Build Coastguard Worker   // HTTPS
147*6777b538SAndroid Build Coastguard Worker   k443 = 7,
148*6777b538SAndroid Build Coastguard Worker   k444 = 8,
149*6777b538SAndroid Build Coastguard Worker   k445 = 9,
150*6777b538SAndroid Build Coastguard Worker   k446 = 10,
151*6777b538SAndroid Build Coastguard Worker   k447 = 11,
152*6777b538SAndroid Build Coastguard Worker   k448 = 12,
153*6777b538SAndroid Build Coastguard Worker   // JS Framework
154*6777b538SAndroid Build Coastguard Worker   k3000 = 13,
155*6777b538SAndroid Build Coastguard Worker   k3001 = 14,
156*6777b538SAndroid Build Coastguard Worker   k3002 = 15,
157*6777b538SAndroid Build Coastguard Worker   k3003 = 16,
158*6777b538SAndroid Build Coastguard Worker   k3004 = 17,
159*6777b538SAndroid Build Coastguard Worker   k3005 = 18,
160*6777b538SAndroid Build Coastguard Worker   // JS Framework
161*6777b538SAndroid Build Coastguard Worker   k4200 = 19,
162*6777b538SAndroid Build Coastguard Worker   k4201 = 20,
163*6777b538SAndroid Build Coastguard Worker   k4202 = 21,
164*6777b538SAndroid Build Coastguard Worker   k4203 = 22,
165*6777b538SAndroid Build Coastguard Worker   k4204 = 23,
166*6777b538SAndroid Build Coastguard Worker   k4205 = 24,
167*6777b538SAndroid Build Coastguard Worker   // JS Framework
168*6777b538SAndroid Build Coastguard Worker   k5000 = 25,
169*6777b538SAndroid Build Coastguard Worker   k5001 = 26,
170*6777b538SAndroid Build Coastguard Worker   k5002 = 27,
171*6777b538SAndroid Build Coastguard Worker   k5003 = 28,
172*6777b538SAndroid Build Coastguard Worker   k5004 = 29,
173*6777b538SAndroid Build Coastguard Worker   k5005 = 30,
174*6777b538SAndroid Build Coastguard Worker   // Common Dev Ports
175*6777b538SAndroid Build Coastguard Worker   k7000 = 31,
176*6777b538SAndroid Build Coastguard Worker   k7001 = 32,
177*6777b538SAndroid Build Coastguard Worker   k7002 = 33,
178*6777b538SAndroid Build Coastguard Worker   k7003 = 34,
179*6777b538SAndroid Build Coastguard Worker   k7004 = 35,
180*6777b538SAndroid Build Coastguard Worker   k7005 = 36,
181*6777b538SAndroid Build Coastguard Worker   // HTTP
182*6777b538SAndroid Build Coastguard Worker   k8000 = 37,
183*6777b538SAndroid Build Coastguard Worker   k8001 = 38,
184*6777b538SAndroid Build Coastguard Worker   k8002 = 39,
185*6777b538SAndroid Build Coastguard Worker   k8003 = 40,
186*6777b538SAndroid Build Coastguard Worker   k8004 = 41,
187*6777b538SAndroid Build Coastguard Worker   k8005 = 42,
188*6777b538SAndroid Build Coastguard Worker   // HTTP
189*6777b538SAndroid Build Coastguard Worker   k8080 = 43,
190*6777b538SAndroid Build Coastguard Worker   k8081 = 44,
191*6777b538SAndroid Build Coastguard Worker   k8082 = 45,
192*6777b538SAndroid Build Coastguard Worker   k8083 = 46,
193*6777b538SAndroid Build Coastguard Worker   k8084 = 47,
194*6777b538SAndroid Build Coastguard Worker   k8085 = 48,
195*6777b538SAndroid Build Coastguard Worker   // HTTP
196*6777b538SAndroid Build Coastguard Worker   k8090 = 49,
197*6777b538SAndroid Build Coastguard Worker   k8091 = 50,
198*6777b538SAndroid Build Coastguard Worker   k8092 = 51,
199*6777b538SAndroid Build Coastguard Worker   k8093 = 52,
200*6777b538SAndroid Build Coastguard Worker   k8094 = 53,
201*6777b538SAndroid Build Coastguard Worker   k8095 = 54,
202*6777b538SAndroid Build Coastguard Worker   // JS Framework
203*6777b538SAndroid Build Coastguard Worker   k8100 = 55,
204*6777b538SAndroid Build Coastguard Worker   k8101 = 56,
205*6777b538SAndroid Build Coastguard Worker   k8102 = 57,
206*6777b538SAndroid Build Coastguard Worker   k8103 = 58,
207*6777b538SAndroid Build Coastguard Worker   k8104 = 59,
208*6777b538SAndroid Build Coastguard Worker   k8105 = 60,
209*6777b538SAndroid Build Coastguard Worker   // JS Framework
210*6777b538SAndroid Build Coastguard Worker   k8200 = 61,
211*6777b538SAndroid Build Coastguard Worker   k8201 = 62,
212*6777b538SAndroid Build Coastguard Worker   k8202 = 63,
213*6777b538SAndroid Build Coastguard Worker   k8203 = 64,
214*6777b538SAndroid Build Coastguard Worker   k8204 = 65,
215*6777b538SAndroid Build Coastguard Worker   k8205 = 66,
216*6777b538SAndroid Build Coastguard Worker   // HTTP(S)
217*6777b538SAndroid Build Coastguard Worker   k8443 = 67,
218*6777b538SAndroid Build Coastguard Worker   k8444 = 68,
219*6777b538SAndroid Build Coastguard Worker   k8445 = 69,
220*6777b538SAndroid Build Coastguard Worker   k8446 = 70,
221*6777b538SAndroid Build Coastguard Worker   k8447 = 71,
222*6777b538SAndroid Build Coastguard Worker   k8448 = 72,
223*6777b538SAndroid Build Coastguard Worker   // HTTP
224*6777b538SAndroid Build Coastguard Worker   k8888 = 73,
225*6777b538SAndroid Build Coastguard Worker   k8889 = 74,
226*6777b538SAndroid Build Coastguard Worker   k8890 = 75,
227*6777b538SAndroid Build Coastguard Worker   k8891 = 76,
228*6777b538SAndroid Build Coastguard Worker   k8892 = 77,
229*6777b538SAndroid Build Coastguard Worker   k8893 = 78,
230*6777b538SAndroid Build Coastguard Worker   // Common Dev Ports
231*6777b538SAndroid Build Coastguard Worker   k9000 = 79,
232*6777b538SAndroid Build Coastguard Worker   k9001 = 80,
233*6777b538SAndroid Build Coastguard Worker   k9002 = 81,
234*6777b538SAndroid Build Coastguard Worker   k9003 = 82,
235*6777b538SAndroid Build Coastguard Worker   k9004 = 83,
236*6777b538SAndroid Build Coastguard Worker   k9005 = 84,
237*6777b538SAndroid Build Coastguard Worker   // HTTP
238*6777b538SAndroid Build Coastguard Worker   k9090 = 85,
239*6777b538SAndroid Build Coastguard Worker   k9091 = 86,
240*6777b538SAndroid Build Coastguard Worker   k9092 = 87,
241*6777b538SAndroid Build Coastguard Worker   k9093 = 88,
242*6777b538SAndroid Build Coastguard Worker   k9094 = 89,
243*6777b538SAndroid Build Coastguard Worker   k9095 = 90,
244*6777b538SAndroid Build Coastguard Worker 
245*6777b538SAndroid Build Coastguard Worker   // Keep as last value.
246*6777b538SAndroid Build Coastguard Worker   kMaxValue = k9095
247*6777b538SAndroid Build Coastguard Worker };
248*6777b538SAndroid Build Coastguard Worker 
249*6777b538SAndroid Build Coastguard Worker // Scheme or trustworthiness used to access or set a cookie.
250*6777b538SAndroid Build Coastguard Worker // "potentially trustworthy" here refers to the notion from
251*6777b538SAndroid Build Coastguard Worker // https://www.w3.org/TR/powerful-features/#is-origin-trustworthy
252*6777b538SAndroid Build Coastguard Worker enum class CookieAccessScheme {
253*6777b538SAndroid Build Coastguard Worker   // Scheme was non-cryptographic. The non-cryptographic source origin was
254*6777b538SAndroid Build Coastguard Worker   // either not potentially trustworthy, or its potential
255*6777b538SAndroid Build Coastguard Worker   // trustworthiness wasn't checked.
256*6777b538SAndroid Build Coastguard Worker   kNonCryptographic = 0,
257*6777b538SAndroid Build Coastguard Worker   // Scheme was cryptographic (https or wss). This implies potentially
258*6777b538SAndroid Build Coastguard Worker   // trustworthy.
259*6777b538SAndroid Build Coastguard Worker   kCryptographic = 1,
260*6777b538SAndroid Build Coastguard Worker   // Source was non-cryptographic, but URL was otherwise potentially
261*6777b538SAndroid Build Coastguard Worker   // trustworthy.
262*6777b538SAndroid Build Coastguard Worker   kTrustworthy = 2,
263*6777b538SAndroid Build Coastguard Worker 
264*6777b538SAndroid Build Coastguard Worker   kMaxValue = kTrustworthy  // Keep as the last value.
265*6777b538SAndroid Build Coastguard Worker };
266*6777b538SAndroid Build Coastguard Worker 
267*6777b538SAndroid Build Coastguard Worker // Used to populate a histogram that measures which schemes are used to set
268*6777b538SAndroid Build Coastguard Worker // cookies and how frequently. Many of these probably won't/can't be used,
269*6777b538SAndroid Build Coastguard Worker // but we know about them and there's no harm in including them.
270*6777b538SAndroid Build Coastguard Worker //
271*6777b538SAndroid Build Coastguard Worker // Do not reorder or renumber. Used for metrics.
272*6777b538SAndroid Build Coastguard Worker enum class CookieSourceSchemeName {
273*6777b538SAndroid Build Coastguard Worker   kOther = 0,  // Catch all for any other schemes that may be used.
274*6777b538SAndroid Build Coastguard Worker   kAboutBlankURL = 1,
275*6777b538SAndroid Build Coastguard Worker   kAboutSrcdocURL = 2,
276*6777b538SAndroid Build Coastguard Worker   kAboutBlankPath = 3,
277*6777b538SAndroid Build Coastguard Worker   kAboutSrcdocPath = 4,
278*6777b538SAndroid Build Coastguard Worker   kAboutScheme = 5,
279*6777b538SAndroid Build Coastguard Worker   kBlobScheme = 6,
280*6777b538SAndroid Build Coastguard Worker   kContentScheme = 7,
281*6777b538SAndroid Build Coastguard Worker   kContentIDScheme = 8,
282*6777b538SAndroid Build Coastguard Worker   kDataScheme = 9,
283*6777b538SAndroid Build Coastguard Worker   kFileScheme = 10,
284*6777b538SAndroid Build Coastguard Worker   kFileSystemScheme = 11,
285*6777b538SAndroid Build Coastguard Worker   kFtpScheme = 12,
286*6777b538SAndroid Build Coastguard Worker   kHttpScheme = 13,
287*6777b538SAndroid Build Coastguard Worker   kHttpsScheme = 14,
288*6777b538SAndroid Build Coastguard Worker   kJavaScriptScheme = 15,
289*6777b538SAndroid Build Coastguard Worker   kMailToScheme = 16,
290*6777b538SAndroid Build Coastguard Worker   kQuicTransportScheme_Obsoleted = 17,
291*6777b538SAndroid Build Coastguard Worker   kTelScheme = 18,
292*6777b538SAndroid Build Coastguard Worker   kUrnScheme = 19,
293*6777b538SAndroid Build Coastguard Worker   kWsScheme = 20,
294*6777b538SAndroid Build Coastguard Worker   kWssScheme = 21,
295*6777b538SAndroid Build Coastguard Worker   kChromeExtensionScheme = 22,
296*6777b538SAndroid Build Coastguard Worker   kMaxValue = kChromeExtensionScheme
297*6777b538SAndroid Build Coastguard Worker };
298*6777b538SAndroid Build Coastguard Worker 
299*6777b538SAndroid Build Coastguard Worker // Returns the Set-Cookie header priority token corresponding to |priority|.
300*6777b538SAndroid Build Coastguard Worker NET_EXPORT std::string CookiePriorityToString(CookiePriority priority);
301*6777b538SAndroid Build Coastguard Worker 
302*6777b538SAndroid Build Coastguard Worker // Converts the Set-Cookie header priority token |priority| to a CookiePriority.
303*6777b538SAndroid Build Coastguard Worker // Defaults to COOKIE_PRIORITY_DEFAULT for empty or unrecognized strings.
304*6777b538SAndroid Build Coastguard Worker NET_EXPORT CookiePriority StringToCookiePriority(const std::string& priority);
305*6777b538SAndroid Build Coastguard Worker 
306*6777b538SAndroid Build Coastguard Worker // Returns a string corresponding to the value of the |same_site| token.
307*6777b538SAndroid Build Coastguard Worker // Intended only for debugging/logging.
308*6777b538SAndroid Build Coastguard Worker NET_EXPORT std::string CookieSameSiteToString(CookieSameSite same_site);
309*6777b538SAndroid Build Coastguard Worker 
310*6777b538SAndroid Build Coastguard Worker // Converts the Set-Cookie header SameSite token |same_site| to a
311*6777b538SAndroid Build Coastguard Worker // CookieSameSite. Defaults to CookieSameSite::UNSPECIFIED for empty or
312*6777b538SAndroid Build Coastguard Worker // unrecognized strings. Returns an appropriate value of CookieSameSiteString in
313*6777b538SAndroid Build Coastguard Worker // |samesite_string| to indicate what type of string was parsed as the SameSite
314*6777b538SAndroid Build Coastguard Worker // attribute value, if a pointer is provided.
315*6777b538SAndroid Build Coastguard Worker NET_EXPORT CookieSameSite
316*6777b538SAndroid Build Coastguard Worker StringToCookieSameSite(const std::string& same_site,
317*6777b538SAndroid Build Coastguard Worker                        CookieSameSiteString* samesite_string = nullptr);
318*6777b538SAndroid Build Coastguard Worker 
319*6777b538SAndroid Build Coastguard Worker NET_EXPORT void RecordCookieSameSiteAttributeValueHistogram(
320*6777b538SAndroid Build Coastguard Worker     CookieSameSiteString value);
321*6777b538SAndroid Build Coastguard Worker 
322*6777b538SAndroid Build Coastguard Worker // This function reduces the 65535 available TCP port values down to a <100
323*6777b538SAndroid Build Coastguard Worker // potentially interesting values that cookies could be set by or sent to. This
324*6777b538SAndroid Build Coastguard Worker // is because UMA cannot handle the full range.
325*6777b538SAndroid Build Coastguard Worker NET_EXPORT CookiePort ReducePortRangeForCookieHistogram(const int port);
326*6777b538SAndroid Build Coastguard Worker 
327*6777b538SAndroid Build Coastguard Worker // Returns the appropriate enum value for the scheme of the given GURL.
328*6777b538SAndroid Build Coastguard Worker CookieSourceSchemeName GetSchemeNameEnum(const GURL& url);
329*6777b538SAndroid Build Coastguard Worker 
330*6777b538SAndroid Build Coastguard Worker // This string is used to as a placeholder for the partition_key column in
331*6777b538SAndroid Build Coastguard Worker // the SQLite database. All cookies except those set with Partitioned will
332*6777b538SAndroid Build Coastguard Worker // have this value in their column.
333*6777b538SAndroid Build Coastguard Worker //
334*6777b538SAndroid Build Coastguard Worker // Empty string was chosen because it is the smallest, non-null value.
335*6777b538SAndroid Build Coastguard Worker NET_EXPORT extern const char kEmptyCookiePartitionKey[];
336*6777b538SAndroid Build Coastguard Worker 
337*6777b538SAndroid Build Coastguard Worker // Used for a histogram that measures which character caused the cookie
338*6777b538SAndroid Build Coastguard Worker // string to be truncated.
339*6777b538SAndroid Build Coastguard Worker //
340*6777b538SAndroid Build Coastguard Worker // Do not reorder or renumber. Used for metrics.
341*6777b538SAndroid Build Coastguard Worker enum class TruncatingCharacterInCookieStringType {
342*6777b538SAndroid Build Coastguard Worker   // No truncating character in the cookie line.
343*6777b538SAndroid Build Coastguard Worker   kTruncatingCharNone = 0,
344*6777b538SAndroid Build Coastguard Worker   // Cookie line truncated because of \x0.
345*6777b538SAndroid Build Coastguard Worker   kTruncatingCharNull = 1,
346*6777b538SAndroid Build Coastguard Worker   // Cookie line truncated because of \xD.
347*6777b538SAndroid Build Coastguard Worker   kTruncatingCharNewline = 2,
348*6777b538SAndroid Build Coastguard Worker   // Cookie line truncated because of \xA.
349*6777b538SAndroid Build Coastguard Worker   kTruncatingCharLineFeed = 3,
350*6777b538SAndroid Build Coastguard Worker 
351*6777b538SAndroid Build Coastguard Worker   kMaxValue = kTruncatingCharLineFeed,  // Keep as the last value.
352*6777b538SAndroid Build Coastguard Worker };
353*6777b538SAndroid Build Coastguard Worker 
354*6777b538SAndroid Build Coastguard Worker // Enum for measuring usage patterns of CookiesAllowedForUrls.
355*6777b538SAndroid Build Coastguard Worker // The policy supports wildcards in the primary or secondary content setting
356*6777b538SAndroid Build Coastguard Worker // pattern, and explicit patterns for both. Each variant of this enum represents
357*6777b538SAndroid Build Coastguard Worker // policies set with each possible combination of rule types. These values are
358*6777b538SAndroid Build Coastguard Worker // persisted to logs. Entries should not be renumbered and numeric values should
359*6777b538SAndroid Build Coastguard Worker // never be reused.
360*6777b538SAndroid Build Coastguard Worker enum class CookiesAllowedForUrlsUsage {
361*6777b538SAndroid Build Coastguard Worker   kExplicitOnly = 0,
362*6777b538SAndroid Build Coastguard Worker   kWildcardPrimaryOnly = 1,
363*6777b538SAndroid Build Coastguard Worker   kWildcardSecondaryOnly = 2,
364*6777b538SAndroid Build Coastguard Worker   kExplicitAndPrimaryWildcard = 3,
365*6777b538SAndroid Build Coastguard Worker   kExplicitAndSecondaryWildcard = 4,
366*6777b538SAndroid Build Coastguard Worker   kWildcardOnly = 5,
367*6777b538SAndroid Build Coastguard Worker   kAllPresent = 6,
368*6777b538SAndroid Build Coastguard Worker 
369*6777b538SAndroid Build Coastguard Worker   kMaxValue = kAllPresent,
370*6777b538SAndroid Build Coastguard Worker };
371*6777b538SAndroid Build Coastguard Worker 
372*6777b538SAndroid Build Coastguard Worker // Possible values for the 'source_type' column.
373*6777b538SAndroid Build Coastguard Worker //
374*6777b538SAndroid Build Coastguard Worker // Do not reorder or renumber. Used for metrics.
375*6777b538SAndroid Build Coastguard Worker enum class CookieSourceType {
376*6777b538SAndroid Build Coastguard Worker   // 'unknown' is used for tests or cookies set before this field was added.
377*6777b538SAndroid Build Coastguard Worker   kUnknown = 0,
378*6777b538SAndroid Build Coastguard Worker   // 'http' is used for cookies set via HTTP Response Headers.
379*6777b538SAndroid Build Coastguard Worker   kHTTP = 1,
380*6777b538SAndroid Build Coastguard Worker   // 'script' is used for cookies set via document.cookie.
381*6777b538SAndroid Build Coastguard Worker   kScript = 2,
382*6777b538SAndroid Build Coastguard Worker   // 'other' is used for cookies set via browser login, iOS, WebView APIs,
383*6777b538SAndroid Build Coastguard Worker   // Extension APIs, or DevTools.
384*6777b538SAndroid Build Coastguard Worker   kOther = 3,
385*6777b538SAndroid Build Coastguard Worker 
386*6777b538SAndroid Build Coastguard Worker   kMaxValue = kOther,  // Keep as the last value.
387*6777b538SAndroid Build Coastguard Worker };
388*6777b538SAndroid Build Coastguard Worker 
389*6777b538SAndroid Build Coastguard Worker }  // namespace net
390*6777b538SAndroid Build Coastguard Worker 
391*6777b538SAndroid Build Coastguard Worker #endif  // NET_COOKIES_COOKIE_CONSTANTS_H_
392