blob: bf8dd08c5559ea9b6b56fe41c7a16f36be18bb81 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/cookies/cookie_constants.h"
#include "base/metrics/histogram_macros.h"
#include "base/notreached.h"
#include "base/strings/string_util.h"
namespace net {
const base::TimeDelta kLaxAllowUnsafeMaxAge = base::TimeDelta::FromMinutes(2);
const base::TimeDelta kShortLaxAllowUnsafeMaxAge =
base::TimeDelta::FromSeconds(10);
namespace {
const char kPriorityLow[] = "low";
const char kPriorityMedium[] = "medium";
const char kPriorityHigh[] = "high";
const char kSameSiteLax[] = "lax";
const char kSameSiteStrict[] = "strict";
const char kSameSiteNone[] = "none";
const char kSameSiteExtended[] = "extended";
const char kSameSiteUnspecified[] = "unspecified";
} // namespace
std::string CookiePriorityToString(CookiePriority priority) {
switch(priority) {
case COOKIE_PRIORITY_HIGH:
return kPriorityHigh;
case COOKIE_PRIORITY_MEDIUM:
return kPriorityMedium;
case COOKIE_PRIORITY_LOW:
return kPriorityLow;
default:
NOTREACHED();
}
return std::string();
}
CookiePriority StringToCookiePriority(const std::string& priority) {
std::string priority_comp = base::ToLowerASCII(priority);
if (priority_comp == kPriorityHigh)
return COOKIE_PRIORITY_HIGH;
if (priority_comp == kPriorityMedium)
return COOKIE_PRIORITY_MEDIUM;
if (priority_comp == kPriorityLow)
return COOKIE_PRIORITY_LOW;
return COOKIE_PRIORITY_DEFAULT;
}
std::string CookieSameSiteToString(CookieSameSite same_site) {
switch (same_site) {
case CookieSameSite::LAX_MODE:
return kSameSiteLax;
case CookieSameSite::STRICT_MODE:
return kSameSiteStrict;
case CookieSameSite::NO_RESTRICTION:
return kSameSiteNone;
case CookieSameSite::UNSPECIFIED:
return kSameSiteUnspecified;
}
}
CookieSameSite StringToCookieSameSite(const std::string& same_site,
CookieSameSiteString* samesite_string) {
// Put a value on the stack so that we can assign to |*samesite_string|
// instead of having to null-check it all the time.
CookieSameSiteString ignored = CookieSameSiteString::kUnspecified;
if (!samesite_string)
samesite_string = &ignored;
*samesite_string = CookieSameSiteString::kUnrecognized;
CookieSameSite samesite = CookieSameSite::UNSPECIFIED;
if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteNone)) {
samesite = CookieSameSite::NO_RESTRICTION;
*samesite_string = CookieSameSiteString::kNone;
} else if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteLax)) {
samesite = CookieSameSite::LAX_MODE;
*samesite_string = CookieSameSiteString::kLax;
} else if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteStrict)) {
samesite = CookieSameSite::STRICT_MODE;
*samesite_string = CookieSameSiteString::kStrict;
} else if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteExtended)) {
// Extended isn't supported anymore -- we just parse it for UMA stats.
*samesite_string = CookieSameSiteString::kExtended;
} else if (same_site == "") {
*samesite_string = CookieSameSiteString::kEmptyString;
}
return samesite;
}
void RecordCookieSameSiteAttributeValueHistogram(CookieSameSiteString value) {
UMA_HISTOGRAM_ENUMERATION("Cookie.SameSiteAttributeValue", value);
}
} // namespace net