xref: /aosp_15_r20/external/cronet/net/cookies/cookie_constants.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2013 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/cookies/cookie_constants.h"
6 
7 #include "base/metrics/histogram_functions.h"
8 #include "base/metrics/histogram_macros.h"
9 #include "base/notreached.h"
10 #include "base/strings/string_util.h"
11 #include "url/url_constants.h"
12 
13 namespace net {
14 
15 const base::TimeDelta kLaxAllowUnsafeMaxAge = base::Minutes(2);
16 const base::TimeDelta kShortLaxAllowUnsafeMaxAge = base::Seconds(10);
17 
18 namespace {
19 
20 const char kPriorityLow[] = "low";
21 const char kPriorityMedium[] = "medium";
22 const char kPriorityHigh[] = "high";
23 
24 const char kSameSiteLax[] = "lax";
25 const char kSameSiteStrict[] = "strict";
26 const char kSameSiteNone[] = "none";
27 const char kSameSiteExtended[] = "extended";
28 const char kSameSiteUnspecified[] = "unspecified";
29 
30 }  // namespace
31 
CookiePriorityToString(CookiePriority priority)32 std::string CookiePriorityToString(CookiePriority priority) {
33   switch(priority) {
34     case COOKIE_PRIORITY_HIGH:
35       return kPriorityHigh;
36     case COOKIE_PRIORITY_MEDIUM:
37       return kPriorityMedium;
38     case COOKIE_PRIORITY_LOW:
39       return kPriorityLow;
40     default:
41       NOTREACHED();
42   }
43   return std::string();
44 }
45 
StringToCookiePriority(const std::string & priority)46 CookiePriority StringToCookiePriority(const std::string& priority) {
47   std::string priority_comp = base::ToLowerASCII(priority);
48 
49   if (priority_comp == kPriorityHigh)
50     return COOKIE_PRIORITY_HIGH;
51   if (priority_comp == kPriorityMedium)
52     return COOKIE_PRIORITY_MEDIUM;
53   if (priority_comp == kPriorityLow)
54     return COOKIE_PRIORITY_LOW;
55 
56   return COOKIE_PRIORITY_DEFAULT;
57 }
58 
CookieSameSiteToString(CookieSameSite same_site)59 std::string CookieSameSiteToString(CookieSameSite same_site) {
60   switch (same_site) {
61     case CookieSameSite::LAX_MODE:
62       return kSameSiteLax;
63     case CookieSameSite::STRICT_MODE:
64       return kSameSiteStrict;
65     case CookieSameSite::NO_RESTRICTION:
66       return kSameSiteNone;
67     case CookieSameSite::UNSPECIFIED:
68       return kSameSiteUnspecified;
69   }
70 }
71 
StringToCookieSameSite(const std::string & same_site,CookieSameSiteString * samesite_string)72 CookieSameSite StringToCookieSameSite(const std::string& same_site,
73                                       CookieSameSiteString* samesite_string) {
74   // Put a value on the stack so that we can assign to |*samesite_string|
75   // instead of having to null-check it all the time.
76   CookieSameSiteString ignored = CookieSameSiteString::kUnspecified;
77   if (!samesite_string)
78     samesite_string = &ignored;
79 
80   *samesite_string = CookieSameSiteString::kUnrecognized;
81   CookieSameSite samesite = CookieSameSite::UNSPECIFIED;
82 
83   if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteNone)) {
84     samesite = CookieSameSite::NO_RESTRICTION;
85     *samesite_string = CookieSameSiteString::kNone;
86   } else if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteLax)) {
87     samesite = CookieSameSite::LAX_MODE;
88     *samesite_string = CookieSameSiteString::kLax;
89   } else if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteStrict)) {
90     samesite = CookieSameSite::STRICT_MODE;
91     *samesite_string = CookieSameSiteString::kStrict;
92   } else if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteExtended)) {
93     // Extended isn't supported anymore -- we just parse it for UMA stats.
94     *samesite_string = CookieSameSiteString::kExtended;
95   } else if (same_site == "") {
96     *samesite_string = CookieSameSiteString::kEmptyString;
97   }
98   return samesite;
99 }
100 
RecordCookieSameSiteAttributeValueHistogram(CookieSameSiteString value)101 void RecordCookieSameSiteAttributeValueHistogram(CookieSameSiteString value) {
102   UMA_HISTOGRAM_ENUMERATION("Cookie.SameSiteAttributeValue", value);
103 }
104 
ReducePortRangeForCookieHistogram(const int port)105 CookiePort ReducePortRangeForCookieHistogram(const int port) {
106   switch (port) {
107     case 80:
108       return CookiePort::k80;
109     case 81:
110       return CookiePort::k81;
111     case 82:
112       return CookiePort::k82;
113     case 83:
114       return CookiePort::k83;
115     case 84:
116       return CookiePort::k84;
117     case 85:
118       return CookiePort::k85;
119     case 443:
120       return CookiePort::k443;
121     case 444:
122       return CookiePort::k444;
123     case 445:
124       return CookiePort::k445;
125     case 446:
126       return CookiePort::k446;
127     case 447:
128       return CookiePort::k447;
129     case 448:
130       return CookiePort::k448;
131     case 3000:
132       return CookiePort::k3000;
133     case 3001:
134       return CookiePort::k3001;
135     case 3002:
136       return CookiePort::k3002;
137     case 3003:
138       return CookiePort::k3003;
139     case 3004:
140       return CookiePort::k3004;
141     case 3005:
142       return CookiePort::k3005;
143     case 4200:
144       return CookiePort::k4200;
145     case 4201:
146       return CookiePort::k4201;
147     case 4202:
148       return CookiePort::k4202;
149     case 4203:
150       return CookiePort::k4203;
151     case 4204:
152       return CookiePort::k4204;
153     case 4205:
154       return CookiePort::k4205;
155     case 5000:
156       return CookiePort::k5000;
157     case 5001:
158       return CookiePort::k5001;
159     case 5002:
160       return CookiePort::k5002;
161     case 5003:
162       return CookiePort::k5003;
163     case 5004:
164       return CookiePort::k5004;
165     case 5005:
166       return CookiePort::k5005;
167     case 7000:
168       return CookiePort::k7000;
169     case 7001:
170       return CookiePort::k7001;
171     case 7002:
172       return CookiePort::k7002;
173     case 7003:
174       return CookiePort::k7003;
175     case 7004:
176       return CookiePort::k7004;
177     case 7005:
178       return CookiePort::k7005;
179     case 8000:
180       return CookiePort::k8000;
181     case 8001:
182       return CookiePort::k8001;
183     case 8002:
184       return CookiePort::k8002;
185     case 8003:
186       return CookiePort::k8003;
187     case 8004:
188       return CookiePort::k8004;
189     case 8005:
190       return CookiePort::k8005;
191     case 8080:
192       return CookiePort::k8080;
193     case 8081:
194       return CookiePort::k8081;
195     case 8082:
196       return CookiePort::k8082;
197     case 8083:
198       return CookiePort::k8083;
199     case 8084:
200       return CookiePort::k8084;
201     case 8085:
202       return CookiePort::k8085;
203     case 8090:
204       return CookiePort::k8090;
205     case 8091:
206       return CookiePort::k8091;
207     case 8092:
208       return CookiePort::k8092;
209     case 8093:
210       return CookiePort::k8093;
211     case 8094:
212       return CookiePort::k8094;
213     case 8095:
214       return CookiePort::k8095;
215     case 8100:
216       return CookiePort::k8100;
217     case 8101:
218       return CookiePort::k8101;
219     case 8102:
220       return CookiePort::k8102;
221     case 8103:
222       return CookiePort::k8103;
223     case 8104:
224       return CookiePort::k8104;
225     case 8105:
226       return CookiePort::k8105;
227     case 8200:
228       return CookiePort::k8200;
229     case 8201:
230       return CookiePort::k8201;
231     case 8202:
232       return CookiePort::k8202;
233     case 8203:
234       return CookiePort::k8203;
235     case 8204:
236       return CookiePort::k8204;
237     case 8205:
238       return CookiePort::k8205;
239     case 8443:
240       return CookiePort::k8443;
241     case 8444:
242       return CookiePort::k8444;
243     case 8445:
244       return CookiePort::k8445;
245     case 8446:
246       return CookiePort::k8446;
247     case 8447:
248       return CookiePort::k8447;
249     case 8448:
250       return CookiePort::k8448;
251     case 8888:
252       return CookiePort::k8888;
253     case 8889:
254       return CookiePort::k8889;
255     case 8890:
256       return CookiePort::k8890;
257     case 8891:
258       return CookiePort::k8891;
259     case 8892:
260       return CookiePort::k8892;
261     case 8893:
262       return CookiePort::k8893;
263     case 9000:
264       return CookiePort::k9000;
265     case 9001:
266       return CookiePort::k9001;
267     case 9002:
268       return CookiePort::k9002;
269     case 9003:
270       return CookiePort::k9003;
271     case 9004:
272       return CookiePort::k9004;
273     case 9005:
274       return CookiePort::k9005;
275     case 9090:
276       return CookiePort::k9090;
277     case 9091:
278       return CookiePort::k9091;
279     case 9092:
280       return CookiePort::k9092;
281     case 9093:
282       return CookiePort::k9093;
283     case 9094:
284       return CookiePort::k9094;
285     case 9095:
286       return CookiePort::k9095;
287     default:
288       return CookiePort::kOther;
289   }
290 }
291 
GetSchemeNameEnum(const GURL & url)292 CookieSourceSchemeName GetSchemeNameEnum(const GURL& url) {
293   // The most likely schemes are first, to improve performance.
294   if (url.SchemeIs(url::kHttpsScheme)) {
295     return CookieSourceSchemeName::kHttpsScheme;
296   } else if (url.SchemeIs(url::kHttpScheme)) {
297     return CookieSourceSchemeName::kHttpScheme;
298   } else if (url.SchemeIs(url::kWssScheme)) {
299     return CookieSourceSchemeName::kWssScheme;
300   } else if (url.SchemeIs(url::kWsScheme)) {
301     return CookieSourceSchemeName::kWsScheme;
302   } else if (url.SchemeIs("chrome-extension")) {
303     return CookieSourceSchemeName::kChromeExtensionScheme;
304   } else if (url.SchemeIs(url::kFileScheme)) {
305     return CookieSourceSchemeName::kFileScheme;
306   }
307   // These all aren't marked as cookieable and so are much less likely to
308   // occur.
309   else if (url.SchemeIs(url::kAboutBlankURL)) {
310     return CookieSourceSchemeName::kAboutBlankURL;
311   } else if (url.SchemeIs(url::kAboutSrcdocURL)) {
312     return CookieSourceSchemeName::kAboutSrcdocURL;
313   } else if (url.SchemeIs(url::kAboutBlankPath)) {
314     return CookieSourceSchemeName::kAboutBlankPath;
315   } else if (url.SchemeIs(url::kAboutSrcdocPath)) {
316     return CookieSourceSchemeName::kAboutSrcdocPath;
317   } else if (url.SchemeIs(url::kAboutScheme)) {
318     return CookieSourceSchemeName::kAboutScheme;
319   } else if (url.SchemeIs(url::kBlobScheme)) {
320     return CookieSourceSchemeName::kBlobScheme;
321   } else if (url.SchemeIs(url::kContentScheme)) {
322     return CookieSourceSchemeName::kContentScheme;
323   } else if (url.SchemeIs(url::kContentIDScheme)) {
324     return CookieSourceSchemeName::kContentIDScheme;
325   } else if (url.SchemeIs(url::kDataScheme)) {
326     return CookieSourceSchemeName::kDataScheme;
327   } else if (url.SchemeIs(url::kFileSystemScheme)) {
328     return CookieSourceSchemeName::kFileSystemScheme;
329   } else if (url.SchemeIs(url::kFtpScheme)) {
330     return CookieSourceSchemeName::kFtpScheme;
331   } else if (url.SchemeIs(url::kJavaScriptScheme)) {
332     return CookieSourceSchemeName::kJavaScriptScheme;
333   } else if (url.SchemeIs(url::kMailToScheme)) {
334     return CookieSourceSchemeName::kMailToScheme;
335   } else if (url.SchemeIs(url::kTelScheme)) {
336     return CookieSourceSchemeName::kTelScheme;
337   } else if (url.SchemeIs(url::kUrnScheme)) {
338     return CookieSourceSchemeName::kUrnScheme;
339   }
340 
341   return CookieSourceSchemeName::kOther;
342 }
343 
344 const char kEmptyCookiePartitionKey[] = "";
345 
346 }  // namespace net
347