LibHTTP+LibWebView: Share Cookie conversion

Nothing about `parsed_cookie_from_devtools_cookie()` is specific to
DevTools, so move it to ParsedCookie.h as `parse_cookie()` instead.
This commit is contained in:
Sam Atkins 2026-06-17 15:41:55 +01:00 committed by Jelle Raaijmakers
parent 9f7a328d9b
commit b1547d467e
3 changed files with 26 additions and 24 deletions

View file

@ -101,6 +101,29 @@ Optional<ParsedCookie> parse_cookie(URL::URL const& url, StringView cookie_strin
return parsed_cookie;
}
ErrorOr<ParsedCookie> parse_cookie(Cookie const& cookie)
{
ParsedCookie parsed_cookie;
parsed_cookie.name = cookie.name;
parsed_cookie.value = cookie.value;
parsed_cookie.same_site_attribute = cookie.same_site;
parsed_cookie.path = cookie.path;
parsed_cookie.secure_attribute_present = cookie.secure;
parsed_cookie.http_only_attribute_present = cookie.http_only;
if (!cookie.host_only) {
auto domain = cookie.domain.bytes_as_string_view();
if (domain.starts_with('.'))
domain = domain.substring_view(1);
parsed_cookie.domain = domain.to_ascii_lowercase_string();
}
if (cookie.persistent)
parsed_cookie.expiry_time_from_expires_attribute = cookie.expiry_time;
return parsed_cookie;
}
// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-22#section-5.6-8
ErrorOr<void> parse_attributes(URL::URL const& url, ParsedCookie& parsed_cookie, StringView unparsed_attributes)
{

View file

@ -28,6 +28,7 @@ struct ParsedCookie {
};
Optional<ParsedCookie> parse_cookie(URL::URL const&, StringView cookie_string);
ErrorOr<ParsedCookie> parse_cookie(Cookie const&);
bool cookie_contains_invalid_control_character(StringView);
Optional<UnixDateTime> parse_cookie_date(StringView);

View file

@ -30,29 +30,6 @@ static CookieStorageKey storage_key_for_cookie(HTTP::Cookie::Cookie const& cooki
return { cookie.name, cookie.domain, cookie.path };
}
static HTTP::Cookie::ParsedCookie parsed_cookie_from_devtools_cookie(HTTP::Cookie::Cookie const& cookie)
{
HTTP::Cookie::ParsedCookie parsed_cookie;
parsed_cookie.name = cookie.name;
parsed_cookie.value = cookie.value;
parsed_cookie.same_site_attribute = cookie.same_site;
parsed_cookie.path = cookie.path;
parsed_cookie.secure_attribute_present = cookie.secure;
parsed_cookie.http_only_attribute_present = cookie.http_only;
if (!cookie.host_only) {
auto domain = cookie.domain.bytes_as_string_view();
if (domain.starts_with('.'))
domain = domain.substring_view(1);
parsed_cookie.domain = domain.to_ascii_lowercase_string();
}
if (cookie.persistent)
parsed_cookie.expiry_time_from_expires_attribute = cookie.expiry_time;
return parsed_cookie;
}
ErrorOr<NonnullOwnPtr<CookieJar>> CookieJar::create(Database::Database& database)
{
Statements statements {};
@ -452,7 +429,8 @@ void CookieJar::update_cookie(HTTP::Cookie::Cookie cookie)
ErrorOr<void> CookieJar::set_cookie_from_devtools(URL::URL const& url, Optional<CookieStorageKey> old_key, HTTP::Cookie::Cookie cookie)
{
auto new_key = storage_key_for_cookie(cookie);
TRY(set_cookie(url, parsed_cookie_from_devtools_cookie(cookie), HTTP::Cookie::Source::Http));
auto parsed_cookie = TRY(HTTP::Cookie::parse_cookie(cookie));
TRY(set_cookie(url, parsed_cookie, HTTP::Cookie::Source::Http));
if (old_key.has_value() && *old_key != new_key)
delete_cookie(*old_key);