mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Auto merge of #25598 - pshaughn:cookieexpire, r=jdm
Expire cookies on lookup <!-- Please describe your changes on the following line: --> Cookies were rarely, if ever, expiring; this caused tests that used max-age=0 as a cookie deletion method to have cookies they shouldn't have had. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #24911 <!-- Either: --> - [X] There are tests for these changes <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
commit
f3e6351e47
7 changed files with 16 additions and 70 deletions
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue