blob: aa0d1f358e793c707ec0aeec3a96449fb6656844 [file] [log] [blame]
// Copyright 2017 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 "services/network/public/cpp/cookie_manager_struct_traits.h"
#include "mojo/common/time_struct_traits.h"
namespace mojo {
network::mojom::CookiePriority
EnumTraits<network::mojom::CookiePriority, net::CookiePriority>::ToMojom(
net::CookiePriority input) {
switch (input) {
case net::COOKIE_PRIORITY_LOW:
return network::mojom::CookiePriority::LOW;
case net::COOKIE_PRIORITY_MEDIUM:
return network::mojom::CookiePriority::MEDIUM;
case net::COOKIE_PRIORITY_HIGH:
return network::mojom::CookiePriority::HIGH;
}
NOTREACHED();
return static_cast<network::mojom::CookiePriority>(input);
}
bool EnumTraits<network::mojom::CookiePriority, net::CookiePriority>::FromMojom(
network::mojom::CookiePriority input,
net::CookiePriority* output) {
switch (input) {
case network::mojom::CookiePriority::LOW:
*output = net::CookiePriority::COOKIE_PRIORITY_LOW;
return true;
case network::mojom::CookiePriority::MEDIUM:
*output = net::CookiePriority::COOKIE_PRIORITY_MEDIUM;
return true;
case network::mojom::CookiePriority::HIGH:
*output = net::CookiePriority::COOKIE_PRIORITY_HIGH;
return true;
}
return false;
}
network::mojom::CookieSameSite
EnumTraits<network::mojom::CookieSameSite, net::CookieSameSite>::ToMojom(
net::CookieSameSite input) {
switch (input) {
case net::CookieSameSite::NO_RESTRICTION:
return network::mojom::CookieSameSite::NO_RESTRICTION;
case net::CookieSameSite::LAX_MODE:
return network::mojom::CookieSameSite::LAX_MODE;
case net::CookieSameSite::STRICT_MODE:
return network::mojom::CookieSameSite::STRICT_MODE;
}
NOTREACHED();
return static_cast<network::mojom::CookieSameSite>(input);
}
bool EnumTraits<network::mojom::CookieSameSite, net::CookieSameSite>::FromMojom(
network::mojom::CookieSameSite input,
net::CookieSameSite* output) {
switch (input) {
case network::mojom::CookieSameSite::NO_RESTRICTION:
*output = net::CookieSameSite::NO_RESTRICTION;
return true;
case network::mojom::CookieSameSite::LAX_MODE:
*output = net::CookieSameSite::LAX_MODE;
return true;
case network::mojom::CookieSameSite::STRICT_MODE:
*output = net::CookieSameSite::STRICT_MODE;
return true;
}
return false;
}
network::mojom::CookieSameSiteFilter
EnumTraits<network::mojom::CookieSameSiteFilter,
net::CookieOptions::SameSiteCookieMode>::
ToMojom(net::CookieOptions::SameSiteCookieMode input) {
switch (input) {
case net::CookieOptions::SameSiteCookieMode::INCLUDE_STRICT_AND_LAX:
return network::mojom::CookieSameSiteFilter::INCLUDE_STRICT_AND_LAX;
case net::CookieOptions::SameSiteCookieMode::INCLUDE_LAX:
return network::mojom::CookieSameSiteFilter::INCLUDE_LAX;
case net::CookieOptions::SameSiteCookieMode::DO_NOT_INCLUDE:
return network::mojom::CookieSameSiteFilter::DO_NOT_INCLUDE;
}
NOTREACHED();
return static_cast<network::mojom::CookieSameSiteFilter>(input);
}
bool EnumTraits<network::mojom::CookieSameSiteFilter,
net::CookieOptions::SameSiteCookieMode>::
FromMojom(network::mojom::CookieSameSiteFilter input,
net::CookieOptions::SameSiteCookieMode* output) {
switch (input) {
case network::mojom::CookieSameSiteFilter::INCLUDE_STRICT_AND_LAX:
*output = net::CookieOptions::SameSiteCookieMode::INCLUDE_STRICT_AND_LAX;
return true;
case network::mojom::CookieSameSiteFilter::INCLUDE_LAX:
*output = net::CookieOptions::SameSiteCookieMode::INCLUDE_LAX;
return true;
case network::mojom::CookieSameSiteFilter::DO_NOT_INCLUDE:
*output = net::CookieOptions::SameSiteCookieMode::DO_NOT_INCLUDE;
return true;
}
return false;
}
bool StructTraits<network::mojom::CookieOptionsDataView, net::CookieOptions>::
Read(network::mojom::CookieOptionsDataView mojo_options,
net::CookieOptions* cookie_options) {
if (mojo_options.exclude_httponly())
cookie_options->set_exclude_httponly();
else
cookie_options->set_include_httponly();
net::CookieOptions::SameSiteCookieMode same_site_cookie_mode;
if (!mojo_options.ReadCookieSameSiteFilter(&same_site_cookie_mode))
return false;
cookie_options->set_same_site_cookie_mode(same_site_cookie_mode);
if (mojo_options.update_access_time())
cookie_options->set_update_access_time();
else
cookie_options->set_do_not_update_access_time();
base::Optional<base::Time> optional_server_time;
if (!mojo_options.ReadServerTime(&optional_server_time))
return false;
if (optional_server_time) {
cookie_options->set_server_time(*optional_server_time);
}
return true;
}
bool StructTraits<
network::mojom::CanonicalCookieDataView,
net::CanonicalCookie>::Read(network::mojom::CanonicalCookieDataView cookie,
net::CanonicalCookie* out) {
std::string name;
if (!cookie.ReadName(&name))
return false;
std::string value;
if (!cookie.ReadValue(&value))
return false;
std::string domain;
if (!cookie.ReadDomain(&domain))
return false;
std::string path;
if (!cookie.ReadPath(&path))
return false;
base::Optional<base::Time> creation_time;
base::Optional<base::Time> expiry_time;
base::Optional<base::Time> last_access_time;
if (!cookie.ReadCreation(&creation_time))
return false;
if (!cookie.ReadExpiry(&expiry_time))
return false;
if (!cookie.ReadLastAccess(&last_access_time))
return false;
net::CookieSameSite site_restrictions;
if (!cookie.ReadSiteRestrictions(&site_restrictions))
return false;
net::CookiePriority priority;
if (!cookie.ReadPriority(&priority))
return false;
*out = net::CanonicalCookie(
name, value, domain, path, creation_time ? *creation_time : base::Time(),
expiry_time ? *expiry_time : base::Time(),
last_access_time ? *last_access_time : base::Time(), cookie.secure(),
cookie.httponly(), site_restrictions, priority);
return out->IsCanonical();
}
} // namespace mojo