diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 4322a8cfa8b..4942b59b132 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -589,7 +589,7 @@ addHTMLElement('HTMLHeadingElement') addHTMLElement('HTMLHtmlElement') addHTMLElement('HTMLHRElement') addHTMLElement('HTMLIFrameElement', needsAbstract=['sandbox']) -addHTMLElement('HTMLImageElement', needsAbstract=['width', 'height']) +addHTMLElement('HTMLImageElement', needsAbstract=['src', 'width', 'height']) addHTMLElement('HTMLInputElement') addHTMLElement('HTMLLabelElement') addHTMLElement('HTMLLegendElement') diff --git a/src/components/script/dom/htmlimageelement.rs b/src/components/script/dom/htmlimageelement.rs index c0922859ce7..4af8a36def2 100644 --- a/src/components/script/dom/htmlimageelement.rs +++ b/src/components/script/dom/htmlimageelement.rs @@ -6,8 +6,10 @@ use dom::bindings::utils::{DOMString, str, null_string, ErrorResult}; use dom::htmlelement::HTMLElement; use dom::node::{ScriptView, AbstractNode}; use extra::url::Url; -use layout_interface::{ContentBoxQuery, ContentBoxResponse}; use gfx::geometry::to_px; +use layout_interface::{ContentBoxQuery, ContentBoxResponse}; +use servo_net::image_cache_task; +use servo_util::url::make_url; pub struct HTMLImageElement { parent: HTMLElement, @@ -15,6 +17,41 @@ pub struct HTMLImageElement { } impl HTMLImageElement { + /// Makes the local `image` member match the status of the `src` attribute and starts + /// prefetching the image. This method must be called after `src` is changed. + pub fn update_image(&mut self) { + let elem = &mut self.parent.parent; + let src_opt = elem.get_attr("src").map(|x| x.to_str()); + let node = &mut elem.parent; + match node.owner_doc { + Some(doc) => { + match doc.with_base(|doc| doc.window) { + Some(window) => { + match src_opt { + None => {} + Some(src) => { + let page = window.page; + let img_url = make_url(src, + (*page).url + .map(|&(ref url, _)| url.clone())); + self.image = Some(img_url.clone()); + + // inform the image cache to load this, but don't store a + // handle. + // + // TODO (Issue #84): don't prefetch if we are within a + //