aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script')
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py18
-rw-r--r--src/components/script/dom/bindings/conversions.rs1
-rw-r--r--src/components/script/dom/bindings/js.rs4
-rw-r--r--src/components/script/dom/bindings/utils.rs8
-rw-r--r--src/components/script/dom/document.rs19
-rw-r--r--src/components/script/dom/element.rs4
-rw-r--r--src/components/script/dom/htmliframeelement.rs2
-rw-r--r--src/components/script/dom/htmlimageelement.rs6
-rw-r--r--src/components/script/dom/htmlobjectelement.rs2
-rw-r--r--src/components/script/dom/location.rs4
-rw-r--r--src/components/script/dom/node.rs8
-rw-r--r--src/components/script/dom/window.rs30
-rw-r--r--src/components/script/html/cssparse.rs12
-rw-r--r--src/components/script/html/hubbub_html_parser.rs37
-rw-r--r--src/components/script/layout_interface.rs24
-rw-r--r--src/components/script/script.rs8
-rw-r--r--src/components/script/script_task.rs197
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(&copy).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);