aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock26
-rw-r--r--Cargo.toml3
-rw-r--r--components/hyper_serde/Cargo.toml1
-rw-r--r--components/hyper_serde/tests/tokens.rs8
-rw-r--r--components/net/Cargo.toml3
-rw-r--r--components/net/cookie.rs50
-rw-r--r--components/net/cookie_storage.rs42
-rw-r--r--components/net/http_loader.rs4
-rw-r--r--components/net/resource_thread.rs10
-rw-r--r--components/net/tests/cookie.rs212
-rw-r--r--components/net/tests/cookie_http_state.rs5
-rw-r--r--components/net/tests/http_loader.rs12
-rw-r--r--components/net/websocket_loader.rs4
-rw-r--r--components/webdriver_server/lib.rs24
-rw-r--r--tests/wpt/meta/MANIFEST.json2
-rw-r--r--tests/wpt/tests/html/dom/documents/resource-metadata-management/document-cookie.html2
16 files changed, 206 insertions, 202 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 1f9b44f915c..8df37a132aa 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -981,18 +981,19 @@ dependencies = [
[[package]]
name = "cookie"
-version = "0.12.0"
+version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
+checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
dependencies = [
- "time 0.1.45",
+ "time 0.3.36",
+ "version_check",
]
[[package]]
name = "cookie"
-version = "0.16.2"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
+checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747"
dependencies = [
"time 0.3.36",
"version_check",
@@ -1276,6 +1277,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
dependencies = [
"powerfmt",
+ "serde",
]
[[package]]
@@ -2903,7 +2905,7 @@ dependencies = [
name = "hyper_serde"
version = "0.13.2"
dependencies = [
- "cookie 0.12.0",
+ "cookie 0.18.1",
"headers",
"http",
"hyper",
@@ -2912,6 +2914,7 @@ dependencies = [
"serde_bytes",
"serde_test",
"time 0.1.45",
+ "time 0.3.36",
]
[[package]]
@@ -4135,7 +4138,7 @@ dependencies = [
"bytes",
"chrono",
"content-security-policy",
- "cookie 0.12.0",
+ "cookie 0.18.1",
"crossbeam-channel",
"data-url",
"devtools_traits",
@@ -4172,6 +4175,7 @@ dependencies = [
"servo_url",
"sha2",
"time 0.1.45",
+ "time 0.3.36",
"tokio",
"tokio-rustls",
"tokio-stream",
@@ -4190,7 +4194,7 @@ version = "0.0.1"
dependencies = [
"base",
"content-security-policy",
- "cookie 0.12.0",
+ "cookie 0.18.1",
"embedder_traits",
"headers",
"http",
@@ -5196,7 +5200,7 @@ dependencies = [
"canvas_traits",
"chrono",
"content-security-policy",
- "cookie 0.12.0",
+ "cookie 0.18.1",
"crossbeam-channel",
"cssparser",
"data-url",
@@ -5334,7 +5338,7 @@ dependencies = [
"bitflags 2.6.0",
"bluetooth_traits",
"canvas_traits",
- "cookie 0.12.0",
+ "cookie 0.18.1",
"crossbeam-channel",
"devtools_traits",
"embedder_traits",
@@ -7228,7 +7232,7 @@ dependencies = [
"base",
"base64",
"compositing_traits",
- "cookie 0.12.0",
+ "cookie 0.18.1",
"crossbeam-channel",
"euclid",
"http",
diff --git a/Cargo.toml b/Cargo.toml
index 1527cf5889a..1b32045b50c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -34,7 +34,7 @@ cfg-if = "1.0.0"
chrono = "0.4"
compositing_traits = { path = "components/shared/compositing" }
content-security-policy = { version = "0.5", features = ["serde"] }
-cookie = "0.12"
+cookie = { package = "cookie", version = "0.18" }
crossbeam-channel = "0.5"
cssparser = { version = "0.34", features = ["serde"] }
darling = { version = "0.20", default-features = false }
@@ -121,6 +121,7 @@ syn = { version = "2", default-features = false, features = ["clone-impls", "der
synstructure = "0.13"
thin-vec = "0.2.13"
time = "0.1.41"
+time_03 = { package = "time", version = "0.3", features = ["serde"] }
to_shmem = { git = "https://github.com/servo/stylo", branch = "2024-07-16" }
tokio = "1"
tokio-rustls = "0.24"
diff --git a/components/hyper_serde/Cargo.toml b/components/hyper_serde/Cargo.toml
index 6288066be13..d41a8f03ca0 100644
--- a/components/hyper_serde/Cargo.toml
+++ b/components/hyper_serde/Cargo.toml
@@ -24,6 +24,7 @@ mime = { workspace = true }
serde = { workspace = true }
serde_bytes = { workspace = true }
time = { workspace = true }
+time_03 = { workspace = true }
[dev-dependencies]
serde_test = "1.0"
diff --git a/components/hyper_serde/tests/tokens.rs b/components/hyper_serde/tests/tokens.rs
index d7ad09f4e9c..3192f1043ff 100644
--- a/components/hyper_serde/tests/tokens.rs
+++ b/components/hyper_serde/tests/tokens.rs
@@ -8,14 +8,14 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-use cookie::Cookie;
+use cookie::{Cookie, CookieBuilder};
use headers::ContentType;
use http::header::{self, HeaderMap, HeaderValue};
use http::StatusCode;
use hyper::{Method, Uri};
use hyper_serde::{De, Ser};
use serde_test::{assert_de_tokens, assert_ser_tokens, Token};
-use time::Duration;
+use time_03::Duration;
#[test]
fn test_content_type() {
@@ -31,13 +31,13 @@ fn test_cookie() {
// Unfortunately we have to do the to_string().parse() dance here to avoid the object being a
// string with a bunch of indices in it which apparently is different from the exact same
// cookie but parsed as a bunch of strings.
- let cookie: Cookie = Cookie::build("Hello", "World!")
+ let cookie: Cookie = CookieBuilder::new("Hello", "World!")
.max_age(Duration::seconds(42))
.domain("servo.org")
.path("/")
.secure(true)
.http_only(false)
- .finish()
+ .build()
.to_string()
.parse()
.unwrap();
diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml
index 3ecb321c4b9..91d9b5a439f 100644
--- a/components/net/Cargo.toml
+++ b/components/net/Cargo.toml
@@ -21,7 +21,7 @@ base64 = { workspace = true }
brotli = "3"
bytes = "1"
content-security-policy = { workspace = true }
-cookie_rs = { package = "cookie", version = "0.12" }
+cookie = { workspace = true }
crossbeam-channel = { workspace = true }
data-url = { workspace = true }
devtools_traits = { workspace = true }
@@ -58,6 +58,7 @@ servo_config = { path = "../config" }
servo_url = { path = "../url" }
sha2 = "0.10"
time = { workspace = true }
+time_03 = { workspace = true }
chrono = { workspace = true }
tokio = { workspace = true, features = ["sync", "macros", "rt-multi-thread"] }
tokio-rustls = { workspace = true }
diff --git a/components/net/cookie.rs b/components/net/cookie.rs
index e6f348249bd..647a00fa3b0 100644
--- a/components/net/cookie.rs
+++ b/components/net/cookie.rs
@@ -8,23 +8,24 @@
use std::borrow::ToOwned;
use std::net::{Ipv4Addr, Ipv6Addr};
-use hyper_serde::Serde;
+use cookie::Cookie;
use net_traits::pub_domains::is_pub_domain;
use net_traits::CookieSource;
use serde::{Deserialize, Serialize};
use servo_url::ServoUrl;
-use time::{at, now, Duration, Tm};
+use time::{now, Tm};
+use time_03::OffsetDateTime;
/// A stored cookie that wraps the definition in cookie-rs. This is used to implement
/// various behaviours defined in the spec that rely on an associated request URL,
/// which cookie-rs and hyper's header parsing do not support.
#[derive(Clone, Debug, Deserialize, Serialize)]
-pub struct Cookie {
+pub struct ServoCookie {
#[serde(
deserialize_with = "hyper_serde::deserialize",
serialize_with = "hyper_serde::serialize"
)]
- pub cookie: cookie_rs::Cookie<'static>,
+ pub cookie: Cookie<'static>,
pub host_only: bool,
pub persistent: bool,
#[serde(
@@ -37,36 +38,31 @@ pub struct Cookie {
serialize_with = "hyper_serde::serialize"
)]
pub last_access: Tm,
- pub expiry_time: Option<Serde<Tm>>,
+ pub expiry_time: Option<OffsetDateTime>,
}
-impl Cookie {
+impl ServoCookie {
pub fn from_cookie_string(
cookie_str: String,
request: &ServoUrl,
source: CookieSource,
- ) -> Option<Cookie> {
- cookie_rs::Cookie::parse(cookie_str)
+ ) -> Option<ServoCookie> {
+ Cookie::parse(cookie_str)
.ok()
- .map(|cookie| Cookie::new_wrapped(cookie, request, source))
+ .map(|cookie| ServoCookie::new_wrapped(cookie, request, source))
.unwrap_or(None)
}
/// <http://tools.ietf.org/html/rfc6265#section-5.3>
pub fn new_wrapped(
- mut cookie: cookie_rs::Cookie<'static>,
+ mut cookie: Cookie<'static>,
request: &ServoUrl,
source: CookieSource,
- ) -> Option<Cookie> {
+ ) -> Option<ServoCookie> {
// Step 3
- let (persistent, expiry_time) = match (cookie.max_age(), cookie.expires()) {
- (Some(max_age), _) => (
- true,
- Some(at(
- now().to_timespec() + Duration::seconds(max_age.num_seconds())
- )),
- ),
- (_, Some(expires)) => (true, Some(expires)),
+ let (persistent, expiry_time) = match (cookie.max_age(), cookie.expires_datetime()) {
+ (Some(max_age), _) => (true, Some(time_03::OffsetDateTime::now_utc() + max_age)),
+ (_, Some(date_time)) => (true, Some(date_time)),
_ => (false, None),
};
@@ -86,7 +82,7 @@ impl Cookie {
// Step 6
let host_only = if !domain.is_empty() {
- if !Cookie::domain_match(&url_host, &domain) {
+ if !ServoCookie::domain_match(&url_host, &domain) {
return None;
} else {
cookie.set_domain(domain);
@@ -107,7 +103,7 @@ impl Cookie {
})
.to_owned();
if !path.starts_with('/') {
- path = Cookie::default_path(request.path()).to_string();
+ path = ServoCookie::default_path(request.path()).to_string();
}
cookie.set_path(path);
@@ -131,13 +127,13 @@ impl Cookie {
return None;
}
- Some(Cookie {
+ Some(ServoCookie {
cookie,
host_only,
persistent,
creation_time: now(),
last_access: now(),
- expiry_time: expiry_time.map(Serde),
+ expiry_time,
})
}
@@ -145,8 +141,8 @@ impl Cookie {
self.last_access = now();
}
- pub fn set_expiry_time_negative(&mut self) {
- self.expiry_time = Some(Serde(now() - Duration::seconds(1)));
+ pub fn set_expiry_time_in_past(&mut self) {
+ self.expiry_time = Some(time_03::OffsetDateTime::UNIX_EPOCH);
}
// http://tools.ietf.org/html/rfc6265#section-5.1.4
@@ -206,13 +202,13 @@ impl Cookie {
return false;
}
} else if let (Some(domain), Some(cookie_domain)) = (domain, &self.cookie.domain()) {
- if !Cookie::domain_match(domain, cookie_domain) {
+ if !ServoCookie::domain_match(domain, cookie_domain) {
return false;
}
}
if let Some(cookie_path) = self.cookie.path() {
- if !Cookie::path_match(url.path(), cookie_path) {
+ if !ServoCookie::path_match(url.path(), cookie_path) {
return false;
}
}
diff --git a/components/net/cookie_storage.rs b/components/net/cookie_storage.rs
index b11b4421aa2..a81c23b3c60 100644
--- a/components/net/cookie_storage.rs
+++ b/components/net/cookie_storage.rs
@@ -14,14 +14,15 @@ use net_traits::pub_domains::reg_suffix;
use net_traits::CookieSource;
use serde::{Deserialize, Serialize};
use servo_url::ServoUrl;
-use time::{self, Tm};
+use time::Tm;
+use time_03::OffsetDateTime;
-use crate::cookie::Cookie;
+use crate::cookie::ServoCookie;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CookieStorage {
version: u32,
- cookies_map: HashMap<String, Vec<Cookie>>,
+ cookies_map: HashMap<String, Vec<ServoCookie>>,
max_per_host: usize,
}
@@ -43,10 +44,10 @@ impl CookieStorage {
// http://tools.ietf.org/html/rfc6265#section-5.3
pub fn remove(
&mut self,
- cookie: &Cookie,
+ cookie: &ServoCookie,
url: &ServoUrl,
source: CookieSource,
- ) -> Result<Option<Cookie>, RemoveCookieError> {
+ ) -> Result<Option<ServoCookie>, RemoveCookieError> {
let domain = reg_host(cookie.cookie.domain().as_ref().unwrap_or(&""));
let cookies = self.cookies_map.entry(domain).or_default();
@@ -61,9 +62,9 @@ impl CookieStorage {
c.cookie.name() == cookie.cookie.name() &&
c.cookie.secure().unwrap_or(false) &&
- (Cookie::domain_match(new_domain, existing_domain) ||
- Cookie::domain_match(existing_domain, new_domain)) &&
- Cookie::path_match(new_path, existing_path)
+ (ServoCookie::domain_match(new_domain, existing_domain) ||
+ ServoCookie::domain_match(existing_domain, new_domain)) &&
+ ServoCookie::path_match(new_path, existing_path)
});
if any_overlapping {
@@ -98,12 +99,12 @@ impl CookieStorage {
let domain = reg_host(url.host_str().unwrap_or(""));
let cookies = self.cookies_map.entry(domain).or_default();
for cookie in cookies.iter_mut() {
- cookie.set_expiry_time_negative();
+ cookie.set_expiry_time_in_past();
}
}
// http://tools.ietf.org/html/rfc6265#section-5.3
- pub fn push(&mut self, mut cookie: Cookie, url: &ServoUrl, source: CookieSource) {
+ pub fn push(&mut self, mut cookie: ServoCookie, url: &ServoUrl, source: CookieSource) {
// https://www.ietf.org/id/draft-ietf-httpbis-cookie-alone-01.txt Step 1
if cookie.cookie.secure().unwrap_or(false) && !url.is_secure_scheme() {
return;
@@ -140,7 +141,7 @@ impl CookieStorage {
cookies.push(cookie);
}
- pub fn cookie_comparator(a: &Cookie, b: &Cookie) -> Ordering {
+ pub fn cookie_comparator(a: &ServoCookie, b: &ServoCookie) -> Ordering {
let a_path_len = a.cookie.path().as_ref().map_or(0, |p| p.len());
let b_path_len = b.cookie.path().as_ref().map_or(0, |p| p.len());
match a_path_len.cmp(&b_path_len) {
@@ -168,7 +169,7 @@ impl CookieStorage {
// http://tools.ietf.org/html/rfc6265#section-5.4
pub fn cookies_for_url(&mut self, url: &ServoUrl, source: CookieSource) -> Option<String> {
- let filterer = |c: &&mut Cookie| -> bool {
+ let filterer = |c: &&mut ServoCookie| -> bool {
debug!(
" === SENT COOKIE : {} {} {:?} {:?}",
c.cookie.name(),
@@ -187,10 +188,10 @@ impl CookieStorage {
let domain = reg_host(url.host_str().unwrap_or(""));
let cookies = self.cookies_map.entry(domain).or_default();
- let mut url_cookies: Vec<&mut Cookie> = cookies.iter_mut().filter(filterer).collect();
+ let mut url_cookies: Vec<&mut ServoCookie> = cookies.iter_mut().filter(filterer).collect();
url_cookies.sort_by(|a, b| CookieStorage::cookie_comparator(a, b));
- let reducer = |acc: String, c: &mut &mut Cookie| -> String {
+ let reducer = |acc: String, c: &mut &mut ServoCookie| -> String {
// Step 3
c.touch();
@@ -215,7 +216,7 @@ impl CookieStorage {
&'a mut self,
url: &'a ServoUrl,
source: CookieSource,
- ) -> impl Iterator<Item = cookie_rs::Cookie<'static>> + 'a {
+ ) -> impl Iterator<Item = cookie::Cookie<'static>> + 'a {
let domain = reg_host(url.host_str().unwrap_or(""));
let cookies = self.cookies_map.entry(domain).or_default();
@@ -233,14 +234,11 @@ fn reg_host(url: &str) -> String {
reg_suffix(url).to_lowercase()
}
-fn is_cookie_expired(cookie: &Cookie) -> bool {
- match cookie.expiry_time {
- Some(ref t) => t.to_timespec() <= time::get_time(),
- None => false,
- }
+fn is_cookie_expired(cookie: &ServoCookie) -> bool {
+ matches!(cookie.expiry_time, Some(date_time) if date_time <= OffsetDateTime::now_utc())
}
-fn evict_one_cookie(is_secure_cookie: bool, cookies: &mut Vec<Cookie>) -> bool {
+fn evict_one_cookie(is_secure_cookie: bool, cookies: &mut Vec<ServoCookie>) -> bool {
// Remove non-secure cookie with oldest access time
let oldest_accessed: Option<(usize, Tm)> = get_oldest_accessed(false, cookies);
@@ -259,7 +257,7 @@ fn evict_one_cookie(is_secure_cookie: bool, cookies: &mut Vec<Cookie>) -> bool {
true
}
-fn get_oldest_accessed(is_secure_cookie: bool, cookies: &mut [Cookie]) -> Option<(usize, Tm)> {
+fn get_oldest_accessed(is_secure_cookie: bool, cookies: &mut [ServoCookie]) -> Option<(usize, Tm)> {
let mut oldest_accessed: Option<(usize, Tm)> = None;
for (i, c) in cookies.iter().enumerate() {
if (c.cookie.secure().unwrap_or(false) == is_secure_cookie) &&
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs
index 770c9a532e4..ea13b966123 100644
--- a/components/net/http_loader.rs
+++ b/components/net/http_loader.rs
@@ -60,7 +60,7 @@ use crate::connector::{
create_http_client, create_tls_config, CACertificates, CertificateErrorOverrideManager,
Connector,
};
-use crate::cookie;
+use crate::cookie::ServoCookie;
use crate::cookie_storage::CookieStorage;
use crate::decoder::Decoder;
use crate::fetch::cors_cache::CorsCache;
@@ -328,7 +328,7 @@ fn set_cookie_for_url(cookie_jar: &RwLock<CookieStorage>, request: &ServoUrl, co
let mut cookie_jar = cookie_jar.write().unwrap();
let source = CookieSource::HTTP;
- if let Some(cookie) = cookie::Cookie::from_cookie_string(cookie_val.into(), request, source) {
+ if let Some(cookie) = ServoCookie::from_cookie_string(cookie_val.into(), request, source) {
cookie_jar.push(cookie, request, source);
}
}
diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs
index 52c9cb1dac4..b885b35226a 100644
--- a/components/net/resource_thread.rs
+++ b/components/net/resource_thread.rs
@@ -14,6 +14,7 @@ use std::sync::{Arc, Mutex, RwLock};
use std::thread;
use std::time::Duration;
+use cookie::Cookie;
use crossbeam_channel::Sender;
use devtools_traits::DevtoolsControlMsg;
use embedder_traits::EmbedderProxy;
@@ -43,6 +44,7 @@ use crate::async_runtime::HANDLE;
use crate::connector::{
create_http_client, create_tls_config, CACertificates, CertificateErrorOverrideManager,
};
+use crate::cookie::ServoCookie;
use crate::cookie_storage::CookieStorage;
use crate::fetch::cors_cache::CorsCache;
use crate::fetch::methods::{fetch, CancellationListener, FetchContext};
@@ -51,7 +53,7 @@ use crate::hsts::HstsList;
use crate::http_cache::HttpCache;
use crate::http_loader::{http_redirect_fetch, HttpState};
use crate::storage_thread::StorageThreadFactory;
-use crate::{cookie, websocket_loader};
+use crate::websocket_loader;
/// Load a file with CA certificate and produce a RootCertStore with the results.
fn load_root_cert_store_from_file(file_path: String) -> io::Result<RootCertStore> {
@@ -315,7 +317,7 @@ impl ResourceChannelManager {
.fetch(req_init, Some(res_init), sender, http_state, cancel_chan),
CoreResourceMsg::SetCookieForUrl(request, cookie, source) => self
.resource_manager
- .set_cookie_for_url(&request, cookie.into_inner(), source, http_state),
+ .set_cookie_for_url(&request, cookie.into_inner().to_owned(), source, http_state),
CoreResourceMsg::SetCookiesForUrl(request, cookies, source) => {
for cookie in cookies {
self.resource_manager.set_cookie_for_url(
@@ -637,11 +639,11 @@ impl CoreResourceManager {
fn set_cookie_for_url(
&mut self,
request: &ServoUrl,
- cookie: cookie_rs::Cookie<'static>,
+ cookie: Cookie<'static>,
source: CookieSource,
http_state: &Arc<HttpState>,
) {
- if let Some(cookie) = cookie::Cookie::new_wrapped(cookie, request, source) {
+ if let Some(cookie) = ServoCookie::new_wrapped(cookie, request, source) {
let mut cookie_jar = http_state.cookie_jar.write().unwrap();
cookie_jar.push(cookie, request, source)
}
diff --git a/components/net/tests/cookie.rs b/components/net/tests/cookie.rs
index 3b14ba1ceb1..7868e57d0e6 100644
--- a/components/net/tests/cookie.rs
+++ b/components/net/tests/cookie.rs
@@ -2,53 +2,53 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use net::cookie::Cookie;
+use net::cookie::ServoCookie;
use net::cookie_storage::CookieStorage;
use net_traits::CookieSource;
use servo_url::ServoUrl;
#[test]
fn test_domain_match() {
- assert!(Cookie::domain_match("foo.com", "foo.com"));
- assert!(Cookie::domain_match("bar.foo.com", "foo.com"));
- assert!(Cookie::domain_match("baz.bar.foo.com", "foo.com"));
-
- assert!(!Cookie::domain_match("bar.foo.com", "bar.com"));
- assert!(!Cookie::domain_match("bar.com", "baz.bar.com"));
- assert!(!Cookie::domain_match("foo.com", "bar.com"));
-
- assert!(!Cookie::domain_match("bar.com", "bbar.com"));
- assert!(Cookie::domain_match("235.132.2.3", "235.132.2.3"));
- assert!(!Cookie::domain_match("235.132.2.3", "1.1.1.1"));
- assert!(!Cookie::domain_match("235.132.2.3", ".2.3"));
+ assert!(ServoCookie::domain_match("foo.com", "foo.com"));
+ assert!(ServoCookie::domain_match("bar.foo.com", "foo.com"));
+ assert!(ServoCookie::domain_match("baz.bar.foo.com", "foo.com"));
+
+ assert!(!ServoCookie::domain_match("bar.foo.com", "bar.com"));
+ assert!(!ServoCookie::domain_match("bar.com", "baz.bar.com"));
+ assert!(!ServoCookie::domain_match("foo.com", "bar.com"));
+
+ assert!(!ServoCookie::domain_match("bar.com", "bbar.com"));
+ assert!(ServoCookie::domain_match("235.132.2.3", "235.132.2.3"));
+ assert!(!ServoCookie::domain_match("235.132.2.3", "1.1.1.1"));
+ assert!(!ServoCookie::domain_match("235.132.2.3", ".2.3"));
}
#[test]
fn test_path_match() {
- assert!(Cookie::path_match("/", "/"));
- assert!(Cookie::path_match("/index.html", "/"));
- assert!(Cookie::path_match("/w/index.html", "/"));
- assert!(Cookie::path_match("/w/index.html", "/w/index.html"));
- assert!(Cookie::path_match("/w/index.html", "/w/"));
- assert!(Cookie::path_match("/w/index.html", "/w"));
-
- assert!(!Cookie::path_match("/", "/w/"));
- assert!(!Cookie::path_match("/a", "/w/"));
- assert!(!Cookie::path_match("/", "/w"));
- assert!(!Cookie::path_match("/w/index.html", "/w/index"));
- assert!(!Cookie::path_match("/windex.html", "/w/"));
- assert!(!Cookie::path_match("/windex.html", "/w"));
+ assert!(ServoCookie::path_match("/", "/"));
+ assert!(ServoCookie::path_match("/index.html", "/"));
+ assert!(ServoCookie::path_match("/w/index.html", "/"));
+ assert!(ServoCookie::path_match("/w/index.html", "/w/index.html"));
+ assert!(ServoCookie::path_match("/w/index.html", "/w/"));
+ assert!(ServoCookie::path_match("/w/index.html", "/w"));
+
+ assert!(!ServoCookie::path_match("/", "/w/"));
+ assert!(!ServoCookie::path_match("/a", "/w/"));
+ assert!(!ServoCookie::path_match("/", "/w"));
+ assert!(!ServoCookie::path_match("/w/index.html", "/w/index"));
+ assert!(!ServoCookie::path_match("/windex.html", "/w/"));
+ assert!(!ServoCookie::path_match("/windex.html", "/w"));
}
#[test]
fn test_default_path() {
- assert_eq!(&*Cookie::default_path("/foo/bar/baz/"), "/foo/bar/baz");
- assert_eq!(&*Cookie::default_path("/foo/bar/baz"), "/foo/bar");
- assert_eq!(&*Cookie::default_path("/foo/"), "/foo");
- assert_eq!(&*Cookie::default_path("/foo"), "/");
- assert_eq!(&*Cookie::default_path("/"), "/");
- assert_eq!(&*Cookie::default_path(""), "/");
- assert_eq!(&*Cookie::default_path("foo"), "/");
+ assert_eq!(&*ServoCookie::default_path("/foo/bar/baz/"), "/foo/bar/baz");
+ assert_eq!(&*ServoCookie::default_path("/foo/bar/baz"), "/foo/bar");
+ assert_eq!(&*ServoCookie::default_path("/foo/"), "/foo");
+ assert_eq!(&*ServoCookie::default_path("/foo"), "/");
+ assert_eq!(&*ServoCookie::default_path("/"), "/");
+ assert_eq!(&*ServoCookie::default_path(""), "/");
+ assert_eq!(&*ServoCookie::default_path("foo"), "/");
}
#[test]
@@ -59,33 +59,33 @@ fn fn_cookie_constructor() {
let gov_url = &ServoUrl::parse("http://gov.ac/foo").unwrap();
// cookie name/value test
- assert!(cookie_rs::Cookie::parse(" baz ").is_err());
- assert!(cookie_rs::Cookie::parse(" = bar ").is_err());
- assert!(cookie_rs::Cookie::parse(" baz = ").is_ok());
+ assert!(cookie::Cookie::parse(" baz ").is_err());
+ assert!(cookie::Cookie::parse(" = bar ").is_err());
+ assert!(cookie::Cookie::parse(" baz = ").is_ok());
// cookie domains test
- let cookie = cookie_rs::Cookie::parse(" baz = bar; Domain = ").unwrap();
- assert!(Cookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_some());
- let cookie = Cookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap();
+ let cookie = cookie::Cookie::parse(" baz = bar; Domain = ").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_some());
+ let cookie = ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap();
assert_eq!(&**cookie.cookie.domain().as_ref().unwrap(), "example.com");
// cookie public domains test
- let cookie = cookie_rs::Cookie::parse(" baz = bar; Domain = gov.ac").unwrap();
- assert!(Cookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_none());
- assert!(Cookie::new_wrapped(cookie, gov_url, CookieSource::HTTP).is_some());
+ let cookie = cookie::Cookie::parse(" baz = bar; Domain = gov.ac").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_none());
+ assert!(ServoCookie::new_wrapped(cookie, gov_url, CookieSource::HTTP).is_some());
// cookie domain matching test
- let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Domain = bazample.com").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse(" baz = bar ; Secure; Domain = bazample.com").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
- let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some());
+ let cookie = cookie::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some());
- let cookie = cookie_rs::Cookie::parse(" baz = bar ; HttpOnly").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::NonHTTP).is_none());
+ let cookie = cookie::Cookie::parse(" baz = bar ; HttpOnly").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::NonHTTP).is_none());
- let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap();
- let cookie = Cookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap();
+ let cookie = cookie::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap();
+ let cookie = ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap();
assert_eq!(cookie.cookie.value(), "bar");
assert_eq!(cookie.cookie.name(), "baz");
assert!(cookie.cookie.secure().unwrap_or(false));
@@ -94,77 +94,75 @@ fn fn_cookie_constructor() {
assert!(cookie.host_only);
let u = &ServoUrl::parse("http://example.com/foobar").unwrap();
- let cookie = cookie_rs::Cookie::parse("foobar=value;path=/").unwrap();
- assert!(Cookie::new_wrapped(cookie, u, CookieSource::HTTP).is_some());
+ let cookie = cookie::Cookie::parse("foobar=value;path=/").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, u, CookieSource::HTTP).is_some());
}
#[test]
fn test_cookie_secure_prefix() {
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Secure-SID=12345").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Secure-SID=12345").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("http://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Secure-SID=12345; Secure").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Secure-SID=12345; Secure").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Secure-SID=12345; Secure").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some());
+ let cookie = cookie::Cookie::parse("__Secure-SID=12345; Secure").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some());
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Secure-SID=12345; Domain=example.com").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Secure-SID=12345; Domain=example.com").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("http://example.com").unwrap();
- let cookie =
- cookie_rs::Cookie::parse("__Secure-SID=12345; Secure; Domain=example.com").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Secure-SID=12345; Secure; Domain=example.com").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie =
- cookie_rs::Cookie::parse("__Secure-SID=12345; Secure; Domain=example.com").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some());
+ let cookie = cookie::Cookie::parse("__Secure-SID=12345; Secure; Domain=example.com").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some());
}
#[test]
fn test_cookie_host_prefix() {
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Host-SID=12345").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Host-SID=12345").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("http://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Host-SID=12345; Secure").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Host-SID=12345; Secure").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Host-SID=12345; Secure").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Host-SID=12345; Secure").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Host-SID=12345; Domain=example.com").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Host-SID=12345; Domain=example.com").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Host-SID=12345; Domain=example.com; Path=/").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Host-SID=12345; Domain=example.com; Path=/").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("http://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Host-SID=12345; Secure; Domain=example.com").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Host-SID=12345; Secure; Domain=example.com").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Host-SID=12345; Secure; Domain=example.com").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ let cookie = cookie::Cookie::parse("__Host-SID=12345; Secure; Domain=example.com").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("https://example.com").unwrap();
let cookie =
- cookie_rs::Cookie::parse("__Host-SID=12345; Secure; Domain=example.com; Path=/").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
+ cookie::Cookie::parse("__Host-SID=12345; Secure; Domain=example.com; Path=/").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none());
let url = &ServoUrl::parse("https://example.com").unwrap();
- let cookie = cookie_rs::Cookie::parse("__Host-SID=12345; Secure; Path=/").unwrap();
- assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some());
+ let cookie = cookie::Cookie::parse("__Host-SID=12345; Secure; Path=/").unwrap();
+ assert!(ServoCookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some());
}
#[cfg(target_os = "windows")]
@@ -185,12 +183,12 @@ fn test_sort_order() {
use std::cmp::Ordering;
let url = &ServoUrl::parse("http://example.com/foo").unwrap();
- let a_wrapped = cookie_rs::Cookie::parse("baz=bar; Path=/foo/bar/").unwrap();
- let a = Cookie::new_wrapped(a_wrapped.clone(), url, CookieSource::HTTP).unwrap();
+ let a_wrapped = cookie::Cookie::parse("baz=bar; Path=/foo/bar/").unwrap();
+ let a = ServoCookie::new_wrapped(a_wrapped.clone(), url, CookieSource::HTTP).unwrap();
delay_to_ensure_different_timestamp();
- let a_prime = Cookie::new_wrapped(a_wrapped, url, CookieSource::HTTP).unwrap();
- let b = cookie_rs::Cookie::parse("baz=bar;Path=/foo/bar/baz/").unwrap();
- let b = Cookie::new_wrapped(b, url, CookieSource::HTTP).unwrap();
+ let a_prime = ServoCookie::new_wrapped(a_wrapped, url, CookieSource::HTTP).unwrap();
+ let b = cookie::Cookie::parse("baz=bar;Path=/foo/bar/baz/").unwrap();
+ let b = ServoCookie::new_wrapped(b, url, CookieSource::HTTP).unwrap();
assert!(b.cookie.path().as_ref().unwrap().len() > a.cookie.path().as_ref().unwrap().len());
assert_eq!(CookieStorage::cookie_comparator(&a, &b), Ordering::Greater);
@@ -208,8 +206,8 @@ fn test_sort_order() {
fn add_cookie_to_storage(storage: &mut CookieStorage, url: &ServoUrl, cookie_str: &str) {
let source = CookieSource::HTTP;
- let cookie = cookie_rs::Cookie::parse(cookie_str.to_owned()).unwrap();
- let cookie = Cookie::new_wrapped(cookie, url, source).unwrap();
+ let cookie = cookie::Cookie::parse(cookie_str.to_owned()).unwrap();
+ let cookie = ServoCookie::new_wrapped(cookie, url, source).unwrap();
storage.push(cookie, url, source);
}
@@ -220,13 +218,13 @@ fn test_insecure_cookies_cannot_evict_secure_cookie() {
let source = CookieSource::HTTP;
let mut cookies = Vec::new();
- cookies.push(cookie_rs::Cookie::parse("foo=bar; Secure; Domain=home.example.org").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo2=bar; Secure; Domain=.example.org").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo3=bar; Secure; Path=/foo").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo4=bar; Secure; Path=/foo/bar").unwrap());
+ cookies.push(cookie::Cookie::parse("foo=bar; Secure; Domain=home.example.org").unwrap());
+ cookies.push(cookie::Cookie::parse("foo2=bar; Secure; Domain=.example.org").unwrap());
+ cookies.push(cookie::Cookie::parse("foo3=bar; Secure; Path=/foo").unwrap());
+ cookies.push(cookie::Cookie::parse("foo4=bar; Secure; Path=/foo/bar").unwrap());
for bare_cookie in cookies {
- let cookie = Cookie::new_wrapped(bare_cookie, &secure_url, source).unwrap();
+ let cookie = ServoCookie::new_wrapped(bare_cookie, &secure_url, source).unwrap();
storage.push(cookie, &secure_url, source);
}
@@ -275,13 +273,13 @@ fn test_secure_cookies_eviction() {
let source = CookieSource::HTTP;
let mut cookies = Vec::new();
- cookies.push(cookie_rs::Cookie::parse("foo=bar; Secure; Domain=home.example.org").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo2=bar; Secure; Domain=.example.org").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo3=bar; Secure; Path=/foo").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo4=bar; Secure; Path=/foo/bar").unwrap());
+ cookies.push(cookie::Cookie::parse("foo=bar; Secure; Domain=home.example.org").unwrap());
+ cookies.push(cookie::Cookie::parse("foo2=bar; Secure; Domain=.example.org").unwrap());
+ cookies.push(cookie::Cookie::parse("foo3=bar; Secure; Path=/foo").unwrap());
+ cookies.push(cookie::Cookie::parse("foo4=bar; Secure; Path=/foo/bar").unwrap());
for bare_cookie in cookies {
- let cookie = Cookie::new_wrapped(bare_cookie, &url, source).unwrap();
+ let cookie = ServoCookie::new_wrapped(bare_cookie, &url, source).unwrap();
storage.push(cookie, &url, source);
}
@@ -317,13 +315,13 @@ fn test_secure_cookies_eviction_non_http_source() {
let source = CookieSource::NonHTTP;
let mut cookies = Vec::new();
- cookies.push(cookie_rs::Cookie::parse("foo=bar; Secure; Domain=home.example.org").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo2=bar; Secure; Domain=.example.org").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo3=bar; Secure; Path=/foo").unwrap());
- cookies.push(cookie_rs::Cookie::parse("foo4=bar; Secure; Path=/foo/bar").unwrap());
+ cookies.push(cookie::Cookie::parse("foo=bar; Secure; Domain=home.example.org").unwrap());
+ cookies.push(cookie::Cookie::parse("foo2=bar; Secure; Domain=.example.org").unwrap());
+ cookies.push(cookie::Cookie::parse("foo3=bar; Secure; Path=/foo").unwrap());
+ cookies.push(cookie::Cookie::parse("foo4=bar; Secure; Path=/foo/bar").unwrap());
for bare_cookie in cookies {
- let cookie = Cookie::new_wrapped(bare_cookie, &url, source).unwrap();
+ let cookie = ServoCookie::new_wrapped(bare_cookie, &url, source).unwrap();
storage.push(cookie, &url, source);
}
@@ -363,7 +361,7 @@ fn add_retrieve_cookies(
// Add all cookies to the store
for str_cookie in set_cookies {
- let cookie = Cookie::from_cookie_string(str_cookie.to_owned(), &url, source).unwrap();
+ let cookie = ServoCookie::from_cookie_string(str_cookie.to_owned(), &url, source).unwrap();
storage.push(cookie, &url, source);
}
diff --git a/components/net/tests/cookie_http_state.rs b/components/net/tests/cookie_http_state.rs
index 0a03dbc81b8..9ab492c5d9b 100644
--- a/components/net/tests/cookie_http_state.rs
+++ b/components/net/tests/cookie_http_state.rs
@@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use net::cookie::Cookie;
+use net::cookie::ServoCookie;
use net::cookie_storage::CookieStorage;
use net_traits::CookieSource;
use servo_url::ServoUrl;
@@ -14,7 +14,8 @@ fn run(set_location: &str, set_cookies: &[&str], final_location: &str) -> String
// Add all cookies to the store
for str_cookie in set_cookies {
- if let Some(cookie) = Cookie::from_cookie_string(str_cookie.to_owned().into(), &url, source)
+ if let Some(cookie) =
+ ServoCookie::from_cookie_string(str_cookie.to_owned().into(), &url, source)
{
storage.push(cookie, &url, source);
}
diff --git a/components/net/tests/http_loader.rs b/components/net/tests/http_loader.rs
index f1a4d789c2f..e514eabebf3 100644
--- a/components/net/tests/http_loader.rs
+++ b/components/net/tests/http_loader.rs
@@ -12,7 +12,7 @@ use std::sync::{Arc, Mutex, RwLock};
use std::time::Duration;
use base::id::TEST_PIPELINE_ID;
-use cookie_rs::Cookie as CookiePair;
+use cookie::Cookie as CookiePair;
use crossbeam_channel::{unbounded, Receiver};
use devtools_traits::{
ChromeToDevtoolsControlMsg, DevtoolsControlMsg, HttpRequest as DevtoolsHttpRequest,
@@ -30,7 +30,7 @@ use http::{Method, StatusCode};
use hyper::{Body, Request as HyperRequest, Response as HyperResponse};
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
-use net::cookie::Cookie;
+use net::cookie::ServoCookie;
use net::cookie_storage::CookieStorage;
use net::http_loader::determine_requests_referrer;
use net::resource_thread::AuthCacheEntry;
@@ -648,7 +648,7 @@ fn test_load_sets_requests_cookies_header_for_url_by_getting_cookies_from_the_re
{
let mut cookie_jar = context.state.cookie_jar.write().unwrap();
- let cookie = Cookie::new_wrapped(
+ let cookie = ServoCookie::new_wrapped(
CookiePair::new("mozillaIs".to_owned(), "theBest".to_owned()),
&url,
CookieSource::HTTP,
@@ -694,7 +694,7 @@ fn test_load_sends_cookie_if_nonhttp() {
{
let mut cookie_jar = context.state.cookie_jar.write().unwrap();
- let cookie = Cookie::new_wrapped(
+ let cookie = ServoCookie::new_wrapped(
CookiePair::new("mozillaIs".to_owned(), "theBest".to_owned()),
&url,
CookieSource::NonHTTP,
@@ -1192,7 +1192,7 @@ fn test_redirect_from_x_to_y_provides_y_cookies_from_y() {
let mut context = new_fetch_context(None, None, None);
{
let mut cookie_jar = context.state.cookie_jar.write().unwrap();
- let cookie_x = Cookie::new_wrapped(
+ let cookie_x = ServoCookie::new_wrapped(
CookiePair::new("mozillaIsNot".to_owned(), "dotOrg".to_owned()),
&url_x,
CookieSource::HTTP,
@@ -1201,7 +1201,7 @@ fn test_redirect_from_x_to_y_provides_y_cookies_from_y() {
cookie_jar.push(cookie_x, &url_x, CookieSource::HTTP);
- let cookie_y = Cookie::new_wrapped(
+ let cookie_y = ServoCookie::new_wrapped(
CookiePair::new("mozillaIs".to_owned(), "theBest".to_owned()),
&url_y,
CookieSource::HTTP,
diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs
index f50670ed914..9ea59dce3ff 100644
--- a/components/net/websocket_loader.rs
+++ b/components/net/websocket_loader.rs
@@ -39,7 +39,7 @@ use url::Url;
use crate::async_runtime::HANDLE;
use crate::connector::{create_tls_config, CACertificates, TlsConfig};
-use crate::cookie::Cookie;
+use crate::cookie::ServoCookie;
use crate::fetch::methods::should_be_blocked_due_to_bad_port;
use crate::hosts::replace_host;
use crate::http_loader::HttpState;
@@ -127,7 +127,7 @@ fn process_ws_response(
for cookie in response.headers().get_all(header::SET_COOKIE) {
if let Ok(s) = std::str::from_utf8(cookie.as_bytes()) {
if let Some(cookie) =
- Cookie::from_cookie_string(s.into(), resource_url, CookieSource::HTTP)
+ ServoCookie::from_cookie_string(s.into(), resource_url, CookieSource::HTTP)
{
jar.push(cookie, resource_url, CookieSource::HTTP);
}
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs
index 6bdfb645c4e..1d6041e2ad1 100644
--- a/components/webdriver_server/lib.rs
+++ b/components/webdriver_server/lib.rs
@@ -20,6 +20,7 @@ use base::id::{BrowsingContextId, TopLevelBrowsingContextId};
use base64::Engine;
use capabilities::ServoCapabilities;
use compositing_traits::ConstellationMsg;
+use cookie::{CookieBuilder, Expiration};
use crossbeam_channel::{after, select, unbounded, Receiver, Sender};
use euclid::{Rect, Size2D};
use http::method::Method;
@@ -92,9 +93,10 @@ fn cookie_msg_to_cookie(cookie: cookie::Cookie) -> Cookie {
value: cookie.value().to_owned(),
path: cookie.path().map(|s| s.to_owned()),
domain: cookie.domain().map(|s| s.to_owned()),
- expiry: cookie
- .expires()
- .map(|time| Date(time.to_timespec().sec as u64)),
+ expiry: cookie.expires().and_then(|expiration| match expiration {
+ Expiration::DateTime(date_time) => Some(Date(date_time.unix_timestamp() as u64)),
+ Expiration::Session => None,
+ }),
secure: cookie.secure().unwrap_or(false),
http_only: cookie.http_only().unwrap_or(false),
same_site: cookie.same_site().map(|s| s.to_string()),
@@ -1254,19 +1256,19 @@ impl Handler {
) -> WebDriverResult<WebDriverResponse> {
let (sender, receiver) = ipc::channel().unwrap();
- let cookie = cookie::Cookie::build(params.name.to_owned(), params.value.to_owned())
+ let cookie_builder = CookieBuilder::new(params.name.to_owned(), params.value.to_owned())
.secure(params.secure)
.http_only(params.httpOnly);
- let cookie = match params.domain {
- Some(ref domain) => cookie.domain(domain.to_owned()),
- _ => cookie,
+ let cookie_builder = match params.domain {
+ Some(ref domain) => cookie_builder.domain(domain.to_owned()),
+ _ => cookie_builder,
};
- let cookie = match params.path {
- Some(ref path) => cookie.path(path.to_owned()).finish(),
- _ => cookie.finish(),
+ let cookie_builder = match params.path {
+ Some(ref path) => cookie_builder.path(path.to_owned()),
+ _ => cookie_builder,
};
- let cmd = WebDriverScriptCommand::AddCookie(cookie, sender);
+ let cmd = WebDriverScriptCommand::AddCookie(cookie_builder.build(), sender);
self.browsing_context_script_command(cmd)?;
match receiver.recv().unwrap() {
Ok(_) => Ok(WebDriverResponse::Void),
diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json
index de68405fbd8..67e93b63be7 100644
--- a/tests/wpt/meta/MANIFEST.json
+++ b/tests/wpt/meta/MANIFEST.json
@@ -662815,7 +662815,7 @@
]
],
"document-cookie.html": [
- "2af65effeb291f829334d77a4072a41033f4e4a9",
+ "5310fd8e8a36285dd1e9ae3d46042ec227eefa51",
[
null,
{}
diff --git a/tests/wpt/tests/html/dom/documents/resource-metadata-management/document-cookie.html b/tests/wpt/tests/html/dom/documents/resource-metadata-management/document-cookie.html
index 2af65effeb2..5310fd8e8a3 100644
--- a/tests/wpt/tests/html/dom/documents/resource-metadata-management/document-cookie.html
+++ b/tests/wpt/tests/html/dom/documents/resource-metadata-management/document-cookie.html
@@ -26,7 +26,7 @@ for (const i in TEST_CASES) {
// Cleanup
if (document.cookie.includes("=")) {
- document.cookie = document.cookie.split("=")[0] + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
+ document.cookie = document.cookie.split("=")[0] + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
assert_equals(document.cookie, "");
}
}, t.name);