cookie_constants.cc 10 KB

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