diff options
author | Rebecca <rebstar6@gmail.com> | 2016-02-08 17:26:22 -0500 |
---|---|---|
committer | Rebecca <rebstar6@gmail.com> | 2016-02-17 14:50:52 -0500 |
commit | cf6fd6dafe9b4abf73dc1c38fa270e786de82952 (patch) | |
tree | e2705e9aca73a42cba01e88f6b646de05a0f4ebd /components/net/websocket_loader.rs | |
parent | 7c249b1d539c37ab54e9fabfaf0442a5ac0243a9 (diff) | |
download | servo-cf6fd6dafe9b4abf73dc1c38fa270e786de82952.tar.gz servo-cf6fd6dafe9b4abf73dc1c38fa270e786de82952.zip |
Add support for websocket request and response cookies
Also change expected behavior to pass for all in tests/wpt/web-platform-tests/websockets/cookies
Diffstat (limited to 'components/net/websocket_loader.rs')
-rw-r--r-- | components/net/websocket_loader.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs index e25d7e7389f..52a9bb6cff3 100644 --- a/components/net/websocket_loader.rs +++ b/components/net/websocket_loader.rs @@ -2,13 +2,15 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use cookie_storage::CookieStorage; +use http_loader; use hyper::header::Host; use net_traits::MessageData; use net_traits::hosts::replace_hosts; use net_traits::unwrap_websocket_protocol; use net_traits::{WebSocketCommunicate, WebSocketConnectData, WebSocketDomAction, WebSocketNetworkEvent}; use std::ascii::AsciiExt; -use std::sync::{Arc, Mutex}; +use std::sync::{Arc, Mutex, RwLock}; use std::thread; use util::thread::spawn_named; use websocket::client::receiver::Receiver; @@ -25,7 +27,8 @@ use websocket::{Client, Message}; /// *Establish a WebSocket Connection* as defined in RFC 6455. fn establish_a_websocket_connection(resource_url: &Url, net_url: (Host, String, bool), - origin: String, protocols: Vec<String>) + origin: String, protocols: Vec<String>, + cookie_jar: Arc<RwLock<CookieStorage>>) -> WebSocketResult<(Headers, Sender<WebSocketStream>, Receiver<WebSocketStream>)> { let host = Host { @@ -40,6 +43,8 @@ fn establish_a_websocket_connection(resource_url: &Url, net_url: (Host, String, request.headers.set(WebSocketProtocol(protocols.clone())); }; + http_loader::set_request_cookies(resource_url.clone(), &mut request.headers, &cookie_jar); + let response = try!(request.send()); try!(response.validate()); @@ -58,7 +63,7 @@ fn establish_a_websocket_connection(resource_url: &Url, net_url: (Host, String, } -pub fn init(connect: WebSocketCommunicate, connect_data: WebSocketConnectData) { +pub fn init(connect: WebSocketCommunicate, connect_data: WebSocketConnectData, cookie_jar: Arc<RwLock<CookieStorage>>) { spawn_named(format!("WebSocket connection to {}", connect_data.resource_url), move || { // Step 8: Protocols. @@ -78,7 +83,8 @@ pub fn init(connect: WebSocketCommunicate, connect_data: WebSocketConnectData) { let channel = establish_a_websocket_connection(&connect_data.resource_url, net_url, connect_data.origin, - connect_data.protocols.clone()); + connect_data.protocols.clone(), + cookie_jar); let (_, ws_sender, mut receiver) = match channel { Ok(channel) => { let _ = connect.event_sender.send(WebSocketNetworkEvent::ConnectionEstablished(channel.0.clone(), |