From f44470ef523edf27e8e2c855e564283089791388 Mon Sep 17 00:00:00 2001 From: James Graham Date: Sun, 19 Jul 2015 20:40:55 +0100 Subject: [PATCH] Ensure we get the post-redirect url --- components/compositing/constellation.rs | 4 ---- components/msg/constellation_msg.rs | 1 - components/msg/webdriver_msg.rs | 2 ++ components/script/script_task.rs | 2 ++ components/script/webdriver_handlers.rs | 8 ++++++++ components/webdriver_server/lib.rs | 4 ++-- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/components/compositing/constellation.rs b/components/compositing/constellation.rs index 836ba81f976..93192981dc7 100644 --- a/components/compositing/constellation.rs +++ b/components/compositing/constellation.rs @@ -914,10 +914,6 @@ impl Constellation { WebDriverCommandMsg::LoadUrl(pipeline_id, load_data, reply) => { self.load_url_for_webdriver(pipeline_id, load_data, reply); }, - WebDriverCommandMsg::GetUrl(pipeline_id, reply) => { - let pipeline = self.pipeline(pipeline_id); - reply.send(pipeline.url.clone()).unwrap(); - }, WebDriverCommandMsg::Refresh(pipeline_id, reply) => { let load_data = { let pipeline = self.pipeline(pipeline_id); diff --git a/components/msg/constellation_msg.rs b/components/msg/constellation_msg.rs index 24d9f9bfd7a..16c90b670d1 100644 --- a/components/msg/constellation_msg.rs +++ b/components/msg/constellation_msg.rs @@ -336,7 +336,6 @@ impl MozBrowserEvent { #[derive(Deserialize, Serialize)] pub enum WebDriverCommandMsg { LoadUrl(PipelineId, LoadData, IpcSender), - GetUrl(PipelineId, IpcSender), Refresh(PipelineId, IpcSender), ScriptCommand(PipelineId, WebDriverScriptCommand), TakeScreenshot(PipelineId, IpcSender>) diff --git a/components/msg/webdriver_msg.rs b/components/msg/webdriver_msg.rs index 0c2d8860a96..dd90a3492d9 100644 --- a/components/msg/webdriver_msg.rs +++ b/components/msg/webdriver_msg.rs @@ -6,6 +6,7 @@ use constellation_msg::{PipelineId, SubpageId}; use ipc_channel::ipc::IpcSender; use rustc_serialize::json::{Json, ToJson}; +use url::Url; #[derive(Deserialize, Serialize)] pub enum WebDriverScriptCommand { @@ -17,6 +18,7 @@ pub enum WebDriverScriptCommand { GetElementTagName(String, IpcSender>), GetElementText(String, IpcSender>), GetFrameId(WebDriverFrameId, IpcSender, ()>>), + GetUrl(IpcSender), GetTitle(IpcSender) } diff --git a/components/script/script_task.rs b/components/script/script_task.rs index b1f7357a613..4ba2efddef0 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -873,6 +873,8 @@ impl ScriptTask { webdriver_handlers::handle_get_text(&page, pipeline_id, node_id, reply), WebDriverScriptCommand::GetFrameId(frame_id, reply) => webdriver_handlers::handle_get_frame_id(&page, pipeline_id, frame_id, reply), + WebDriverScriptCommand::GetUrl(reply) => + webdriver_handlers::handle_get_url(&page, pipeline_id, reply), WebDriverScriptCommand::GetTitle(reply) => webdriver_handlers::handle_get_title(&page, pipeline_id, reply), WebDriverScriptCommand::ExecuteAsyncScript(script, reply) => diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs index 591e38eb52b..e3b50cb2aaf 100644 --- a/components/script/webdriver_handlers.rs +++ b/components/script/webdriver_handlers.rs @@ -24,6 +24,7 @@ use js::jsval::UndefinedValue; use ipc_channel::ipc::IpcSender; use std::rc::Rc; +use url::Url; fn find_node_by_unique_id(page: &Rc, pipeline: PipelineId, node_id: String) -> Option> { let page = get_page(&*page, pipeline); @@ -179,3 +180,10 @@ pub fn handle_get_name(page: &Rc, None => Err(()) }).unwrap(); } + +pub fn handle_get_url(page: &Rc, + _pipeline: PipelineId, + reply: IpcSender) { + let url = page.document().r().url(); + reply.send(url).unwrap(); +} diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs index a29939b64e1..91506de0330 100644 --- a/components/webdriver_server/lib.rs +++ b/components/webdriver_server/lib.rs @@ -206,10 +206,10 @@ impl Handler { let (sender, receiver) = ipc::channel().unwrap(); let ConstellationChan(ref const_chan) = self.constellation_chan; - let cmd_msg = WebDriverCommandMsg::GetUrl(pipeline_id, sender); + let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, + WebDriverScriptCommand::GetUrl(sender)); const_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap(); - //Wait to get a load event let url = receiver.recv().unwrap(); Ok(WebDriverResponse::Generic(ValueResponse::new(url.serialize().to_json())))