Skip to content

Commit 4e74967

Browse files
author
bors-servo
authored
Auto merge of #10826 - danlrobertson:cookies, r=<try>
Add webdriver commands for (Get|Add)Cookie Add the webdriver commands for GetCookie and AddCookie. In addition the basic messages for sending cookie data back and forth from the resource thread needed to be created and the handlers for those messages were created as well. Do we plan to have some sort of test suite for the webdriver at some point? At this point I primarily test my PRs with basic shell scripts with a lot of `curl` and `jq`. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10826) <!-- Reviewable:end -->
2 parents 6a09c36 + 2467231 commit 4e74967

File tree

19 files changed

+214
-23
lines changed

19 files changed

+214
-23
lines changed

components/msg/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ serde_macros = "0.7"
2424
url = {version = "1.0.0", features = ["heap_size", "serde"]}
2525
util = {path = "../util", features = ["servo"]}
2626
webrender_traits = {git = "https://github.com/servo/webrender_traits"}
27+
cookie = { version = "0.2.5", features = ["serialize-serde", "serialize-rustc" ] }

components/msg/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#[allow(unused_extern_crates)]
1111
#[macro_use]
1212
extern crate bitflags;
13+
extern crate cookie as cookie_rs;
1314
extern crate euclid;
1415
extern crate heapsize;
1516
extern crate hyper;

components/msg/webdriver_msg.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,23 @@
33
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
44

55
use constellation_msg::PipelineId;
6+
use cookie_rs::Cookie;
67
use euclid::rect::Rect;
78
use ipc_channel::ipc::IpcSender;
89
use rustc_serialize::json::{Json, ToJson};
910
use url::Url;
1011

1112
#[derive(Deserialize, Serialize)]
1213
pub enum WebDriverScriptCommand {
14+
AddCookie(Cookie, IpcSender<Result<(), WebDriverCookieError>>),
1315
ExecuteScript(String, IpcSender<WebDriverJSResult>),
1416
ExecuteAsyncScript(String, IpcSender<WebDriverJSResult>),
1517
FindElementCSS(String, IpcSender<Result<Option<String>, ()>>),
1618
FindElementsCSS(String, IpcSender<Result<Vec<String>, ()>>),
1719
FocusElement(String, IpcSender<Result<(), ()>>),
1820
GetActiveElement(IpcSender<Option<String>>),
21+
GetCookie(String, IpcSender<Vec<Cookie>>),
22+
GetCookies(IpcSender<Vec<Cookie>>),
1923
GetElementAttribute(String, String, IpcSender<Result<Option<String>, ()>>),
2024
GetElementCSS(String, String, IpcSender<Result<String, ()>>),
2125
GetElementRect(String, IpcSender<Result<Rect<f64>, ()>>),
@@ -28,6 +32,12 @@ pub enum WebDriverScriptCommand {
2832
GetTitle(IpcSender<String>)
2933
}
3034

35+
#[derive(Deserialize, Serialize)]
36+
pub enum WebDriverCookieError {
37+
InvalidDomain,
38+
UnableToSetCookie
39+
}
40+
3141
#[derive(Deserialize, Serialize)]
3242
pub enum WebDriverJSValue {
3343
Undefined,

components/net/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ path = "lib.rs"
1212
bitflags = "0.7"
1313
brotli = {git = "https://github.com/ende76/brotli-rs"}
1414
content-blocker = "0.2"
15-
cookie = {version = "0.2.4", features = ["serialize-rustc"]}
15+
cookie = { version = "0.2.5", features = ["serialize-serde", "serialize-rustc" ] }
1616
device = {git = "https://github.com/servo/devices"}
1717
devtools_traits = {path = "../devtools_traits"}
1818
flate2 = "0.2.0"

components/net/cookie_storage.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//! http://tools.ietf.org/html/rfc6265
77
88
use cookie::Cookie;
9+
use cookie_rs;
910
use net_traits::CookieSource;
1011
use std::cmp::Ordering;
1112
use url::Url;
@@ -114,4 +115,12 @@ impl CookieStorage {
114115
_ => Some(result)
115116
}
116117
}
118+
119+
pub fn cookies_data_for_url<'a>(&'a mut self, url: &'a Url,
120+
source: CookieSource) -> Box<Iterator<Item=cookie_rs::Cookie> + 'a> {
121+
Box::new(self.cookies.iter_mut().filter(move |c| { c.appropriate_for_url(url, source) }).map(|c| {
122+
c.touch();
123+
c.cookie.clone()
124+
}))
125+
}
117126
}

