Use internal mutability for HTMLIFrameElement.

This commit is contained in:
Ms2ger 2014-06-10 14:11:49 +02:00
parent 9acba1477c
commit bb0cbb0a74
2 changed files with 6 additions and 7 deletions

View file

@ -112,7 +112,7 @@ pub trait TLayoutNode {
fail!("not an iframe element!") fail!("not an iframe element!")
} }
let iframe_element: JS<HTMLIFrameElement> = self.get_jsmanaged().transmute_copy(); let iframe_element: JS<HTMLIFrameElement> = self.get_jsmanaged().transmute_copy();
let size = (*iframe_element.unsafe_get()).size.unwrap(); let size = (*iframe_element.unsafe_get()).size.deref().get().unwrap();
(size.pipeline_id, size.subpage_id) (size.pipeline_id, size.subpage_id)
} }
} }

View file

@ -39,7 +39,7 @@ enum SandboxAllowance {
#[deriving(Encodable)] #[deriving(Encodable)]
pub struct HTMLIFrameElement { pub struct HTMLIFrameElement {
pub htmlelement: HTMLElement, pub htmlelement: HTMLElement,
pub size: Option<IFrameSize>, pub size: Traceable<Cell<Option<IFrameSize>>>,
pub sandbox: Traceable<Cell<Option<u8>>>, pub sandbox: Traceable<Cell<Option<u8>>>,
} }
@ -79,7 +79,7 @@ impl HTMLIFrameElement {
pub fn new_inherited(localName: DOMString, document: &JSRef<Document>) -> HTMLIFrameElement { pub fn new_inherited(localName: DOMString, document: &JSRef<Document>) -> HTMLIFrameElement {
HTMLIFrameElement { HTMLIFrameElement {
htmlelement: HTMLElement::new_inherited(HTMLIFrameElementTypeId, localName, document), htmlelement: HTMLElement::new_inherited(HTMLIFrameElementTypeId, localName, document),
size: None, size: Traceable::new(Cell::new(None)),
sandbox: Traceable::new(Cell::new(None)), sandbox: Traceable::new(Cell::new(None)),
} }
} }
@ -120,7 +120,7 @@ impl<'a> HTMLIFrameElementMethods for JSRef<'a, HTMLIFrameElement> {
} }
fn GetContentWindow(&self) -> Option<Temporary<Window>> { fn GetContentWindow(&self) -> Option<Temporary<Window>> {
self.size.and_then(|size| { self.size.deref().get().and_then(|size| {
let window = window_from_node(self).root(); let window = window_from_node(self).root();
let children = &*window.deref().page.children.deref().borrow(); let children = &*window.deref().page.children.deref().borrow();
let child = children.iter().find(|child| { let child = children.iter().find(|child| {
@ -194,11 +194,10 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLIFrameElement> {
let page = window.deref().page(); let page = window.deref().page();
let subpage_id = page.get_next_subpage_id(); let subpage_id = page.get_next_subpage_id();
let mut self_alias = self.clone(); self.deref().size.deref().set(Some(IFrameSize {
self_alias.deref_mut().size = Some(IFrameSize {
pipeline_id: page.id, pipeline_id: page.id,
subpage_id: subpage_id, subpage_id: subpage_id,
}); }));
let ConstellationChan(ref chan) = *page.constellation_chan.deref(); let ConstellationChan(ref chan) = *page.constellation_chan.deref();
chan.send(LoadIframeUrlMsg(url, page.id, subpage_id, sandboxed)); chan.send(LoadIframeUrlMsg(url, page.id, subpage_id, sandboxed));