From df5306e3582a424680729d20838636ad7ae55239 Mon Sep 17 00:00:00 2001 From: Tim Kuehn Date: Mon, 29 Jul 2013 14:14:31 -0700 Subject: [PATCH] switched window.page from *mut Page to @mut Page --- src/components/script/dom/document.rs | 10 +++++----- src/components/script/dom/domparser.rs | 2 +- src/components/script/dom/element.rs | 8 ++------ src/components/script/dom/window.rs | 19 +++++++------------ src/components/script/script_task.rs | 4 ++-- 5 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 80f677e35cf..85ad2b86b3f 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -88,7 +88,7 @@ impl Document { parent: Element::new(HTMLHtmlElementTypeId, ~"html") }; - let cx = unsafe {(*_owner.page).js_info.get_ref().js_compartment.cx.ptr}; + let cx = _owner.page.js_info.get_ref().js_compartment.cx.ptr; let root = unsafe { Node::as_abstract_node(cx, root) }; Document(root, None) } @@ -130,7 +130,7 @@ impl Document { } }; let win = self.window.get_ref(); - let cx = unsafe {(*win.page).js_info.get_ref().js_compartment.cx.ptr}; + let cx = win.page.js_info.get_ref().js_compartment.cx.ptr; let cache = win.get_wrappercache(); let scope = cache.get_wrapper(); HTMLCollection::new(elements, cx, scope) @@ -138,7 +138,7 @@ impl Document { pub fn GetElementsByTagNameNS(&self, _ns: DOMString, _tag: DOMString) -> @mut HTMLCollection { let win = self.window.get_ref(); - let cx = unsafe {(*win.page).js_info.get_ref().js_compartment.cx.ptr}; + let cx = win.page.js_info.get_ref().js_compartment.cx.ptr; let cache = win.get_wrappercache(); let scope = cache.get_wrapper(); HTMLCollection::new(~[], cx, scope) @@ -146,7 +146,7 @@ impl Document { pub fn GetElementsByClassName(&self, _class: DOMString) -> @mut HTMLCollection { let win = self.window.get_ref(); - let cx = unsafe {(*win.page).js_info.get_ref().js_compartment.cx.ptr}; + let cx = win.page.js_info.get_ref().js_compartment.cx.ptr; let cache = win.get_wrappercache(); let scope = cache.get_wrapper(); HTMLCollection::new(~[], cx, scope) @@ -289,7 +289,7 @@ impl Document { } }; let win = self.window.get_ref(); - let cx = unsafe {(*win.page).js_info.get_ref().js_compartment.cx.ptr}; + let cx = win.page.js_info.get_ref().js_compartment.cx.ptr; let cache = win.get_wrappercache(); let scope = cache.get_wrapper(); HTMLCollection::new(elements, cx, scope) diff --git a/src/components/script/dom/domparser.rs b/src/components/script/dom/domparser.rs index 0b8ba1f0326..6042a0dfc8e 100644 --- a/src/components/script/dom/domparser.rs +++ b/src/components/script/dom/domparser.rs @@ -22,7 +22,7 @@ impl DOMParser { }; // TODO(tkuehn): This just handles the top-level page. Need to handle subframes. - let cx = unsafe {(*owner.page).js_info.get_ref().js_compartment.cx.ptr}; + let cx = owner.page.js_info.get_ref().js_compartment.cx.ptr; let cache = owner.get_wrappercache(); let scope = cache.get_wrapper(); parser.wrap_object_shared(cx, scope); diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index b83d81d0700..04987389576 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -175,9 +175,7 @@ impl<'self> Element { Some(win) => { let node = self.parent.abstract.get(); assert!(node.is_element()); - let page = unsafe { - &mut *win.page - }; + let page = win.page; let (port, chan) = comm::stream(); // TODO(tkuehn): currently just queries top-level page layout. Needs to query // subframe layout if this element is in a subframe. Probably need an ID field. @@ -223,9 +221,7 @@ impl<'self> Element { Some(doc) => { match doc.window { Some(win) => { - let page = unsafe { - &mut *win.page - }; + let page = win.page; let node = self.parent.abstract.get(); assert!(node.is_element()); let (port, chan) = comm::stream(); diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs index 213b211ed91..e1d7b4f423d 100644 --- a/src/components/script/dom/window.rs +++ b/src/components/script/dom/window.rs @@ -28,7 +28,7 @@ pub enum TimerControlMsg { //FIXME If we're going to store the script task, find a way to do so safely. Currently it's // only used for querying layout from arbitrary script. pub struct Window { - page: *mut Page, + page: @mut Page, script_chan: ScriptChan, compositor: @ScriptListener, wrapper: WrapperCache, @@ -91,15 +91,13 @@ impl Window { } pub fn content_changed(&self) { - unsafe { - // TODO(tkuehn): currently reflow top-level, but want to reflow only the associated frame - (*self.page).reflow_all(ReflowForScriptQuery, self.script_chan.clone(), self.compositor); - } + self.page.reflow_all(ReflowForScriptQuery, self.script_chan.clone(), self.compositor); } - pub fn new(page: *mut Page, script_chan: ScriptChan, compositor: @ScriptListener) + pub fn new(page: @mut Page, script_chan: ScriptChan, compositor: @ScriptListener) -> @mut Window { let script_chan_clone = script_chan.clone(); + let page_id = page.id.clone(); let win = @mut Window { page: page, script_chan: script_chan, @@ -111,7 +109,7 @@ impl Window { loop { match timer_port.recv() { TimerMessage_Close => break, - TimerMessage_Fire(td) => unsafe {script_chan_clone.chan.send(FireTimerMsg((*page).id.clone(), td))}, + TimerMessage_Fire(td) => script_chan_clone.chan.send(FireTimerMsg(page_id.clone(), td)), TimerMessage_TriggerExit => script_chan_clone.chan.send(ExitMsg), } } @@ -120,11 +118,8 @@ impl Window { }, }; - unsafe { - // TODO(tkuehn): This just grabs the top-level page. Need to handle subframes. - let compartment = (*page).js_info.get_ref().js_compartment; - window::create(compartment, win); - } + let compartment = page.js_info.get_ref().js_compartment; + window::create(compartment, win); win } } diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 9e2b6a7984b..42939cbb16e 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -569,10 +569,10 @@ impl ScriptTask { for last_loaded_url.iter().advance |last_loaded_url| { let (ref last_loaded_url, needs_reflow) = *last_loaded_url; if *last_loaded_url == url { + page.url = Some((last_loaded_url.clone(), false)); if needs_reflow { page.reflow_all(ReflowForDisplay, self.chan.clone(), self.compositor); } - page.url = Some((last_loaded_url.clone(), false)); return; } } @@ -601,7 +601,7 @@ impl ScriptTask { let HtmlParserResult {root, js_port, style_port, iframe_port} = html_parsing_result; // Create the window and document objects. - let window = Window::new(&mut *page, self.chan.clone(), self.compositor); + let window = Window::new(page, self.chan.clone(), self.compositor); let document = Document(root, Some(window)); // Tie the root into the document.