diff options
-rw-r--r-- | components/net/cookie_storage.rs | 12 | ||||
-rw-r--r-- | components/net/http_loader.rs | 1 | ||||
-rw-r--r-- | components/net/resource_thread.rs | 2 | ||||
-rw-r--r-- | components/net/websocket_loader.rs | 1 | ||||
-rw-r--r-- | tests/wpt/metadata/fetch/api/cors/cors-cookies-redirect.any.js.ini | 15 | ||||
-rw-r--r-- | tests/wpt/metadata/fetch/api/cors/cors-cookies.any.js.ini | 26 | ||||
-rw-r--r-- | tests/wpt/metadata/fetch/api/credentials/cookies.any.js.ini | 29 |
7 files changed, 16 insertions, 70 deletions
diff --git a/components/net/cookie_storage.rs b/components/net/cookie_storage.rs index 0f37ae754b9..f0815635476 100644 --- a/components/net/cookie_storage.rs +++ b/components/net/cookie_storage.rs @@ -10,6 +10,7 @@ use net_traits::pub_domains::reg_suffix; use net_traits::CookieSource; use servo_url::ServoUrl; use std::cmp::Ordering; +use std::collections::hash_map::Entry; use std::collections::HashMap; use time::{self, Tm}; @@ -144,6 +145,17 @@ impl CookieStorage { } } + pub fn remove_expired_cookies_for_url(&mut self, url: &ServoUrl) { + let domain = reg_host(url.host_str().unwrap_or("")); + if let Entry::Occupied(mut entry) = self.cookies_map.entry(domain) { + let cookies = entry.get_mut(); + cookies.retain(|c| !is_cookie_expired(&c)); + if cookies.len() == 0 { + entry.remove_entry(); + } + } + } + // 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 { diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index e48174443a2..0d0d7c46368 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -248,6 +248,7 @@ pub fn set_request_cookies( cookie_jar: &RwLock<CookieStorage>, ) { let mut cookie_jar = cookie_jar.write().unwrap(); + cookie_jar.remove_expired_cookies_for_url(url); if let Some(cookie_list) = cookie_jar.cookies_for_url(url, CookieSource::HTTP) { headers.insert( header::COOKIE, diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs index f85d623fe4f..bdbc815baa4 100644 --- a/components/net/resource_thread.rs +++ b/components/net/resource_thread.rs @@ -291,6 +291,7 @@ impl ResourceChannelManager { }, CoreResourceMsg::GetCookiesForUrl(url, consumer, source) => { let mut cookie_jar = http_state.cookie_jar.write().unwrap(); + cookie_jar.remove_expired_cookies_for_url(&url); consumer .send(cookie_jar.cookies_for_url(&url, source)) .unwrap(); @@ -300,6 +301,7 @@ impl ResourceChannelManager { }, CoreResourceMsg::GetCookiesDataForUrl(url, consumer, source) => { let mut cookie_jar = http_state.cookie_jar.write().unwrap(); + cookie_jar.remove_expired_cookies_for_url(&url); let cookies = cookie_jar .cookies_data_for_url(&url, source) .map(Serde) diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs index 76dccfc2270..93bb031dca8 100644 --- a/components/net/websocket_loader.rs +++ b/components/net/websocket_loader.rs @@ -70,6 +70,7 @@ impl<'a> Handler for Client<'a> { } let mut cookie_jar = self.http_state.cookie_jar.write().unwrap(); + cookie_jar.remove_expired_cookies_for_url(self.resource_url); if let Some(cookie_list) = cookie_jar.cookies_for_url(self.resource_url, CookieSource::HTTP) { req.headers_mut() diff --git a/tests/wpt/metadata/fetch/api/cors/cors-cookies-redirect.any.js.ini b/tests/wpt/metadata/fetch/api/cors/cors-cookies-redirect.any.js.ini deleted file mode 100644 index e741b7a8478..00000000000 --- a/tests/wpt/metadata/fetch/api/cors/cors-cookies-redirect.any.js.ini +++ /dev/null @@ -1,15 +0,0 @@ -[cors-cookies-redirect.any.worker.html] - [Untitled] - expected: FAIL - - [cors-cookies-redirect] - expected: FAIL - - -[cors-cookies-redirect.any.html] - [Untitled] - expected: FAIL - - [cors-cookies-redirect] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/api/cors/cors-cookies.any.js.ini b/tests/wpt/metadata/fetch/api/cors/cors-cookies.any.js.ini deleted file mode 100644 index ccbcd99802d..00000000000 --- a/tests/wpt/metadata/fetch/api/cors/cors-cookies.any.js.ini +++ /dev/null @@ -1,26 +0,0 @@ -[cors-cookies.any.html] - type: testharness - [Include mode: local cookies are not sent with remote request] - expected: FAIL - - [Include mode: remote cookies are not sent with local request] - expected: FAIL - - -[cors-cookies.any.worker.html] - type: testharness - [Include mode: local cookies are not sent with remote request] - expected: FAIL - - [Include mode: remote cookies are not sent with local request] - expected: FAIL - - [Include mode: remote cookies are not sent with local request] - expected: FAIL - - [Include mode: local cookies are not sent with remote request] - expected: FAIL - - [cors-cookies] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/api/credentials/cookies.any.js.ini b/tests/wpt/metadata/fetch/api/credentials/cookies.any.js.ini deleted file mode 100644 index 8902979dbe4..00000000000 --- a/tests/wpt/metadata/fetch/api/credentials/cookies.any.js.ini +++ /dev/null @@ -1,29 +0,0 @@ -[cookies.any.html] - type: testharness - [Include mode: 2 cookies] - expected: FAIL - - [Omit mode: no cookie is stored] - expected: FAIL - - [Same-origin mode: 1 cookie] - expected: FAIL - - [Same-origin mode: 2 cookies] - expected: FAIL - - -[cookies.any.worker.html] - type: testharness - [Include mode: 2 cookies] - expected: FAIL - - [Omit mode: no cookie is stored] - expected: FAIL - - [Same-origin mode: 1 cookie] - expected: FAIL - - [Same-origin mode: 2 cookies] - expected: FAIL - |