diff options
author | bors-servo <release+servo@mozilla.com> | 2013-11-24 15:52:04 -0800 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2013-11-24 15:52:04 -0800 |
commit | f6646e17bfc0c91a4e9710d131082f178e7fe1cf (patch) | |
tree | e46afcdf6041cfaecf8eb8ceb9d25f1373040f19 /src/components/script/dom/window.rs | |
parent | 010b8cd4c3e82cd63b5b7707da8476a50f870269 (diff) | |
parent | f9433e357c22032e7067626131c5e702491a61aa (diff) | |
download | servo-f6646e17bfc0c91a4e9710d131082f178e7fe1cf.tar.gz servo-f6646e17bfc0c91a4e9710d131082f178e7fe1cf.zip |
auto merge of #1270 : evilpie/servo/url, r=jdm
I wasn't sure how to store @window in Location, so I just made it use @Page for now. I was going to implement stringifier, but sadly some of the webidl stuff is like 1 year out of sync.
Diffstat (limited to 'src/components/script/dom/window.rs')
-rw-r--r-- | src/components/script/dom/window.rs | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs index 7303d5d81f0..4814550e42f 100644 --- a/src/components/script/dom/window.rs +++ b/src/components/script/dom/window.rs @@ -4,10 +4,12 @@ use dom::bindings::codegen::WindowBinding; use dom::bindings::utils::{Reflectable, Reflector, Traceable}; +use dom::bindings::utils::{trace_option, trace_reflector}; use dom::bindings::utils::DOMString; use dom::document::AbstractDocument; use dom::eventtarget::{EventTarget, WindowTypeId}; use dom::node::{AbstractNode, ScriptView}; +use dom::location::Location; use dom::navigator::Navigator; use layout_interface::ReflowForDisplay; @@ -16,8 +18,8 @@ use servo_msg::compositor_msg::ScriptListener; use servo_net::image_cache_task::ImageCacheTask; use js::glue::*; -use js::jsapi::{JSObject, JSContext, JS_DefineProperty, JS_CallTracer}; -use js::jsapi::{JSPropertyOp, JSStrictPropertyOp, JSTracer, JSTRACE_OBJECT}; +use js::jsapi::{JSObject, JSContext, JS_DefineProperty}; +use js::jsapi::{JSPropertyOp, JSStrictPropertyOp, JSTracer}; use js::{JSVAL_NULL, JSPROP_ENUMERATE}; use std::cell::Cell; @@ -43,6 +45,7 @@ pub struct Window { script_chan: ScriptChan, compositor: @ScriptListener, timer_chan: SharedChan<TimerControlMsg>, + location: Option<@mut Location>, navigator: Option<@mut Navigator>, image_cache_task: ImageCacheTask, active_timers: ~HashSet<i32>, @@ -116,6 +119,13 @@ impl Window { None } + pub fn Location(&mut self) -> @mut Location { + if self.location.is_none() { + self.location = Some(Location::new(self, self.page)); + } + self.location.unwrap() + } + pub fn Navigator(&mut self) -> @mut Navigator { if self.navigator.is_none() { self.navigator = Some(Navigator::new(self)); @@ -215,6 +225,7 @@ impl Window { } SharedChan::new(timer_chan) }, + location: None, navigator: None, image_cache_task: image_cache_task, active_timers: ~HashSet::new(), @@ -241,24 +252,11 @@ impl Window { } impl Traceable for Window { - #[fixed_stack_segment] fn trace(&self, tracer: *mut JSTracer) { debug!("tracing window"); - unsafe { - match self.page.frame { - Some(frame) => { - (*tracer).debugPrinter = ptr::null(); - (*tracer).debugPrintIndex = -1; - do "document".to_c_str().with_ref |name| { - (*tracer).debugPrintArg = name as *libc::c_void; - debug!("tracing document"); - JS_CallTracer(tracer as *JSTracer, - frame.document.reflector().get_jsobject(), - JSTRACE_OBJECT as u32); - } - } - None => () - } - } + + self.page.frame.map(|frame| trace_reflector(tracer, "document", frame.document.reflector())); + trace_option(tracer, "location", self.location); + trace_option(tracer, "navigator", self.navigator); } } |