From 8838f2460e03c26df54707978970c1e198bf2a84 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 9 Dec 2014 15:05:50 +0100 Subject: [PATCH 1/3] Rename base_url to final_url in ScriptTask::load. This seems like a clearer name, as it's used for more than just as a base url. --- components/script/script_task.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 01473c34681..6a213c14b54 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -744,7 +744,7 @@ impl ScriptTask { }); } - let (parser_input, base_url) = if !is_javascript { + let (parser_input, final_url) = if !is_javascript { // Wait for the LoadResponse so that the parser knows the final URL. let (input_chan, input_port) = channel(); self.resource_task.send(Load(NetLoadData { @@ -764,16 +764,16 @@ impl ScriptTask { }); }); - let base_url = load_response.metadata.final_url.clone(); + let final_url = load_response.metadata.final_url.clone(); { // Store the final URL before we start parsing, so that DOM routines // (e.g. HTMLImageElement::update_image) can resolve relative URLs // correctly. - *page.mut_url() = Some((base_url.clone(), true)); + *page.mut_url() = Some((final_url.clone(), true)); } - (InputUrl(load_response), base_url) + (InputUrl(load_response), final_url) } else { let evalstr = load_data.url.non_relative_scheme_data().unwrap(); let jsval = window.evaluate_js_with_result(evalstr); @@ -781,7 +781,7 @@ impl ScriptTask { (InputString(strval.unwrap_or("".to_string())), doc_url) }; - parse_html(*document, parser_input, base_url); + parse_html(*document, parser_input, final_url); url = page.get_url().clone(); document.set_ready_state(DocumentReadyStateValues::Interactive); From 795327d5c4984957af7720a91159f91f9162be62 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 9 Dec 2014 15:11:58 +0100 Subject: [PATCH 2/3] Pass a borrowed Url to parse_html. It does not need to take ownership, and I want to reuse final_url in the caller. --- components/script/parse/html.rs | 2 +- components/script/script_task.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs index c629305e931..e4980fd6a1c 100644 --- a/components/script/parse/html.rs +++ b/components/script/parse/html.rs @@ -163,7 +163,7 @@ impl<'a> TreeSink for servohtmlparser::Sink { pub fn parse_html(document: JSRef, input: HTMLInput, - url: Url) { + url: &Url) { let parser = ServoHTMLParser::new(Some(url.clone()), document).root(); let parser: JSRef = *parser; diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 6a213c14b54..c778d2792fc 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -781,7 +781,7 @@ impl ScriptTask { (InputString(strval.unwrap_or("".to_string())), doc_url) }; - parse_html(*document, parser_input, final_url); + parse_html(*document, parser_input, &final_url); url = page.get_url().clone(); document.set_ready_state(DocumentReadyStateValues::Interactive); From 64b0a6b0b411cf278a42babb7a4f7b9b8763ceee Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 9 Dec 2014 15:14:58 +0100 Subject: [PATCH 3/3] Reuse the final_url in ScriptTask::load. In both the javascript and non-javascript url cases, final_url is set to the same url as is stored by the Page. --- components/script/script_task.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/components/script/script_task.rs b/components/script/script_task.rs index c778d2792fc..f41558b598c 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -690,7 +690,7 @@ impl ScriptTask { /// The entry point to document loading. Defines bindings, sets up the window and document /// objects, parses HTML and CSS, and kicks off initial layout. fn load(&self, pipeline_id: PipelineId, load_data: LoadData) { - let mut url = load_data.url.clone(); + let url = load_data.url.clone(); debug!("ScriptTask: loading {} on page {}", url, pipeline_id); let page = self.page.borrow_mut(); @@ -782,19 +782,18 @@ impl ScriptTask { }; parse_html(*document, parser_input, &final_url); - url = page.get_url().clone(); document.set_ready_state(DocumentReadyStateValues::Interactive); // Kick off the initial reflow of the page. - debug!("kicking off initial reflow of {}", url); + debug!("kicking off initial reflow of {}", final_url); document.content_changed(NodeCast::from_ref(*document)); window.flush_layout(); { // No more reflow required let mut page_url = page.mut_url(); - *page_url = Some((url.clone(), false)); + *page_url = Some((final_url.clone(), false)); } // https://html.spec.whatwg.org/multipage/#the-end step 4 @@ -814,7 +813,7 @@ impl ScriptTask { let wintarget: JSRef = EventTargetCast::from_ref(*window); let _ = wintarget.dispatch_event_with_target(Some(doctarget), *event); - *page.fragment_name.borrow_mut() = url.fragment; + *page.fragment_name.borrow_mut() = final_url.fragment; let ConstellationChan(ref chan) = self.constellation_chan; chan.send(LoadCompleteMsg);