Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added WebDriver DeleteCookies Function #23006

Merged
merged 1 commit into from Apr 19, 2019
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Add webdriver deletecookies function

  • Loading branch information
aditj committed Apr 19, 2019
commit 64961cc9c1ef389a3b36b89d71782872a8b48a14
@@ -143,6 +143,10 @@ impl Cookie {
self.last_access = now();
}

pub fn set_expiry_time_negative(&mut self) {
self.expiry_time = Some(Serde(now() - Duration::seconds(1)));
}

// http://tools.ietf.org/html/rfc6265#section-5.1.4
pub fn default_path(request_path: &str) -> &str {
// Step 2
@@ -83,6 +83,13 @@ impl CookieStorage {
Ok(None)
}
}
pub fn clear_storage(&mut self, url: &ServoUrl) {
let domain = reg_host(url.host_str().unwrap_or(""));
let cookies = self.cookies_map.entry(domain).or_insert(vec![]);
for cookie in cookies.iter_mut() {
cookie.set_expiry_time_negative();
}
}

// http://tools.ietf.org/html/rfc6265#section-5.3
pub fn push(&mut self, mut cookie: Cookie, url: &ServoUrl, source: CookieSource) {
@@ -236,6 +236,14 @@ impl ResourceChannelManager {
http_state,
),
},
CoreResourceMsg::DeleteCookies(request) => {
http_state
.cookie_jar
.write()
.unwrap()
.clear_storage(&request);
return true;
},
CoreResourceMsg::FetchRedirect(req_init, res_init, sender, cancel_chan) => self
.resource_manager
.fetch(req_init, Some(res_init), sender, http_state, cancel_chan),
@@ -397,6 +397,7 @@ pub enum CoreResourceMsg {
IpcSender<Vec<Serde<Cookie<'static>>>>,
CookieSource,
),
DeleteCookies(ServoUrl),
/// Get a history state by a given history state id
GetHistoryState(HistoryStateId, IpcSender<Option<Vec<u8>>>),
/// Set a history state for a given history state id
@@ -1844,6 +1844,9 @@ impl ScriptThread {
WebDriverScriptCommand::AddCookie(params, reply) => {
webdriver_handlers::handle_add_cookie(&*documents, pipeline_id, params, reply)
},
WebDriverScriptCommand::DeleteCookies(reply) => {
webdriver_handlers::handle_delete_cookies(&*documents, pipeline_id, reply)
},
WebDriverScriptCommand::ExecuteScript(script, reply) => {
webdriver_handlers::handle_execute_script(&*documents, pipeline_id, script, reply)
},
@@ -34,7 +34,7 @@ use js::rust::HandleValue;
use msg::constellation_msg::BrowsingContextId;
use msg::constellation_msg::PipelineId;
use net_traits::CookieSource::{NonHTTP, HTTP};
use net_traits::CoreResourceMsg::{GetCookiesDataForUrl, SetCookieForUrl};
use net_traits::CoreResourceMsg::{DeleteCookies, GetCookiesDataForUrl, SetCookieForUrl};
use net_traits::IpcSend;
use script_traits::webdriver_msg::WebDriverCookieError;
use script_traits::webdriver_msg::{
@@ -356,6 +356,27 @@ pub fn handle_add_cookie(
.unwrap();
}

pub fn handle_delete_cookies(
documents: &Documents,
pipeline: PipelineId,
reply: IpcSender<Result<(), ()>>,
) {
let document = match documents.find_document(pipeline) {

This comment has been minimized.

@aditj

aditj Mar 26, 2019

Author Contributor

@jdm Dont we select the document by using a pipeline id?

This comment has been minimized.

@jdm

jdm Mar 26, 2019

Member

We do, but there is only one resource thread that is shared between all documents so the message always goes to the same place.

Some(document) => document,
None => {
return reply.send(Err(())).unwrap();
},
};
let url = document.url();
document
.window()
.upcast::<GlobalScope>()
.resource_threads()
.send(DeleteCookies(url))
.unwrap();

This comment has been minimized.

@jdm

jdm Apr 8, 2019

Member

Let's write this as:

document
    .window()
    .upcast::<GlobalScope>()
    .resource_threads()
    .send(DeleteCookies(url))
    .unwrap();
reply.send(Ok(());

This comment has been minimized.

@aditj

aditj Apr 12, 2019

Author Contributor

A small hitch, closing parentheses in the last line
reply.send(Ok(()));

This comment has been minimized.

@aditj

aditj Apr 16, 2019

Author Contributor

@jdm I think this change made the build fail since the result can be a Err variant too. :/

This comment has been minimized.

@CYBAI

CYBAI Apr 16, 2019

Collaborator

I guess you need an unwrap for this send 👀?

This comment has been minimized.

@jdm

jdm Apr 16, 2019

Member

We can write let _ = reply.send(Ok(())); to ignore the error.

let _ = reply.send(Ok(()));
}

pub fn handle_get_title(documents: &Documents, pipeline: PipelineId, reply: IpcSender<String>) {
// TODO: Return an error if the pipeline doesn't exist.
let title = documents
@@ -21,6 +21,7 @@ pub enum WebDriverScriptCommand {
Cookie<'static>,
IpcSender<Result<(), WebDriverCookieError>>,
),
DeleteCookies(IpcSender<Result<(), ()>>),
ExecuteScript(String, IpcSender<WebDriverJSResult>),
ExecuteAsyncScript(String, IpcSender<WebDriverJSResult>),
FindElementCSS(String, IpcSender<Result<Option<String>, ()>>),
@@ -971,6 +971,19 @@ impl Handler {
}
}

fn handle_delete_cookies(&self) -> WebDriverResult<WebDriverResponse> {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::DeleteCookies(sender);
self.browsing_context_script_command(cmd)?;
match receiver.recv().unwrap() {
Ok(_) => Ok(WebDriverResponse::Void),
Err(_) => Err(WebDriverError::new(
ErrorStatus::NoSuchWindow,
"No such window found.",
)),
}
}

fn handle_set_timeouts(
&mut self,
parameters: &TimeoutsParameters,
@@ -1261,6 +1274,7 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler {
WebDriverCommand::ElementSendKeys(ref element, ref keys) => {
self.handle_element_send_keys(element, keys)
},
WebDriverCommand::DeleteCookies => self.handle_delete_cookies(),
WebDriverCommand::SetTimeouts(ref x) => self.handle_set_timeouts(x),
WebDriverCommand::TakeScreenshot => self.handle_take_screenshot(),
WebDriverCommand::Extension(ref extension) => match *extension {
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.