components/net/resource_thread.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use chrome_loader;
88
use connector::{Connector, create_http_connector};
99
use content_blocker::BLOCKED_CONTENT_RULES;
1010
use cookie;
11+
use cookie_rs;
1112
use cookie_storage::CookieStorage;
1213
use data_loader;
1314
use devtools_traits::DevtoolsControlMsg;
@@ -277,10 +278,17 @@ impl ResourceChannelManager {
277278
self.resource_manager.websocket_connect(connect, connect_data, group),
278279
CoreResourceMsg::SetCookiesForUrl(request, cookie_list, source) =>
279280
self.resource_manager.set_cookies_for_url(request, cookie_list, source, group),
281+
CoreResourceMsg::SetCookiesForUrlWithData(request, cookie, source) =>
282+
self.resource_manager.set_cookies_for_url_with_data(request, cookie, source, group),
280283
CoreResourceMsg::GetCookiesForUrl(url, consumer, source) => {
281284
let mut cookie_jar = group.cookie_jar.write().unwrap();
282285
consumer.send(cookie_jar.cookies_for_url(&url, source)).unwrap();
283286
}
287+
CoreResourceMsg::GetCookiesDataForUrl(url, consumer, source) => {
288+
let mut cookie_jar = group.cookie_jar.write().unwrap();
289+
let cookies = cookie_jar.cookies_data_for_url(&url, source).collect();
290+
consumer.send(cookies).unwrap();
291+
}
284292
CoreResourceMsg::Cancel(res_id) => {
285293
if let Some(cancel_sender) = self.resource_manager.cancel_load_map.get(&res_id) {
286294
let _ = cancel_sender.send(());
@@ -488,6 +496,14 @@ impl CoreResourceManager {
488496
}
489497
}
490498

499+
fn set_cookies_for_url_with_data(&mut self, request: Url, cookie: cookie_rs::Cookie, source: CookieSource,
500+
resource_group: &ResourceGroup) {
501+
if let Some(cookie) = cookie::Cookie::new_wrapped(cookie, &request, source) {
502+
let mut cookie_jar = resource_group.cookie_jar.write().unwrap();
503+
cookie_jar.push(cookie, source)
504+
}
505+
}
506+
491507
fn load(&mut self,
492508
load_data: LoadData,
493509
consumer: LoadConsumer,

components/net_traits/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ serde_macros = "0.7"
2323
url = {version = "1.0.0", features = ["heap_size"]}
2424
websocket = "0.17"
2525
uuid = { version = "0.2.2", features = ["v4", "serde"] }
26+
cookie = { version = "0.2.5", features = ["serialize-serde", "serialize-rustc" ] }

components/net_traits/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#![deny(unsafe_code)]
1414

15+
extern crate cookie as cookie_rs;
1516
extern crate heapsize;
1617
extern crate hyper;
1718
extern crate image as piston_image;
@@ -28,6 +29,7 @@ extern crate util;
2829
extern crate uuid;
2930
extern crate websocket;
3031

32+
use cookie_rs::Cookie;
3133
use filemanager_thread::FileManagerThreadMsg;
3234
use heapsize::HeapSizeOf;
3335
use hyper::header::{ContentType, Headers};
@@ -423,8 +425,12 @@ pub enum CoreResourceMsg {
423425
WebsocketConnect(WebSocketCommunicate, WebSocketConnectData),
424426
/// Store a set of cookies for a given originating URL
425427
SetCookiesForUrl(Url, String, CookieSource),
428+
/// Store a set of cookies for a given originating URL
429+
SetCookiesForUrlWithData(Url, Cookie, CookieSource),
426430
/// Retrieve the stored cookies for a given URL
427431
GetCookiesForUrl(Url, IpcSender<Option<String>>, CookieSource),
432+
/// Get a cookie by name for a given originating URL
433+
GetCookiesDataForUrl(Url, IpcSender<Vec<Cookie>>, CookieSource),
428434
/// Cancel a network request corresponding to a given `ResourceId`
429435
Cancel(ResourceId),
430436
/// Synchronization message solely for knowing the state of the ResourceChannelManager loop

components/script/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ app_units = {version = "0.2.3", features = ["plugins"]}
2222
bitflags = "0.7"
2323
canvas_traits = {path = "../canvas_traits"}
2424
caseless = "0.1.0"
25+
cookie = { version = "0.2.5", features = ["serialize-serde", "serialize-rustc" ] }
2526
cssparser = {version = "0.5.4", features = ["heap_size", "serde-serialization"]}
2627
devtools_traits = {path = "../devtools_traits"}
2728
encoding = "0.2"

components/script/dom/document.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1562,7 +1562,7 @@ impl Document {
15621562
}
15631563

15641564
/// https://html.spec.whatwg.org/multipage/#cookie-averse-document-object
1565-
fn is_cookie_averse(&self) -> bool {
1565+
pub fn is_cookie_averse(&self) -> bool {
15661566
self.browsing_context.is_none() || !url_has_network_scheme(&self.url)
15671567
}
15681568

0 commit comments

Comments
 (0)