aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/htmlimageelement.rs
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-06-10 19:22:39 +0200
committerMs2ger <ms2ger@gmail.com>2014-06-11 19:51:08 +0200
commitc41dd2477d19e68272afc11f198f2a71c320abd2 (patch)
tree0b1c8dafee2ae59ea39da74455b89b3bd3777549 /src/components/script/dom/htmlimageelement.rs
parentbe375de91f1b3ae4366cb12dd2cd103c138d7d8e (diff)
downloadservo-c41dd2477d19e68272afc11f198f2a71c320abd2.tar.gz
servo-c41dd2477d19e68272afc11f198f2a71c320abd2.zip
Use internal mutability for HTMLImageElement.
Diffstat (limited to 'src/components/script/dom/htmlimageelement.rs')
-rw-r--r--src/components/script/dom/htmlimageelement.rs30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/components/script/dom/htmlimageelement.rs b/src/components/script/dom/htmlimageelement.rs
index d2a0346c879..35d85441e64 100644
--- a/src/components/script/dom/htmlimageelement.rs
+++ b/src/components/script/dom/htmlimageelement.rs
@@ -17,12 +17,13 @@ use servo_util::geometry::to_px;
use servo_net::image_cache_task;
use servo_util::url::parse_url;
use servo_util::str::DOMString;
+use std::cell::RefCell;
use url::Url;
#[deriving(Encodable)]
pub struct HTMLImageElement {
pub htmlelement: HTMLElement,
- image: Untraceable<Option<Url>>,
+ image: Untraceable<RefCell<Option<Url>>>,
}
impl HTMLImageElementDerived for EventTarget {
@@ -32,25 +33,24 @@ impl HTMLImageElementDerived for EventTarget {
}
trait PrivateHTMLImageElementHelpers {
- fn update_image(&mut self, value: Option<DOMString>, url: Option<Url>);
+ fn update_image(&self, value: Option<DOMString>, url: Option<Url>);
}
impl<'a> PrivateHTMLImageElementHelpers for JSRef<'a, 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.
- fn update_image(&mut self, value: Option<DOMString>, url: Option<Url>) {
- let self_alias = self.clone();
- let node_alias: &JSRef<Node> = NodeCast::from_ref(&self_alias);
- let document = node_alias.owner_doc().root();
+ fn update_image(&self, value: Option<DOMString>, url: Option<Url>) {
+ let node: &JSRef<Node> = NodeCast::from_ref(self);
+ let document = node.owner_doc().root();
let window = document.deref().window.root();
let image_cache = &window.image_cache_task;
match value {
None => {
- *self.image = None;
+ *self.image.deref().borrow_mut() = None;
}
Some(src) => {
let img_url = parse_url(src.as_slice(), url);
- *self.image = Some(img_url.clone());
+ *self.image.deref().borrow_mut() = Some(img_url.clone());
// inform the image cache to load this, but don't store a
// handle.
@@ -67,7 +67,7 @@ impl HTMLImageElement {
pub fn new_inherited(localName: DOMString, document: &JSRef<Document>) -> HTMLImageElement {
HTMLImageElement {
htmlelement: HTMLElement::new_inherited(HTMLImageElementTypeId, localName, document),
- image: Untraceable::new(None),
+ image: Untraceable::new(RefCell::new(None)),
}
}
@@ -78,12 +78,12 @@ impl HTMLImageElement {
}
pub trait LayoutHTMLImageElementHelpers {
- unsafe fn image<'a>(&'a self) -> &'a Option<Url>;
+ unsafe fn image(&self) -> Option<Url>;
}
impl LayoutHTMLImageElementHelpers for JS<HTMLImageElement> {
- unsafe fn image<'a>(&'a self) -> &'a Option<Url> {
- &*(*self.unsafe_get()).image
+ unsafe fn image(&self) -> Option<Url> {
+ (*self.unsafe_get()).image.borrow().clone()
}
}
@@ -253,8 +253,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLImageElement> {
if "src" == name.as_slice() {
let window = window_from_node(self).root();
let url = Some(window.deref().get_url());
- let mut self_alias = self.clone();
- self_alias.update_image(Some(value), url);
+ self.update_image(Some(value), url);
}
}
@@ -265,8 +264,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLImageElement> {
}
if "src" == name.as_slice() {
- let mut self_alias = self.clone();
- self_alias.update_image(None, None);
+ self.update_image(None, None);
}
}
}