diff options
Diffstat (limited to 'src/components/script')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 18 | ||||
-rw-r--r-- | src/components/script/dom/bindings/conversions.rs | 1 | ||||
-rw-r--r-- | src/components/script/dom/bindings/js.rs | 4 | ||||
-rw-r--r-- | src/components/script/dom/bindings/utils.rs | 8 | ||||
-rw-r--r-- | src/components/script/dom/document.rs | 19 | ||||
-rw-r--r-- | src/components/script/dom/element.rs | 4 | ||||
-rw-r--r-- | src/components/script/dom/htmliframeelement.rs | 2 | ||||
-rw-r--r-- | src/components/script/dom/htmlimageelement.rs | 6 | ||||
-rw-r--r-- | src/components/script/dom/htmlobjectelement.rs | 2 | ||||
-rw-r--r-- | src/components/script/dom/location.rs | 4 | ||||
-rw-r--r-- | src/components/script/dom/node.rs | 8 | ||||
-rw-r--r-- | src/components/script/dom/window.rs | 30 | ||||
-rw-r--r-- | src/components/script/html/cssparse.rs | 12 | ||||
-rw-r--r-- | src/components/script/html/hubbub_html_parser.rs | 37 | ||||
-rw-r--r-- | src/components/script/layout_interface.rs | 24 | ||||
-rw-r--r-- | src/components/script/script.rs | 8 | ||||
-rw-r--r-- | src/components/script/script_task.rs | 197 |
17 files changed, 193 insertions, 191 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index ded87534683..cce35ffce82 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -2023,7 +2023,7 @@ def CreateBindingJSObject(descriptor, parent=None): assert not descriptor.createGlobal handler = """ let js_info = aScope.get().page().js_info(); - let handler = js_info.get().get_ref().dom_static.proxy_handlers.get(&(PrototypeList::id::%s as uint)); + let handler = js_info.get_ref().dom_static.proxy_handlers.get(&(PrototypeList::id::%s as uint)); """ % descriptor.name create += handler + """ let obj = NewProxyObject(aCx, *handler, &PrivateValue(squirrel_away_unique(aObject) as *libc::c_void), @@ -2338,12 +2338,12 @@ class CGDefineDOMInterfaceMethod(CGAbstractMethod): self.descriptor.name) else: body += """ js_info.dom_static.attribute_ids.insert(PrototypeList::id::%s as uint, - vec::cast_to_mut(vec::from_slice(sAttributes_ids))); + slice::cast_to_mut(slice::from_slice(sAttributes_ids))); """ % self.descriptor.name body = "" #XXXjdm xray stuff isn't necessary yet - return (body + """ let cx = js_info.js_context.borrow().ptr; - let receiver = js_info.js_compartment.borrow().global_obj; + return (body + """ let cx = js_info.js_context.deref().ptr; + let receiver = js_info.js_compartment.global_obj; let global: *JSObject = JS_GetGlobalForObject(cx, receiver); return %s(cx, global, receiver).is_not_null();""" % (getter)) @@ -3700,7 +3700,7 @@ class CGXrayHelper(CGAbstractExternMethod): methods = self.properties.methods if methods.hasNonChromeOnly() or methods.hasChromeOnly(): methodArgs = "Some(zip_copies(%(methods)s, *method_ids))" % varNames - setup += "let method_ids = js_info.get().get_ref().dom_static.method_ids.get(&(PrototypeList::id::ClientRect as uint));\n" + setup += "let method_ids = js_info.get_ref().dom_static.method_ids.get(&(PrototypeList::id::ClientRect as uint));\n" else: methodArgs = "None" methodArgs = CGGeneric(methodArgs) @@ -3708,7 +3708,7 @@ class CGXrayHelper(CGAbstractExternMethod): attrs = self.properties.attrs if attrs.hasNonChromeOnly() or attrs.hasChromeOnly(): attrArgs = "Some(zip_copies(%(attrs)s, *attr_ids))" % varNames - setup += "let attr_ids = js_info.get().get_ref().dom_static.attribute_ids.get(&(PrototypeList::id::ClientRect as uint));\n" + setup += "let attr_ids = js_info.get_ref().dom_static.attribute_ids.get(&(PrototypeList::id::ClientRect as uint));\n" else: attrArgs = "None" attrArgs = CGGeneric(attrArgs) @@ -3716,7 +3716,7 @@ class CGXrayHelper(CGAbstractExternMethod): consts = self.properties.consts if consts.hasNonChromeOnly() or consts.hasChromeOnly(): constArgs = "Some(zip_copies(%(consts)s, *const_ids))" % varNames - setup += "let const_ids = js_info.get().get_ref().dom_static.constant_ids.get(&(PrototypeList::id::ClientRect as uint));\n" + setup += "let const_ids = js_info.get_ref().dom_static.constant_ids.get(&(PrototypeList::id::ClientRect as uint));\n" else: constArgs = "None" constArgs = CGGeneric(constArgs) @@ -4774,7 +4774,7 @@ class CGBindingRoot(CGThing): 'std::cmp', 'std::libc', 'std::ptr', - 'std::vec', + 'std::slice', 'std::str', 'std::num', ]) @@ -5336,7 +5336,7 @@ class CallbackMember(CGNativeMember): if self.argCount > 0: replacements["argCount"] = self.argCountStr replacements["argvDecl"] = string.Template( - "let mut argv = vec::from_elem(${argCount}, UndefinedValue());\n" + "let mut argv = slice::from_elem(${argCount}, UndefinedValue());\n" ).substitute(replacements) else: # Avoid weird 0-sized arrays diff --git a/src/components/script/dom/bindings/conversions.rs b/src/components/script/dom/bindings/conversions.rs index 311745603a5..513dac9964a 100644 --- a/src/components/script/dom/bindings/conversions.rs +++ b/src/components/script/dom/bindings/conversions.rs @@ -17,6 +17,7 @@ use js::jsval::JSVal; use js::jsval::{NullValue, BooleanValue, Int32Value, UInt32Value, StringValue}; use js::jsval::ObjectValue; use js::glue::RUST_JS_NumberValue; +use std::default::Default; use std::libc; pub trait ToJSValConvertible { diff --git a/src/components/script/dom/bindings/js.rs b/src/components/script/dom/bindings/js.rs index e9fe15eb31f..71ca2d7ac86 100644 --- a/src/components/script/dom/bindings/js.rs +++ b/src/components/script/dom/bindings/js.rs @@ -64,14 +64,14 @@ impl<T> JS<T> { pub fn get<'a>(&'a self) -> &'a T { let borrowed = self.ptr.borrow(); unsafe { - &(**borrowed.get()) + &**borrowed } } pub fn get_mut<'a>(&'a mut self) -> &'a mut T { let mut borrowed = self.ptr.borrow_mut(); unsafe { - &mut (**borrowed.get()) + &mut **borrowed } } diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 37c62fd4c3c..db6cb3290d7 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -15,8 +15,8 @@ use std::cmp::Eq; use std::libc; use std::ptr; use std::ptr::null; +use std::slice; use std::str; -use std::vec; use js::glue::*; use js::glue::{js_IsObjectProxyClass, js_IsFunctionProxyClass, IsProxyHandlerFamily}; use js::jsapi::{JS_AlreadyHasOwnProperty, JS_NewFunction}; @@ -136,7 +136,7 @@ pub fn jsstring_to_str(cx: *JSContext, s: *JSString) -> DOMString { unsafe { let length = 0; let chars = JS_GetStringCharsAndLength(cx, s, &length); - vec::raw::buf_as_slice(chars, length as uint, |char_vec| { + slice::raw::buf_as_slice(chars, length as uint, |char_vec| { str::from_utf16(char_vec).unwrap() }) } @@ -646,8 +646,8 @@ pub fn global_object_for_js_object(obj: *JSObject) -> JS<window::Window> { fn cx_for_dom_reflector(obj: *JSObject) -> *JSContext { let win = global_object_for_js_object(obj); let js_info = win.get().page().js_info(); - match *js_info.get() { - Some(ref info) => info.js_context.borrow().ptr, + match *js_info { + Some(ref info) => info.js_context.deref().ptr, None => fail!("no JS context for DOM global") } } diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index f2cfa57d136..b123b169d67 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -40,9 +40,9 @@ use servo_util::namespace::{Namespace, Null}; use servo_util::str::DOMString; use collections::hashmap::HashMap; -use extra::url::{Url, from_str}; use js::jsapi::JSContext; use std::ascii::StrAsciiExt; +use url::{Url, from_str}; use serialize::{Encoder, Encodable}; @@ -610,12 +610,15 @@ impl Document { // TODO: support the case if multiple elements // which haves same id are in the same document. - self.idmap.mangle(id, element, - |_, new_element: &JS<Element>| -> JS<Element> { - new_element.clone() - }, - |_, old_element: &mut JS<Element>, new_element: &JS<Element>| { - *old_element = new_element.clone(); - }); + // FIXME https://github.com/mozilla/rust/issues/13195 + // Use mangle() when it exists again. + match self.idmap.find_mut(&id) { + Some(v) => { + *v = element.clone(); + return; + }, + None => (), + } + self.idmap.insert(id, element.clone()); } } diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index aa092bce325..a8d1f53f6fc 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -569,7 +569,7 @@ impl Element { let doc = self.node.owner_doc(); let win = &doc.get().window; let node: JS<Node> = NodeCast::from(abstract_self); - let (port, chan) = Chan::new(); + let (chan, port) = channel(); let addr = node.to_trusted_node_address(); let ContentBoxesResponse(rects) = win.get().page().query_layout(ContentBoxesQuery(addr, chan), port); let rects = rects.map(|r| { @@ -589,7 +589,7 @@ impl Element { let doc = self.node.owner_doc(); let win = &doc.get().window; let node: JS<Node> = NodeCast::from(abstract_self); - let (port, chan) = Chan::new(); + let (chan, port) = channel(); let addr = node.to_trusted_node_address(); let ContentBoxResponse(rect) = win.get().page().query_layout(ContentBoxQuery(addr, chan), port); ClientRect::new( diff --git a/src/components/script/dom/htmliframeelement.rs b/src/components/script/dom/htmliframeelement.rs index a4999559cf5..a33e5baf84d 100644 --- a/src/components/script/dom/htmliframeelement.rs +++ b/src/components/script/dom/htmliframeelement.rs @@ -15,10 +15,10 @@ use dom::node::{Node, ElementNodeTypeId}; use dom::windowproxy::WindowProxy; use servo_util::str::DOMString; -use extra::url::Url; use serialize::{Encoder, Encodable}; use servo_msg::constellation_msg::{PipelineId, SubpageId}; use std::ascii::StrAsciiExt; +use url::Url; enum SandboxAllowance { AllowNothing = 0x00, diff --git a/src/components/script/dom/htmlimageelement.rs b/src/components/script/dom/htmlimageelement.rs index a70d6798431..f0ceeb89434 100644 --- a/src/components/script/dom/htmlimageelement.rs +++ b/src/components/script/dom/htmlimageelement.rs @@ -13,12 +13,12 @@ use dom::element::{AttributeHandlers, AfterSetAttrListener, BeforeRemoveAttrList use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{Node, ElementNodeTypeId, NodeHelpers, window_from_node}; -use extra::url::Url; use servo_util::geometry::to_px; use layout_interface::{ContentBoxQuery, ContentBoxResponse}; use servo_net::image_cache_task; use servo_util::url::parse_url; use servo_util::str::DOMString; +use url::Url; use serialize::{Encoder, Encodable}; @@ -138,7 +138,7 @@ impl HTMLImageElement { let node: JS<Node> = NodeCast::from(abstract_self); let window = window_from_node(&node); let page = window.get().page(); - let (port, chan) = Chan::new(); + let (chan, port) = channel(); let addr = node.to_trusted_node_address(); let ContentBoxResponse(rect) = page.query_layout(ContentBoxQuery(addr, chan), port); to_px(rect.size.width) as u32 @@ -153,7 +153,7 @@ impl HTMLImageElement { let node = &self.htmlelement.element.node; let doc = node.owner_doc(); let page = doc.get().window.get().page(); - let (port, chan) = Chan::new(); + let (chan, port) = channel(); let this_node: JS<Node> = NodeCast::from(abstract_self); let addr = this_node.to_trusted_node_address(); let ContentBoxResponse(rect) = page.query_layout(ContentBoxQuery(addr, chan), port); diff --git a/src/components/script/dom/htmlobjectelement.rs b/src/components/script/dom/htmlobjectelement.rs index d4e82a61da8..03fc8984845 100644 --- a/src/components/script/dom/htmlobjectelement.rs +++ b/src/components/script/dom/htmlobjectelement.rs @@ -18,12 +18,12 @@ use dom::validitystate::ValidityState; use dom::windowproxy::WindowProxy; use servo_util::str::DOMString; -use extra::url::Url; use servo_net::image_cache_task; use servo_net::image_cache_task::ImageCacheTask; use servo_util::url::parse_url; use servo_util::namespace::Null; use servo_util::url::is_image_data; +use url::Url; #[deriving(Encodable)] pub struct HTMLObjectElement { diff --git a/src/components/script/dom/location.rs b/src/components/script/dom/location.rs index 8e7e1ca5ced..168ded0a4c7 100644 --- a/src/components/script/dom/location.rs +++ b/src/components/script/dom/location.rs @@ -27,7 +27,7 @@ struct Untraceable { impl<S: Encoder> Encodable<S> for Untraceable { fn encode(&self, s: &mut S) { - self.page.borrow().encode(s); + self.page.encode(s); } } @@ -60,7 +60,7 @@ impl Location { } pub fn Href(&self) -> DOMString { - self.extra.page.borrow().get_url().to_str() + self.extra.page.get_url().to_str() } pub fn SetHref(&self, _href: DOMString) -> Fallible<()> { diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index 9211925edb8..0a35b5b6b0d 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -162,14 +162,12 @@ impl LayoutDataRef { /// Returns true if there is layout data present. #[inline] pub fn is_present(&self) -> bool { - let data_ref = self.data_cell.borrow(); - data_ref.get().is_some() + self.data_cell.borrow().is_some() } /// Take the chan out of the layout data if it is present. pub fn take_chan(&self) -> Option<LayoutChan> { - let mut data_ref = self.data_cell.borrow_mut(); - let layout_data = data_ref.get(); + let mut layout_data = self.data_cell.borrow_mut(); match *layout_data { None => None, Some(..) => Some(layout_data.get_mut_ref().chan.take_unwrap()), @@ -1353,7 +1351,7 @@ impl Node { if copy.is_document() { document = DocumentCast::to(©).unwrap(); } - assert_eq!(copy.get().owner_doc(), &document); + assert!(copy.get().owner_doc() == &document); // Step 4 (some data already copied in step 2). match node.type_id() { diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs index 9aaebee3303..dae0020abe8 100644 --- a/src/components/script/dom/window.rs +++ b/src/components/script/dom/window.rs @@ -28,14 +28,14 @@ use js::JSPROP_ENUMERATE; use collections::hashmap::HashMap; use std::cast; use std::cmp; -use std::comm::Chan; +use std::comm::{channel, Sender, Receiver}; use std::comm::Select; use std::hash::{Hash, sip}; use std::io::timer::Timer; use std::rc::Rc; use serialize::{Encoder, Encodable}; -use extra::url::{Url}; +use url::Url; pub enum TimerControlMsg { TimerMessageFire(~TimerData), @@ -45,7 +45,7 @@ pub enum TimerControlMsg { pub struct TimerHandle { handle: i32, - cancel_chan: Option<Chan<()>>, + cancel_chan: Option<Sender<()>>, } impl<S: Encoder> Encodable<S> for TimerHandle { @@ -65,6 +65,12 @@ impl Eq for TimerHandle { } } +impl TotalEq for TimerHandle { + fn equals(&self, other: &TimerHandle) -> bool { + self.eq(other) + } +} + impl TimerHandle { fn cancel(&self) { self.cancel_chan.as_ref().map(|chan| chan.send(())); @@ -87,25 +93,23 @@ pub struct Window { struct Untraceable { page: Rc<Page>, compositor: ~ScriptListener, - timer_chan: Chan<TimerControlMsg>, + timer_chan: Sender<TimerControlMsg>, } impl<S: Encoder> Encodable<S> for Untraceable { fn encode(&self, s: &mut S) { - let page = self.page.borrow(); - page.encode(s); + self.page.encode(s); } } impl Window { pub fn get_cx(&self) -> *JSObject { let js_info = self.page().js_info(); - (*js_info.get()).get_ref().js_compartment.borrow().cx.borrow().ptr + js_info.get_ref().js_compartment.cx.deref().ptr } pub fn page<'a>(&'a self) -> &'a Page { - let page = &self.extra.page; - page.borrow() + &*self.extra.page } pub fn get_url(&self) -> Url { self.page().get_url() @@ -143,7 +147,7 @@ impl Window { pub fn Document(&self) -> JS<Document> { let frame = self.page().frame(); - (*frame.get()).get_ref().document.clone() + frame.get_ref().document.clone() } pub fn Name(&self) -> DOMString { @@ -233,7 +237,7 @@ impl Window { // Post a delayed message to the per-window timer task; it will dispatch it // to the relevant script handler that will deal with it. let tm = Timer::new().unwrap(); - let (cancel_port, cancel_chan) = Chan::new(); + let (cancel_chan, cancel_port) = channel(); let chan = self.extra.timer_chan.clone(); spawn_named("Window:SetTimeout", proc() { let mut tm = tm; @@ -294,8 +298,8 @@ impl Window { compositor: compositor, page: page.clone(), timer_chan: { - let (timer_port, timer_chan): (Port<TimerControlMsg>, Chan<TimerControlMsg>) = Chan::new(); - let id = page.borrow().id.clone(); + let (timer_chan, timer_port): (Sender<TimerControlMsg>, Receiver<TimerControlMsg>) = channel(); + let id = page.id.clone(); spawn_named("timer controller", proc() { let ScriptChan(script_chan) = script_chan; loop { diff --git a/src/components/script/html/cssparse.rs b/src/components/script/html/cssparse.rs index 846af813461..c5cad0849de 100644 --- a/src/components/script/html/cssparse.rs +++ b/src/components/script/html/cssparse.rs @@ -4,13 +4,13 @@ /// Some little helpers for hooking up the HTML parser with the CSS parser. -use std::comm::Port; +use std::comm::{channel, Receiver}; use encoding::EncodingRef; use encoding::all::UTF_8; use style::Stylesheet; use servo_net::resource_task::{Load, LoadResponse, ProgressMsg, Payload, Done, ResourceTask}; use servo_util::task::spawn_named; -use extra::url::Url; +use url::Url; /// Where a style sheet comes from. pub enum StylesheetProvenance { @@ -20,8 +20,8 @@ pub enum StylesheetProvenance { pub fn spawn_css_parser(provenance: StylesheetProvenance, resource_task: ResourceTask) - -> Port<Stylesheet> { - let (result_port, result_chan) = Chan::new(); + -> Receiver<Stylesheet> { + let (result_chan, result_port) = channel(); // TODO: Get the actual value. http://dev.w3.org/csswg/css-syntax/#environment-encoding let environment_encoding = UTF_8 as EncodingRef; @@ -30,7 +30,7 @@ pub fn spawn_css_parser(provenance: StylesheetProvenance, let sheet = match provenance { UrlProvenance(url) => { debug!("cssparse: loading style sheet at {:s}", url.to_str()); - let (input_port, input_chan) = Chan::new(); + let (input_chan, input_port) = channel(); resource_task.send(Load(url, input_chan)); let LoadResponse { metadata: metadata, progress_port: progress_port } = input_port.recv(); @@ -52,7 +52,7 @@ pub fn spawn_css_parser(provenance: StylesheetProvenance, } struct ProgressMsgPortIterator { - progress_port: Port<ProgressMsg> + progress_port: Receiver<ProgressMsg> } impl Iterator<~[u8]> for ProgressMsgPortIterator { diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index 5b6e1e80bb2..e2a870c2bc9 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -17,7 +17,6 @@ use dom::types::*; use html::cssparse::{InlineProvenance, StylesheetProvenance, UrlProvenance, spawn_css_parser}; use script_task::Page; -use extra::url::Url; use hubbub::hubbub; use servo_msg::constellation_msg::SubpageId; use servo_net::resource_task::{Load, Payload, Done, ResourceTask, load_whole_resource}; @@ -28,9 +27,10 @@ use servo_util::url::parse_url; use std::ascii::StrAsciiExt; use std::cast; use std::cell::RefCell; -use std::comm::{Port, Chan}; +use std::comm::{channel, Sender, Receiver}; use std::str; use style::Stylesheet; +use url::Url; macro_rules! handle_element( ($document: expr, @@ -71,7 +71,7 @@ pub enum HtmlDiscoveryMessage { } pub struct HtmlParserResult { - discovery_port: Port<HtmlDiscoveryMessage>, + discovery_port: Receiver<HtmlDiscoveryMessage>, } trait NodeWrapping { @@ -103,8 +103,8 @@ spawned, collates them, and sends them to the given result channel. * `from_parent` - A port on which to receive new links. */ -fn css_link_listener(to_parent: Chan<HtmlDiscoveryMessage>, - from_parent: Port<CSSMessage>, +fn css_link_listener(to_parent: Sender<HtmlDiscoveryMessage>, + from_parent: Receiver<CSSMessage>, resource_task: ResourceTask) { let mut result_vec = ~[]; @@ -126,8 +126,8 @@ fn css_link_listener(to_parent: Chan<HtmlDiscoveryMessage>, } } -fn js_script_listener(to_parent: Chan<HtmlDiscoveryMessage>, - from_parent: Port<JSMessage>, +fn js_script_listener(to_parent: Sender<HtmlDiscoveryMessage>, + from_parent: Receiver<JSMessage>, resource_task: ResourceTask) { let mut result_vec = ~[]; @@ -256,9 +256,9 @@ pub fn parse_html(page: &Page, // Spawn a CSS parser to receive links to CSS style sheets. let resource_task2 = resource_task.clone(); - let (discovery_port, discovery_chan) = Chan::new(); + let (discovery_chan, discovery_port) = channel(); let stylesheet_chan = discovery_chan.clone(); - let (css_msg_port, css_chan) = Chan::new(); + let (css_chan, css_msg_port) = channel(); spawn_named("parse_html:css", proc() { css_link_listener(stylesheet_chan, css_msg_port, resource_task2.clone()); }); @@ -266,13 +266,13 @@ pub fn parse_html(page: &Page, // Spawn a JS parser to receive JavaScript. let resource_task2 = resource_task.clone(); let js_result_chan = discovery_chan.clone(); - let (js_msg_port, js_chan) = Chan::new(); + let (js_chan, js_msg_port) = channel(); spawn_named("parse_html:js", proc() { js_script_listener(js_result_chan, js_msg_port, resource_task2.clone()); }); // Wait for the LoadResponse so that the parser knows the final URL. - let (input_port, input_chan) = Chan::new(); + let (input_chan, input_port) = channel(); resource_task.send(Load(url.clone(), input_chan)); let load_response = input_port.recv(); @@ -286,8 +286,7 @@ pub fn parse_html(page: &Page, // Store the final URL before we start parsing, so that DOM routines // (e.g. HTMLImageElement::update_image) can resolve relative URLs // correctly. - let mut page_url = page.mut_url(); - *page_url.get() = Some((url2.clone(), true)); + *page.mut_url() = Some((url2.clone(), true)); } let pipeline_id = page.id; @@ -310,7 +309,7 @@ pub fn parse_html(page: &Page, debug!("create comment"); // NOTE: tmp vars are workaround for lifetime issues. Both required. let tmp_borrow = doc_cell.borrow(); - let tmp = tmp_borrow.get(); + let tmp = &*tmp_borrow; let comment: JS<Node> = NodeCast::from(&Comment::new(data, *tmp)); unsafe { comment.to_hubbub_node() } }, @@ -322,7 +321,7 @@ pub fn parse_html(page: &Page, force_quirks: _ } = doctype; // NOTE: tmp vars are workaround for lifetime issues. Both required. let tmp_borrow = doc_cell.borrow(); - let tmp = tmp_borrow.get(); + let tmp = &*tmp_borrow; let doctype_node = DocumentType::new(name, public_id, system_id, *tmp); unsafe { doctype_node.to_hubbub_node() @@ -332,7 +331,7 @@ pub fn parse_html(page: &Page, debug!("create element"); // NOTE: tmp vars are workaround for lifetime issues. Both required. let tmp_borrow = doc_cell.borrow(); - let tmp = tmp_borrow.get(); + let tmp = &*tmp_borrow; let mut element = build_element_from_tag(tag.name.clone(), *tmp); debug!("-- attach attrs"); @@ -398,7 +397,7 @@ pub fn parse_html(page: &Page, debug!("create text"); // NOTE: tmp vars are workaround for lifetime issues. Both required. let tmp_borrow = doc_cell.borrow(); - let tmp = tmp_borrow.get(); + let tmp = &*tmp_borrow; let text = Text::new(data, *tmp); unsafe { text.to_hubbub_node() } }, @@ -448,14 +447,14 @@ pub fn parse_html(page: &Page, debug!("set quirks mode"); // NOTE: tmp vars are workaround for lifetime issues. Both required. let mut tmp_borrow = doc_cell.borrow_mut(); - let tmp = tmp_borrow.get(); + let tmp = &mut *tmp_borrow; tmp.get_mut().set_quirks_mode(mode); }, encoding_change: |encname| { debug!("encoding change"); // NOTE: tmp vars are workaround for lifetime issues. Both required. let mut tmp_borrow = doc_cell.borrow_mut(); - let tmp = tmp_borrow.get(); + let tmp = &mut *tmp_borrow; tmp.get_mut().set_encoding_name(encname); }, complete_script: |script| { diff --git a/src/components/script/layout_interface.rs b/src/components/script/layout_interface.rs index 4ccf959f8ab..9dce53fc36e 100644 --- a/src/components/script/layout_interface.rs +++ b/src/components/script/layout_interface.rs @@ -8,16 +8,16 @@ use dom::node::LayoutDataRef; -use extra::url::Url; use geom::point::Point2D; use geom::rect::Rect; use geom::size::Size2D; use script_task::{ScriptChan}; use servo_util::geometry::Au; use std::cmp; -use std::comm::Chan; +use std::comm::{channel, Receiver, Sender}; use std::libc::c_void; use style::Stylesheet; +use url::Url; /// Asynchronous messages that script can send to layout. /// @@ -42,7 +42,7 @@ pub enum Msg { /// Requests that the layout task enter a quiescent state in which no more messages are /// accepted except `ExitMsg`. A response message will be sent on the supplied channel when /// this happens. - PrepareToExitMsg(Chan<()>), + PrepareToExitMsg(Sender<()>), /// Requests that the layout task immediately shut down. There must be no more nodes left after /// this, or layout will crash. @@ -52,12 +52,12 @@ pub enum Msg { /// Synchronous messages that script can send to layout. pub enum LayoutQuery { /// Requests the dimensions of the content box, as in the `getBoundingClientRect()` call. - ContentBoxQuery(TrustedNodeAddress, Chan<ContentBoxResponse>), + ContentBoxQuery(TrustedNodeAddress, Sender<ContentBoxResponse>), /// Requests the dimensions of all the content boxes, as in the `getClientRects()` call. - ContentBoxesQuery(TrustedNodeAddress, Chan<ContentBoxesResponse>), + ContentBoxesQuery(TrustedNodeAddress, Sender<ContentBoxesResponse>), /// Requests the node containing the point of interest - HitTestQuery(TrustedNodeAddress, Point2D<f32>, Chan<Result<HitTestResponse, ()>>), - MouseOverQuery(TrustedNodeAddress, Point2D<f32>, Chan<Result<MouseOverResponse, ()>>), + HitTestQuery(TrustedNodeAddress, Point2D<f32>, Sender<Result<HitTestResponse, ()>>), + MouseOverQuery(TrustedNodeAddress, Point2D<f32>, Sender<Result<MouseOverResponse, ()>>), } /// The address of a node known to be valid. These must only be sent from content -> layout, @@ -74,7 +74,7 @@ pub struct HitTestResponse(UntrustedNodeAddress); pub struct MouseOverResponse(~[UntrustedNodeAddress]); /// Determines which part of the -#[deriving(Eq, Ord)] +#[deriving(Eq, Ord, TotalEq, TotalOrd)] pub enum DocumentDamageLevel { /// Reflow, but do not perform CSS selector matching. ReflowDocumentDamage, @@ -125,18 +125,18 @@ pub struct Reflow { /// The current window size. window_size: Size2D<uint>, /// The channel that we send a notification to. - script_join_chan: Chan<()>, + script_join_chan: Sender<()>, /// Unique identifier id: uint } /// Encapsulates a channel to the layout task. #[deriving(Clone)] -pub struct LayoutChan(Chan<Msg>); +pub struct LayoutChan(Sender<Msg>); impl LayoutChan { - pub fn new() -> (Port<Msg>, LayoutChan) { - let (port, chan) = Chan::new(); + pub fn new() -> (Receiver<Msg>, LayoutChan) { + let (chan, port) = channel(); (port, LayoutChan(chan)) } } diff --git a/src/components/script/script.rs b/src/components/script/script.rs index c9160b56131..9ab4c2cc671 100644 --- a/src/components/script/script.rs +++ b/src/components/script/script.rs @@ -10,11 +10,16 @@ #[feature(globs, macro_rules, struct_variant, managed_boxes, phase)]; +#[feature(phase)]; +#[phase(syntax, link)] +extern crate log; + extern crate collections; extern crate geom; extern crate hubbub; extern crate encoding; extern crate js; +extern crate native; extern crate serialize; #[phase(syntax)] extern crate servo_macros = "macros"; @@ -22,8 +27,7 @@ extern crate servo_net = "net"; extern crate servo_util = "util"; extern crate style; extern crate servo_msg = "msg"; -extern crate extra; -extern crate native; +extern crate url; pub mod dom { pub mod bindings { diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 9d9897dfc54..c1c3a717f1a 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -29,7 +29,6 @@ use layout_interface::{Reflow, ReflowDocumentDamage, ReflowForDisplay, ReflowGoa use layout_interface::ContentChangedDocumentDamage; use layout_interface; -use extra::url::Url; use geom::point::Point2D; use geom::size::Size2D; use js::global::DEBUG_FNS; @@ -51,11 +50,12 @@ use servo_util::task::send_on_failure; use servo_util::namespace::Null; use std::cast; use std::cell::{RefCell, Ref, RefMut}; -use std::comm::{Port, Chan, Empty, Disconnected, Data}; +use std::comm::{channel, Sender, Receiver, Empty, Disconnected, Data}; use std::mem::replace; use std::ptr; use std::rc::Rc; use std::task; +use url::Url; use serialize::{Encoder, Encodable}; @@ -91,7 +91,7 @@ pub struct NewLayoutInfo { /// Encapsulates external communication with the script task. #[deriving(Clone)] -pub struct ScriptChan(Chan<ScriptMsg>); +pub struct ScriptChan(Sender<ScriptMsg>); impl<S: Encoder> Encodable<S> for ScriptChan { fn encode(&self, _s: &mut S) { @@ -100,8 +100,8 @@ impl<S: Encoder> Encodable<S> for ScriptChan { impl ScriptChan { /// Creates a new script chan. - pub fn new() -> (Port<ScriptMsg>, ScriptChan) { - let (port, chan) = Chan::new(); + pub fn new() -> (Receiver<ScriptMsg>, ScriptChan) { + let (chan, port) = channel(); (port, ScriptChan(chan)) } } @@ -121,7 +121,7 @@ pub struct Page { layout_chan: LayoutChan, /// The port that we will use to join layout. If this is `None`, then layout is not running. - layout_join_port: RefCell<Option<Port<()>>>, + layout_join_port: RefCell<Option<Receiver<()>>>, /// What parts of the document are dirty, if any. damage: RefCell<Option<DocumentDamage>>, @@ -149,7 +149,7 @@ pub struct Page { impl<S: Encoder> Encodable<S> for Page { fn encode(&self, s: &mut S) { let fragment_node = self.fragment_node.borrow(); - fragment_node.get().encode(s); + fragment_node.encode(s); } } @@ -188,7 +188,7 @@ impl PageTree { } fn page<'a>(&'a self) -> &'a Page { - self.page.borrow() + &*self.page } pub fn find<'a> (&'a mut self, id: PipelineId) -> Option<&'a mut PageTree> { @@ -276,8 +276,7 @@ impl Page { /// Adds the given damage. pub fn damage(&self, level: DocumentDamageLevel) { - let frame = self.frame(); - let root = match *frame.get() { + let root = match *self.frame() { None => return, Some(ref frame) => frame.document.get().GetDocumentElement() }; @@ -285,8 +284,8 @@ impl Page { None => {}, Some(root) => { let root: JS<Node> = NodeCast::from(&root); - let mut damage = self.damage.borrow_mut(); - match *damage.get() { + let mut damage = *self.damage.borrow_mut(); + match damage { None => {} Some(ref mut damage) => { // FIXME(pcwalton): This is wrong. We should trace up to the nearest ancestor. @@ -296,7 +295,7 @@ impl Page { } } - *damage.get() = Some(DocumentDamage { + *self.damage.borrow_mut() = Some(DocumentDamage { root: root.to_trusted_node_address(), level: level, }) @@ -305,16 +304,15 @@ impl Page { } pub fn get_url(&self) -> Url { - let url = self.url(); - url.get().get_ref().ref0().clone() + self.url().get_ref().ref0().clone() } /// Sends a ping to layout and waits for the response. The response will arrive when the /// layout task has finished any pending request messages. pub fn join_layout(&self) { let mut layout_join_port = self.layout_join_port.borrow_mut(); - if layout_join_port.get().is_some() { - let join_port = replace(layout_join_port.get(), None); + if layout_join_port.is_some() { + let join_port = replace(&mut *layout_join_port, None); match join_port { Some(ref join_port) => { match join_port.try_recv() { @@ -338,7 +336,7 @@ impl Page { /// Sends the given query to layout. pub fn query_layout<T: Send>(&self, query: LayoutQuery, - response_port: Port<T>) + response_port: Receiver<T>) -> T { self.join_layout(); let LayoutChan(ref chan) = self.layout_chan; @@ -357,8 +355,7 @@ impl Page { goal: ReflowGoal, script_chan: ScriptChan, compositor: &ScriptListener) { - let frame = self.frame(); - let root = match *frame.get() { + let root = match *self.frame() { None => return, Some(ref frame) => { frame.document.get().GetDocumentElement() @@ -377,12 +374,12 @@ impl Page { compositor.set_ready_state(PerformingLayout); // Layout will let us know when it's done. - let (join_port, join_chan) = Chan::new(); + let (join_chan, join_port) = channel(); let mut layout_join_port = self.layout_join_port.borrow_mut(); - *layout_join_port.get() = Some(join_port); + *layout_join_port = Some(join_port); let mut last_reflow_id = self.last_reflow_id.borrow_mut(); - *last_reflow_id.get() += 1; + *last_reflow_id += 1; let root: JS<Node> = NodeCast::from(&root); let mut damage = self.damage.borrow_mut(); @@ -393,11 +390,11 @@ impl Page { document_root: root.to_trusted_node_address(), url: self.get_url(), goal: goal, - window_size: *window_size.get(), + window_size: *window_size, script_chan: script_chan, script_join_chan: join_chan, - damage: replace(damage.get(), None).unwrap(), - id: *last_reflow_id.get(), + damage: replace(&mut *damage, None).unwrap(), + id: *last_reflow_id, }; let LayoutChan(ref chan) = self.layout_chan; @@ -414,8 +411,8 @@ impl Page { // Note that the order that these variables are initialized is _not_ arbitrary. Switching // them around can -- and likely will -- lead to things breaking. - js_context.borrow().set_default_options_and_version(); - js_context.borrow().set_logging_error_reporter(); + js_context.set_default_options_and_version(); + js_context.set_logging_error_reporter(); let compartment = match js_context.new_compartment_with_global(global) { Ok(c) => c, @@ -423,11 +420,11 @@ impl Page { }; unsafe { - JS_InhibitGC(js_context.borrow().ptr); + JS_InhibitGC(js_context.deref().ptr); } let mut js_info = self.mut_js_info(); - *js_info.get() = Some(JSPageInfo { + *js_info = Some(JSPageInfo { dom_static: GlobalStaticData(), js_compartment: compartment, js_context: js_context, @@ -467,7 +464,7 @@ pub struct ScriptTask { resource_task: ResourceTask, /// The port on which the script task receives messages (load URL, exit, etc.) - port: Port<ScriptMsg>, + port: Receiver<ScriptMsg>, /// A channel to hand out when some other task needs to be able to respond to a message from /// the script task. chan: ScriptChan, @@ -488,7 +485,7 @@ impl ScriptTask { pub fn new(id: PipelineId, compositor: ~ScriptListener, layout_chan: LayoutChan, - port: Port<ScriptMsg>, + port: Receiver<ScriptMsg>, chan: ScriptChan, constellation_chan: ConstellationChan, resource_task: ResourceTask, @@ -525,7 +522,7 @@ impl ScriptTask { id: PipelineId, compositor: ~C, layout_chan: LayoutChan, - port: Port<ScriptMsg>, + port: Receiver<ScriptMsg>, chan: ScriptChan, constellation_chan: ConstellationChan, failure_msg: Failure, @@ -545,7 +542,7 @@ impl ScriptTask { resource_task, image_cache_task, window_size); - script_task.borrow().start(); + script_task.start(); }); } @@ -557,13 +554,12 @@ impl ScriptTask { { let mut page_tree = self.page_tree.borrow_mut(); - for page in page_tree.get().iter() { + for page in page_tree.iter() { // Only process a resize if layout is idle. - let page = page.borrow(); let layout_join_port = page.layout_join_port.borrow(); - if layout_join_port.get().is_none() { + if layout_join_port.is_none() { let mut resize_event = page.resize_event.borrow_mut(); - match resize_event.get().take() { + match resize_event.take() { Some(size) => resizes.push((page.id, size)), None => () } @@ -585,9 +581,9 @@ impl ScriptTask { match event { ResizeMsg(id, size) => { let mut page_tree = self.page_tree.borrow_mut(); - let page = page_tree.get().find(id).expect("resize sent to nonexistent pipeline").page(); + let page = page_tree.find(id).expect("resize sent to nonexistent pipeline").page(); let mut resize_event = page.resize_event.borrow_mut(); - *resize_event.get() = Some(size); + *resize_event = Some(size); } _ => { sequential.push(event); @@ -629,12 +625,12 @@ impl ScriptTask { } = new_layout_info; let mut page_tree = self.page_tree.borrow_mut(); - let parent_page_tree = page_tree.get().find(old_id).expect("ScriptTask: received a layout + let parent_page_tree = page_tree.find(old_id).expect("ScriptTask: received a layout whose parent has a PipelineId which does not correspond to a pipeline in the script task's page tree. This is a bug."); let new_page_tree = { let window_size = parent_page_tree.page().window_size.borrow(); - PageTree::new(new_id, layout_chan, *window_size.get()) + PageTree::new(new_id, layout_chan, *window_size) }; parent_page_tree.inner.push(new_page_tree); } @@ -642,10 +638,10 @@ impl ScriptTask { /// Handles a timer that fired. fn handle_fire_timer_msg(&self, id: PipelineId, timer_data: ~TimerData) { let mut page_tree = self.page_tree.borrow_mut(); - let page = page_tree.get().find(id).expect("ScriptTask: received fire timer msg for a + let page = page_tree.find(id).expect("ScriptTask: received fire timer msg for a pipeline ID not associated with this script task. This is a bug.").page(); let frame = page.frame(); - let mut window = frame.get().get_ref().window.clone(); + let mut window = frame.get_ref().window.clone(); let timer_handle = window.get_mut().active_timers.pop(&timer_data.handle); if timer_handle.is_none() { @@ -656,12 +652,12 @@ impl ScriptTask { let this_value = if timer_data.args.len() > 0 { fail!("NYI") } else { - js_info.get().get_ref().js_compartment.borrow().global_obj + js_info.get_ref().js_compartment.global_obj }; // TODO: Support extra arguments. This requires passing a `*JSVal` array as `argv`. let rval = NullValue(); - let cx = js_info.get().get_ref().js_context.borrow().ptr; + let cx = js_info.get_ref().js_context.deref().ptr; with_gc_enabled(cx, || { unsafe { JS_CallFunctionValue(cx, this_value, timer_data.funval, 0, ptr::null(), &rval); @@ -673,13 +669,13 @@ impl ScriptTask { fn handle_reflow_complete_msg(&self, pipeline_id: PipelineId, reflow_id: uint) { debug!("Script: Reflow {:?} complete for {:?}", reflow_id, pipeline_id); let mut page_tree = self.page_tree.borrow_mut(); - let page = page_tree.get().find(pipeline_id).expect( + let page = page_tree.find(pipeline_id).expect( "ScriptTask: received a load message for a layout channel that is not associated \ with this script task. This is a bug.").page(); let last_reflow_id = page.last_reflow_id.borrow(); - if *last_reflow_id.get() == reflow_id { + if *last_reflow_id == reflow_id { let mut layout_join_port = page.layout_join_port.borrow_mut(); - *layout_join_port.get() = None; + *layout_join_port = None; } self.compositor.set_ready_state(FinishedLoading); } @@ -694,14 +690,14 @@ impl ScriptTask { /// Window was resized, but this script was not active, so don't reflow yet fn handle_resize_inactive_msg(&self, id: PipelineId, new_size: Size2D<uint>) { let mut page_tree = self.page_tree.borrow_mut(); - let page = page_tree.get().find(id).expect("Received resize message for PipelineId not associated + let page = page_tree.find(id).expect("Received resize message for PipelineId not associated with a page in the page tree. This is a bug.").page(); let mut window_size = page.window_size.borrow_mut(); - *window_size.get() = new_size; + *window_size = new_size; let mut page_url = page.mut_url(); - let last_loaded_url = replace(page_url.get(), None); + let last_loaded_url = replace(&mut *page_url, None); for url in last_loaded_url.iter() { - *page_url.get() = Some((url.ref0().clone(), true)); + *page_url = Some((url.ref0().clone(), true)); } } @@ -724,22 +720,20 @@ impl ScriptTask { fn handle_exit_pipeline_msg(&self, id: PipelineId) -> bool { // If root is being exited, shut down all pages let mut page_tree = self.page_tree.borrow_mut(); - if page_tree.get().page().id == id { - for page in page_tree.get().iter() { - let page = page.borrow(); + if page_tree.page().id == id { + for page in page_tree.iter() { debug!("shutting down layout for root page {:?}", page.id); - shut_down_layout(page) + shut_down_layout(&*page) } return true } // otherwise find just the matching page and exit all sub-pages - match page_tree.get().remove(id) { + match page_tree.remove(id) { Some(ref mut page_tree) => { for page in page_tree.iter() { - let page = page.borrow(); debug!("shutting down layout for page {:?}", page.id); - shut_down_layout(page) + shut_down_layout(&*page) } false } @@ -757,18 +751,18 @@ impl ScriptTask { debug!("ScriptTask: loading {:?} on page {:?}", url, pipeline_id); let mut page_tree = self.page_tree.borrow_mut(); - let page_tree = page_tree.get().find(pipeline_id).expect("ScriptTask: received a load + let page_tree = page_tree.find(pipeline_id).expect("ScriptTask: received a load message for a layout channel that is not associated with this script task. This is a bug."); let page = page_tree.page(); { let mut page_url = page.mut_url(); - let last_loaded_url = replace(page_url.get(), None); + let last_loaded_url = replace(&mut *page_url, None); for loaded in last_loaded_url.iter() { let (ref loaded, needs_reflow) = *loaded; if *loaded == url { - *page_url.get() = Some((loaded.clone(), false)); + *page_url = Some((loaded.clone(), false)); if needs_reflow { page.damage(ContentChangedDocumentDamage); page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor); @@ -780,7 +774,7 @@ impl ScriptTask { let cx = self.js_runtime.cx(); // Create the window and document objects. - let window = Window::new(cx.borrow().ptr, + let window = Window::new(cx.deref().ptr, page_tree.page.clone(), self.chan.clone(), self.compositor.dup(), @@ -789,7 +783,7 @@ impl ScriptTask { { let mut js_info = page.mut_js_info(); - RegisterBindings::Register(js_info.get().get_mut_ref()); + RegisterBindings::Register(js_info.get_mut_ref()); } self.compositor.set_ready_state(Loading); @@ -809,7 +803,7 @@ impl ScriptTask { { // Create the root frame. let mut frame = page.mut_frame(); - *frame.get() = Some(Frame { + *frame = Some(Frame { document: document.clone(), window: window.clone(), }); @@ -857,7 +851,7 @@ impl ScriptTask { { // No more reflow required let mut page_url = page.mut_url(); - *page_url.get() = Some((url.clone(), false)); + *page_url = Some((url.clone(), false)); } // Receive the JavaScript scripts. @@ -868,11 +862,10 @@ impl ScriptTask { // Define debug functions. let cx = { let js_info = page.js_info(); - let js_info = js_info.get().get_ref(); - let compartment = js_info.js_compartment.borrow(); - assert!(compartment.define_functions(DEBUG_FNS).is_ok()); + let js_info = js_info.get_ref(); + assert!(js_info.js_compartment.define_functions(DEBUG_FNS).is_ok()); - js_info.js_context.borrow().ptr + js_info.js_context.deref().ptr }; // Evaluate every script in the document. @@ -880,15 +873,15 @@ impl ScriptTask { with_gc_enabled(cx, || { let (cx, global_obj) = { let js_info = page.js_info(); - (js_info.get().get_ref().js_context.clone(), - js_info.get().get_ref().js_compartment.borrow().global_obj) + (js_info.get_ref().js_context.clone(), + js_info.get_ref().js_compartment.global_obj) }; //FIXME: this should have some kind of error handling, or explicitly // drop an exception on the floor. - assert!(cx.borrow().evaluate_script(global_obj, - file.data.clone(), - file.url.to_str(), - 1).is_ok()); + assert!(cx.evaluate_script(global_obj, + file.data.clone(), + file.url.to_str(), + 1).is_ok()); }); } @@ -903,7 +896,7 @@ impl ScriptTask { let _ = wintarget.get_mut().dispatch_event_with_target(&winclone, Some(doctarget), &mut event); let mut fragment_node = page.fragment_node.borrow_mut(); - *fragment_node.get() = fragment.map_or(None, |fragid| self.find_fragment_node(page, fragid)); + *fragment_node = fragment.map_or(None, |fragid| self.find_fragment_node(page, fragid)); let ConstellationChan(ref chan) = self.constellation_chan; chan.send(LoadCompleteMsg(page.id, url)); @@ -911,7 +904,7 @@ impl ScriptTask { fn find_fragment_node(&self, page: &Page, fragid: ~str) -> Option<JS<Element>> { let frame = page.frame(); - let document = frame.get().get_ref().document.clone(); + let document = frame.get_ref().document.clone(); match document.get().GetElementById(fragid.to_owned()) { Some(node) => Some(node), None => { @@ -928,7 +921,7 @@ impl ScriptTask { } fn scroll_fragment_point(&self, pipeline_id: PipelineId, page: &Page, node: JS<Element>) { - let (port, chan) = Chan::new(); + let (chan, port) = channel(); let node: JS<Node> = NodeCast::from(&node); let ContentBoxResponse(rect) = page.query_layout(ContentBoxQuery(node.to_trusted_node_address(), chan), port); @@ -946,7 +939,7 @@ impl ScriptTask { /// TODO: Actually perform DOM event dispatch. fn handle_event(&self, pipeline_id: PipelineId, event: Event_) { let mut page_tree = self.page_tree.borrow_mut(); - let page = page_tree.get().find(pipeline_id).expect("ScriptTask: received an event + let page = page_tree.find(pipeline_id).expect("ScriptTask: received an event message for a layout channel that is not associated with this script task. This is a bug.").page(); @@ -956,25 +949,25 @@ impl ScriptTask { { let mut window_size = page.window_size.borrow_mut(); - *window_size.get() = Size2D(new_width, new_height); + *window_size = Size2D(new_width, new_height); } { let frame = page.frame(); - if frame.get().is_some() { + if frame.is_some() { page.damage(ReflowDocumentDamage); page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor) } } let mut fragment_node = page.fragment_node.borrow_mut(); - match fragment_node.get().take() { + match fragment_node.take() { Some(node) => self.scroll_fragment_point(pipeline_id, page, node), None => {} } let frame = page.frame(); - match *frame.get() { + match *frame { Some(ref frame) => { // http://dev.w3.org/csswg/cssom-view/#resizing-viewports // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#event-type-resize @@ -997,7 +990,7 @@ impl ScriptTask { debug!("script got reflow event"); let frame = page.frame(); - if frame.get().is_some() { + if frame.is_some() { page.damage(MatchSelectorsDocumentDamage); page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor) } @@ -1007,18 +1000,18 @@ impl ScriptTask { debug!("ClickEvent: clicked at {:?}", point); let frame = page.frame(); - let document = frame.get().get_ref().document.clone(); + let document = frame.get_ref().document.clone(); let root = document.get().GetDocumentElement(); if root.is_none() { return; } - let (port, chan) = Chan::new(); + let (chan, port) = channel(); let root: JS<Node> = NodeCast::from(&root.unwrap()); match page.query_layout(HitTestQuery(root.to_trusted_node_address(), point, chan), port) { Ok(HitTestResponse(node_address)) => { debug!("node address is {:?}", node_address); let mut node: JS<Node> = - NodeHelpers::from_untrusted_node_address(self.js_runtime.borrow().ptr, + NodeHelpers::from_untrusted_node_address(self.js_runtime.deref().ptr, node_address); debug!("clicked on {:s}", node.debug_str()); @@ -1045,21 +1038,21 @@ impl ScriptTask { MouseUpEvent(..) => {} MouseMoveEvent(point) => { let frame = page.frame(); - let document = frame.get().get_ref().document.clone(); + let document = frame.get_ref().document.clone(); let root = document.get().GetDocumentElement(); if root.is_none() { return; } let root: JS<Node> = NodeCast::from(&root.unwrap()); - let (port, chan) = Chan::new(); + let (chan, port) = channel(); match page.query_layout(MouseOverQuery(root.to_trusted_node_address(), point, chan), port) { Ok(MouseOverResponse(node_address)) => { let mut target_list: ~[JS<Node>] = ~[]; let mut target_compare = false; - let mut mouse_over_targets = self.mouse_over_targets.borrow_mut(); - match *mouse_over_targets.get() { + let mouse_over_targets = &mut *self.mouse_over_targets.borrow_mut(); + match *mouse_over_targets { Some(ref mut mouse_over_targets) => { for node in mouse_over_targets.mut_iter() { node.set_hover_state(false); @@ -1071,7 +1064,7 @@ impl ScriptTask { for node_address in node_address.iter() { let mut node: JS<Node> = NodeHelpers::from_untrusted_node_address( - self.js_runtime.borrow().ptr, *node_address); + self.js_runtime.deref().ptr, *node_address); // Traverse node generations until a node that is an element is // found. while !node.is_element() { @@ -1084,7 +1077,7 @@ impl ScriptTask { if node.is_element() { node.set_hover_state(true); - match *mouse_over_targets.get() { + match *mouse_over_targets { Some(ref mouse_over_targets) => { if !target_compare { target_compare = !mouse_over_targets.contains(&node); @@ -1095,7 +1088,7 @@ impl ScriptTask { target_list.push(node); } } - match *mouse_over_targets.get() { + match *mouse_over_targets { Some(ref mouse_over_targets) => { if mouse_over_targets.len() != target_list.len() { target_compare = true; @@ -1105,11 +1098,11 @@ impl ScriptTask { } if target_compare { - if mouse_over_targets.get().is_some() { + if mouse_over_targets.is_some() { page.damage(MatchSelectorsDocumentDamage); page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor); } - *mouse_over_targets.get() = Some(target_list); + *mouse_over_targets = Some(target_list); } }, Err(()) => {}, @@ -1146,7 +1139,7 @@ fn shut_down_layout(page: &Page) { page.join_layout(); // Tell the layout task to begin shutting down. - let (response_port, response_chan) = Chan::new(); + let (response_chan, response_port) = channel(); let LayoutChan(ref chan) = page.layout_chan; chan.send(layout_interface::PrepareToExitMsg(response_chan)); response_port.recv(); @@ -1156,12 +1149,12 @@ fn shut_down_layout(page: &Page) { let mut js_info = page.mut_js_info(); unsafe { - JS_AllowGC(js_info.get().get_ref().js_context.borrow().ptr); + JS_AllowGC(js_info.get_ref().js_context.deref().ptr); } let mut frame = page.mut_frame(); - *frame.get() = None; - *js_info.get() = None; + *frame = None; + *js_info = None; // Destroy the layout task. If there were node leaks, layout will now crash safely. chan.send(layout_interface::ExitNowMsg); |