diff options
author | Keegan McAllister <kmcallister@mozilla.com> | 2013-10-29 18:22:42 -0700 |
---|---|---|
committer | Jack Moffitt <jack@metajack.im> | 2013-10-31 14:58:55 -0600 |
commit | cbcd04ffa82146aa4b68f27814d3844235ac1344 (patch) | |
tree | 47f827e3b05df1fdf40e6938b2e80726e4de7f99 /src/components/script/html/hubbub_html_parser.rs | |
parent | da6c27c421b6f7bd6e805070e9b1b6a5f9e67621 (diff) | |
download | servo-cbcd04ffa82146aa4b68f27814d3844235ac1344.tar.gz servo-cbcd04ffa82146aa4b68f27814d3844235ac1344.zip |
Store the Page's final URL before parsing
We were parsing URLs like
//bits.wikimedia.org/static-1.22wmf22/skins/vector/images/search-ltr.png?303-4
as local filenames because HTMLImageElement::update_image didn't have a
current_url to pass to make_url().
Diffstat (limited to 'src/components/script/html/hubbub_html_parser.rs')
-rw-r--r-- | src/components/script/html/hubbub_html_parser.rs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index 0364befdb53..7aa91104507 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -129,7 +129,6 @@ pub enum HtmlDiscoveryMessage { pub struct HtmlParserResult { root: AbstractNode<ScriptView>, discovery_port: Port<HtmlDiscoveryMessage>, - url: Url, } trait NodeWrapping { @@ -350,6 +349,17 @@ pub fn parse_html(cx: *JSContext, let url2 = load_response.metadata.final_url.clone(); let url3 = url2.clone(); + // Store the final URL before we start parsing, so that DOM routines + // (e.g. HTMLImageElement::update_image) can resolve relative URLs + // correctly. + // + // FIXME: is this safe? When we instead pass an &mut Page to parse_html, + // we crash with a dynamic borrow failure. + let page = page_from_context(cx); + unsafe { + (*page).url = Some((url2.clone(), true)); + } + // Build the root node. let root = @HTMLHtmlElement { htmlelement: HTMLElement::new(HTMLHtmlElementTypeId, ~"html", document) }; let root = unsafe { Node::as_abstract_node(cx, root) }; @@ -595,7 +605,6 @@ pub fn parse_html(cx: *JSContext, HtmlParserResult { root: root, discovery_port: discovery_port, - url: load_response.metadata.final_url, } } |