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