aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2015-10-31 18:24:23 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2015-10-31 18:24:23 +0530
commit37c03c78165fbb77eb024f2c3376d5e33cd7e446 (patch)
tree282199e1d9c244c20d62f35b7f6517913d2e37f0
parent521a87180a85709f8f704df33537f79bd131bf71 (diff)
parentd8ef3809a6c73922a5affc475f623a0f1152be28 (diff)
downloadservo-37c03c78165fbb77eb024f2c3376d5e33cd7e446.tar.gz
servo-37c03c78165fbb77eb024f2c3376d5e33cd7e446.zip
Auto merge of #8262 - nxnfufunezn:Remove_JS_root, r=Ms2ger
Removed JS::root #8251 Fixes #8251 r? @Ms2ger <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8262) <!-- Reviewable:end -->
-rw-r--r--components/script/dom/bindings/global.rs4
-rw-r--r--components/script/dom/bindings/js.rs8
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs15
-rw-r--r--components/script/dom/document.rs46
-rw-r--r--components/script/dom/domrectlist.rs2
-rw-r--r--components/script/dom/element.rs26
-rw-r--r--components/script/dom/filelist.rs2
-rw-r--r--components/script/dom/formdata.rs2
-rw-r--r--components/script/dom/htmlcanvaselement.rs4
-rw-r--r--components/script/dom/htmlcollection.rs2
-rw-r--r--components/script/dom/htmlelement.rs4
-rw-r--r--components/script/dom/htmlscriptelement.rs2
-rw-r--r--components/script/dom/namednodemap.rs4
-rw-r--r--components/script/dom/node.rs20
-rw-r--r--components/script/dom/nodeiterator.rs2
-rw-r--r--components/script/dom/nodelist.rs2
-rw-r--r--components/script/dom/performance.rs2
-rw-r--r--components/script/dom/servohtmlparser.rs2
-rw-r--r--components/script/dom/touchlist.rs2
-rw-r--r--components/script/dom/treewalker.rs2
-rw-r--r--components/script/dom/webglrenderingcontext.rs7
-rw-r--r--components/script/dom/xmlhttprequest.rs2
-rw-r--r--components/script/page.rs4
-rw-r--r--components/script/parse/html.rs55
-rw-r--r--components/script/script_task.rs3
25 files changed, 98 insertions, 126 deletions
diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs
index a1a1c68c8c0..e91e94a0a4b 100644
--- a/components/script/dom/bindings/global.rs
+++ b/components/script/dom/bindings/global.rs
@@ -230,8 +230,8 @@ impl GlobalField {
/// Create a stack-bounded root for this reference.
pub fn root(&self) -> GlobalRoot {
match *self {
- GlobalField::Window(ref window) => GlobalRoot::Window(window.root()),
- GlobalField::Worker(ref worker) => GlobalRoot::Worker(worker.root()),
+ GlobalField::Window(ref window) => GlobalRoot::Window(Root::from_ref(window)),
+ GlobalField::Worker(ref worker) => GlobalRoot::Worker(Root::from_ref(worker)),
}
}
}
diff --git a/components/script/dom/bindings/js.rs b/components/script/dom/bindings/js.rs
index a6af7680a96..c78399189ab 100644
--- a/components/script/dom/bindings/js.rs
+++ b/components/script/dom/bindings/js.rs
@@ -73,10 +73,6 @@ impl<T> JS<T> {
}
impl<T: Reflectable> JS<T> {
- /// Root this JS-owned value to prevent its collection as garbage.
- pub fn root(&self) -> Root<T> {
- Root::new(self.ptr)
- }
/// Create a JS<T> from a Root<T>
/// XXX Not a great API. Should be a call on Root<T> instead
#[allow(unrooted_must_root)]
@@ -291,7 +287,7 @@ impl<T: Reflectable> MutHeap<JS<T>> {
pub fn get(&self) -> Root<T> {
debug_assert!(task_state::get().is_script());
unsafe {
- ptr::read(self.val.get()).root()
+ Root::from_ref(&*ptr::read(self.val.get()))
}
}
}
@@ -369,7 +365,7 @@ impl<T: Reflectable> MutNullableHeap<JS<T>> {
pub fn get(&self) -> Option<Root<T>> {
debug_assert!(task_state::get().is_script());
unsafe {
- ptr::read(self.ptr.get()).map(|o| o.root())
+ ptr::read(self.ptr.get()).map(|o| Root::from_ref(&*o))
}
}
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs
index aa7936f69f5..a42e98a1a03 100644
--- a/components/script/dom/canvasrenderingcontext2d.rs
+++ b/components/script/dom/canvasrenderingcontext2d.rs
@@ -148,7 +148,7 @@ impl CanvasRenderingContext2D {
}
fn mark_as_dirty(&self) {
- self.canvas.root().upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
+ self.canvas.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
fn update_transform(&self) {
@@ -290,7 +290,7 @@ impl CanvasRenderingContext2D {
let smoothing_enabled = self.state.borrow().image_smoothing_enabled;
// If the source and target canvas are the same
- let msg = if self.canvas.root().r() == canvas {
+ let msg = if &*self.canvas == canvas {
CanvasMsg::Canvas2d(Canvas2dMsg::DrawImageSelf(image_size, dest_rect, source_rect, smoothing_enabled))
} else { // Source and target canvases are different
let context = match canvas.get_or_init_2d_context() {
@@ -367,8 +367,7 @@ impl CanvasRenderingContext2D {
#[inline]
fn request_image_from_cache(&self, url: Url) -> ImageResponse {
- let canvas = self.canvas.root();
- let window = window_from_node(canvas.r());
+ let window = window_from_node(&*self.canvas);
canvas_utils::request_image_from_cache(window.r(), url)
}
@@ -422,7 +421,7 @@ impl LayoutCanvasRenderingContext2DHelpers for LayoutJS<CanvasRenderingContext2D
impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
// https://html.spec.whatwg.org/multipage/#dom-context-2d-canvas
fn Canvas(&self) -> Root<HTMLCanvasElement> {
- self.canvas.root()
+ Root::from_ref(&*self.canvas)
}
// https://html.spec.whatwg.org/multipage/#dom-context-2d-save
@@ -764,7 +763,7 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
StringOrCanvasGradientOrCanvasPattern::eString(result)
},
CanvasFillOrStrokeStyle::Gradient(ref gradient) => {
- StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(gradient.root())
+ StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(Root::from_ref(&*gradient))
},
}
}
@@ -804,7 +803,7 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
StringOrCanvasGradientOrCanvasPattern::eString(result)
},
CanvasFillOrStrokeStyle::Gradient(ref gradient) => {
- StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(gradient.root())
+ StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(Root::from_ref(&*gradient))
},
}
}
@@ -881,7 +880,7 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
let (sender, receiver) = ipc::channel::<Vec<u8>>().unwrap();
let dest_rect = Rect::new(Point2D::new(sx.to_i32().unwrap(), sy.to_i32().unwrap()),
Size2D::new(sw as i32, sh as i32));
- let canvas_size = self.canvas.root().r().get_size();
+ let canvas_size = self.canvas.get_size();
let canvas_size = Size2D::new(canvas_size.width as f64, canvas_size.height as f64);
self.ipc_renderer
.send(CanvasMsg::Canvas2d(Canvas2dMsg::GetImageData(dest_rect, canvas_size, sender)))
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 0a94f9f5504..4559bb0981c 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -391,8 +391,7 @@ impl Document {
None => false,
Some(elements) => {
let position = elements.iter()
- .map(|elem| elem.root())
- .position(|element| element.r() == to_unregister)
+ .position(|element| &**element == to_unregister)
.expect("This element should be in registered.");
elements.remove(position);
elements.is_empty()
@@ -428,7 +427,7 @@ impl Document {
let root = root.upcast::<Node>();
for node in root.traverse_preorder() {
if let Some(elem) = node.downcast() {
- if (*elements)[head].root().r() == elem {
+ if &*(*elements)[head] == elem {
head += 1;
}
if new_node == node.r() || head == elements.len() {
@@ -685,8 +684,7 @@ impl Document {
// under the mouse.
for target in prev_mouse_over_targets.iter() {
if !mouse_over_targets.contains(target) {
- let target = target.root();
- let target_ref = target.r();
+ let target_ref = &**target;
if target_ref.get_hover_state() {
target_ref.set_hover_state(false);
@@ -749,27 +747,27 @@ impl Document {
},
};
let target = el.upcast::<EventTarget>();
- let window = self.window.root();
+ let window = &*self.window;
let client_x = Finite::wrap(point.x as f64);
let client_y = Finite::wrap(point.y as f64);
let page_x = Finite::wrap(point.x as f64 + window.PageXOffset() as f64);
let page_y = Finite::wrap(point.y as f64 + window.PageYOffset() as f64);
- let touch = Touch::new(window.r(), identifier, target,
+ let touch = Touch::new(window, identifier, target,
client_x, client_y, // TODO: Get real screen coordinates?
client_x, client_y,
page_x, page_y);
let mut touches = RootedVec::new();
touches.push(JS::from_rooted(&touch));
- let touches = TouchList::new(window.r(), touches.r());
+ let touches = TouchList::new(window, touches.r());
- let event = TouchEvent::new(window.r(),
+ let event = TouchEvent::new(window,
event_name,
EventBubbles::Bubbles,
EventCancelable::Cancelable,
- Some(window.r()),
+ Some(window),
0i32,
&touches, &touches, &touches,
// FIXME: modifier keys
@@ -777,9 +775,9 @@ impl Document {
let event = event.upcast::<Event>();
let result = event.fire(target);
- window.r().reflow(ReflowGoal::ForDisplay,
- ReflowQueryType::NoQuery,
- ReflowReason::MouseEvent);
+ window.reflow(ReflowGoal::ForDisplay,
+ ReflowQueryType::NoQuery,
+ ReflowReason::MouseEvent);
result
}
@@ -1089,13 +1087,15 @@ impl Document {
}
let mut deferred_scripts = self.deferred_scripts.borrow_mut();
while !deferred_scripts.is_empty() {
- let script = deferred_scripts[0].root();
- // Part of substep 1.
- if !script.is_ready_to_be_executed() {
- return;
+ {
+ let script = &*deferred_scripts[0];
+ // Part of substep 1.
+ if !script.is_ready_to_be_executed() {
+ return;
+ }
+ // Substep 2.
+ script.execute();
}
- // Substep 2.
- script.execute();
// Substep 3.
deferred_scripts.remove(0);
// Substep 4 (implicit).
@@ -1110,7 +1110,7 @@ impl Document {
// Execute the first in-order asap-executed script if it's ready, repeat as required.
// Re-borrowing the list for each step because it can also be borrowed under execute.
while self.asap_in_order_scripts_list.borrow().len() > 0 {
- let script = self.asap_in_order_scripts_list.borrow()[0].root();
+ let script = Root::from_ref(&*self.asap_in_order_scripts_list.borrow()[0]);
if !script.r().is_ready_to_be_executed() {
break;
}
@@ -1121,7 +1121,7 @@ impl Document {
let mut idx = 0;
// Re-borrowing the set for each step because it can also be borrowed under execute.
while idx < self.asap_scripts_set.borrow().len() {
- let script = self.asap_scripts_set.borrow()[idx].root();
+ let script = Root::from_ref(&*self.asap_scripts_set.borrow()[idx]);
if !script.r().is_ready_to_be_executed() {
idx += 1;
continue;
@@ -1332,7 +1332,7 @@ impl Document {
}
pub fn get_element_by_id(&self, id: &Atom) -> Option<Root<Element>> {
- self.idmap.borrow().get(&id).map(|ref elements| (*elements)[0].root())
+ self.idmap.borrow().get(&id).map(|ref elements| Root::from_ref(&*(*elements)[0]))
}
pub fn record_element_state_change(&self, el: &Element, which: ElementState) {
@@ -1925,7 +1925,7 @@ impl DocumentMethods for Document {
// https://html.spec.whatwg.org/multipage/#dom-document-defaultview
fn DefaultView(&self) -> Root<Window> {
- self.window.root()
+ Root::from_ref(&*self.window)
}
// https://html.spec.whatwg.org/multipage/#dom-document-cookie
diff --git a/components/script/dom/domrectlist.rs b/components/script/dom/domrectlist.rs
index cd67dbc28c7..963d97df623 100644
--- a/components/script/dom/domrectlist.rs
+++ b/components/script/dom/domrectlist.rs
@@ -42,7 +42,7 @@ impl DOMRectListMethods for DOMRectList {
fn Item(&self, index: u32) -> Option<Root<DOMRect>> {
let rects = &self.rects;
if index < rects.len() as u32 {
- Some(rects[index as usize].root())
+ Some(Root::from_ref(&*rects[index as usize]))
} else {
None
}
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 46628935bb1..eaee0d241f0 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -874,16 +874,15 @@ impl Element {
}
pub fn get_attribute(&self, namespace: &Namespace, local_name: &Atom) -> Option<Root<Attr>> {
- self.attrs.borrow().iter().map(JS::root).find(|attr| {
+ self.attrs.borrow().iter().find(|attr| {
attr.local_name() == local_name && attr.namespace() == namespace
- })
+ }).map(|js| Root::from_ref(&**js))
}
// https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name
pub fn get_attribute_by_name(&self, name: DOMString) -> Option<Root<Attr>> {
let name = &self.parsed_name(name);
- self.attrs.borrow().iter().map(JS::root)
- .find(|a| a.r().name() == name)
+ self.attrs.borrow().iter().find(|a| a.name() == name).map(|js| Root::from_ref(&**js))
}
pub fn set_attribute_from_parser(&self,
@@ -891,8 +890,8 @@ impl Element {
value: DOMString,
prefix: Option<Atom>) {
// Don't set if the attribute already exists, so we can handle add_attrs_if_missing
- if self.attrs.borrow().iter().map(JS::root)
- .any(|a| *a.r().local_name() == qname.local && *a.r().namespace() == qname.ns) {
+ if self.attrs.borrow().iter()
+ .any(|a| *a.local_name() == qname.local && *a.namespace() == qname.ns) {
return;
}
@@ -942,7 +941,8 @@ impl Element {
find: F)
where F: Fn(&Attr)
-> bool {
- let attr = self.attrs.borrow().iter().map(JS::root).find(|attr| find(&attr));
+ let attr = self.attrs.borrow().iter()
+ .find(|attr| find(&attr)).map(|js| Root::from_ref(&**js));
if let Some(attr) = attr {
attr.set_value(value, self);
} else {
@@ -973,10 +973,10 @@ impl Element {
fn remove_first_matching_attribute<F>(&self, find: F) -> Option<Root<Attr>>
where F: Fn(&Attr) -> bool
{
- let idx = self.attrs.borrow().iter().map(JS::root).position(|attr| find(&attr));
+ let idx = self.attrs.borrow().iter().position(|attr| find(&attr));
idx.map(|idx| {
- let attr = (*self.attrs.borrow())[idx].root();
+ let attr = Root::from_ref(&*(*self.attrs.borrow())[idx]);
self.attrs.borrow_mut().remove(idx);
attr.set_owner(None);
if attr.namespace() == &ns!("") {
@@ -1005,8 +1005,8 @@ impl Element {
pub fn has_attribute(&self, local_name: &Atom) -> bool {
assert!(local_name.bytes().all(|b| b.to_ascii_lowercase() == b));
- self.attrs.borrow().iter().map(JS::root).any(|attr| {
- attr.r().local_name() == local_name && attr.r().namespace() == &ns!("")
+ self.attrs.borrow().iter().any(|attr| {
+ attr.local_name() == local_name && attr.namespace() == &ns!("")
})
}
@@ -1695,8 +1695,8 @@ impl<'a> ::selectors::Element for Root<Element> {
})
},
NamespaceConstraint::Any => {
- self.attrs.borrow().iter().map(JS::root).any(|attr| {
- attr.local_name() == local_name && test(&attr.value())
+ self.attrs.borrow().iter().any(|attr| {
+ attr.local_name() == local_name && test(&attr.value())
})
}
}
diff --git a/components/script/dom/filelist.rs b/components/script/dom/filelist.rs
index d695ac8f43a..78a9ee30012 100644
--- a/components/script/dom/filelist.rs
+++ b/components/script/dom/filelist.rs
@@ -40,7 +40,7 @@ impl FileListMethods for FileList {
// https://w3c.github.io/FileAPI/#dfn-item
fn Item(&self, index: u32) -> Option<Root<File>> {
- Some(self.list[index as usize].root())
+ Some(Root::from_ref(&*(self.list[index as usize])))
}
// check-tidy: no specs after this line
diff --git a/components/script/dom/formdata.rs b/components/script/dom/formdata.rs
index a51e058b864..5956aadd26c 100644
--- a/components/script/dom/formdata.rs
+++ b/components/script/dom/formdata.rs
@@ -90,7 +90,7 @@ impl FormDataMethods for FormData {
.get(&name)
.map(|entry| match entry[0] {
FormDatum::StringData(ref s) => eString(s.clone()),
- FormDatum::FileData(ref f) => eFile(f.root()),
+ FormDatum::FileData(ref f) => eFile(Root::from_ref(&*f)),
})
}
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index 47126ed3dd0..67894f36429 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -153,7 +153,7 @@ impl HTMLCanvasElement {
}
match *self.context.borrow().as_ref().unwrap() {
- CanvasContext::Context2d(ref context) => Some(context.root()),
+ CanvasContext::Context2d(ref context) => Some(Root::from_ref(&*context)),
_ => None,
}
}
@@ -182,7 +182,7 @@ impl HTMLCanvasElement {
}
if let Some(CanvasContext::WebGL(ref context)) = *self.context.borrow() {
- Some(context.root())
+ Some(Root::from_ref(&*context))
} else {
None
}
diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs
index 4ddc0fef6dd..62335a33a6e 100644
--- a/components/script/dom/htmlcollection.rs
+++ b/components/script/dom/htmlcollection.rs
@@ -164,7 +164,7 @@ impl HTMLCollection {
pub fn elements_iter(&self) -> HTMLCollectionElementsIter {
let ref filter = self.collection.1;
- let root = self.collection.0.root();
+ let root = Root::from_ref(&*self.collection.0);
let mut node_iter = root.traverse_preorder();
let _ = node_iter.next(); // skip the root node
HTMLCollectionElementsIter {
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index bb52cbc2402..6ebf0106099 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -360,8 +360,8 @@ impl HTMLElement {
pub fn supported_prop_names_custom_attr(&self) -> Vec<DOMString> {
let element = self.upcast::<Element>();
- element.attrs().iter().map(JS::root).filter_map(|attr| {
- let raw_name = attr.r().local_name();
+ element.attrs().iter().filter_map(|attr| {
+ let raw_name = attr.local_name();
to_camel_case(&raw_name)
}).collect()
}
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 118c0648e77..4f1b0ca135a 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -364,7 +364,7 @@ impl HTMLScriptElement {
// Step 1.
let doc = document_from_node(self);
- if self.parser_inserted.get() && doc.r() != self.parser_document.root().r() {
+ if self.parser_inserted.get() && &*doc != &*self.parser_document {
return;
}
diff --git a/components/script/dom/namednodemap.rs b/components/script/dom/namednodemap.rs
index 5c78de0ed51..fc344e78ccf 100644
--- a/components/script/dom/namednodemap.rs
+++ b/components/script/dom/namednodemap.rs
@@ -42,7 +42,7 @@ impl NamedNodeMapMethods for NamedNodeMap {
// https://dom.spec.whatwg.org/#dom-namednodemap-item
fn Item(&self, index: u32) -> Option<Root<Attr>> {
- self.owner.attrs().get(index as usize).map(JS::root)
+ self.owner.attrs().get(index as usize).map(|js| Root::from_ref(&**js))
}
// https://dom.spec.whatwg.org/#dom-namednodemap-getnameditem
@@ -87,7 +87,7 @@ impl NamedNodeMapMethods for NamedNodeMap {
// https://heycam.github.io/webidl/#dfn-supported-property-names
fn SupportedPropertyNames(&self) -> Vec<DOMString> {
- self.owner.attrs().iter().map(JS::root).map(|attr| {
+ self.owner.attrs().iter().map(|attr| {
(**attr.name()).to_owned()
}).collect()
}
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index c5a891d56db..a8dd8972ca0 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -1648,7 +1648,7 @@ impl Node {
let node_elem = node.downcast::<Element>().unwrap();
let copy_elem = copy.downcast::<Element>().unwrap();
- for attr in node_elem.attrs().iter().map(JS::root) {
+ for attr in node_elem.attrs().iter() {
copy_elem.push_new_attribute(attr.local_name().clone(),
attr.value().clone(),
attr.name().clone(),
@@ -1719,12 +1719,10 @@ impl Node {
let prefix_atom = prefix.as_ref().map(|s| Atom::from_slice(s));
// Step 2.
- let namespace_attr =
- element.attrs()
- .iter()
- .map(|attr| attr.root())
- .find(|attr| attr_defines_namespace(attr.r(),
- &prefix_atom));
+ let attrs = element.attrs();
+ let namespace_attr = attrs.iter().find(|attr| {
+ attr_defines_namespace(attr, &prefix_atom)
+ });
// Steps 2.1-2.
if let Some(attr) = namespace_attr {
@@ -2154,12 +2152,10 @@ impl NodeMethods for Node {
// FIXME(https://github.com/rust-lang/rust/issues/23338)
let attrs = element.attrs();
attrs.iter().all(|attr| {
- let attr = attr.root();
other_element.attrs().iter().any(|other_attr| {
- let other_attr = other_attr.root();
- (*attr.r().namespace() == *other_attr.r().namespace()) &&
- (attr.r().local_name() == other_attr.r().local_name()) &&
- (**attr.r().value() == **other_attr.r().value())
+ (*attr.namespace() == *other_attr.namespace()) &&
+ (attr.local_name() == other_attr.local_name()) &&
+ (**attr.value() == **other_attr.value())
})
})
}
diff --git a/components/script/dom/nodeiterator.rs b/components/script/dom/nodeiterator.rs
index 27a99ec3b55..762d2233c6c 100644
--- a/components/script/dom/nodeiterator.rs
+++ b/components/script/dom/nodeiterator.rs
@@ -67,7 +67,7 @@ impl NodeIterator {
impl NodeIteratorMethods for NodeIterator {
// https://dom.spec.whatwg.org/#dom-nodeiterator-root
fn Root(&self) -> Root<Node> {
- self.root_node.root()
+ Root::from_ref(&*self.root_node)
}
// https://dom.spec.whatwg.org/#dom-nodeiterator-whattoshow
diff --git a/components/script/dom/nodelist.rs b/components/script/dom/nodelist.rs
index 490df73bd56..68e3b7ee424 100644
--- a/components/script/dom/nodelist.rs
+++ b/components/script/dom/nodelist.rs
@@ -66,7 +66,7 @@ impl NodeListMethods for NodeList {
fn Item(&self, index: u32) -> Option<Root<Node>> {
match self.list_type {
NodeListType::Simple(ref elems) => {
- elems.get(index as usize).map(|node| node.root())
+ elems.get(index as usize).map(|node| Root::from_ref(&**node))
},
NodeListType::Children(ref list) => list.item(index),
}
diff --git a/components/script/dom/performance.rs b/components/script/dom/performance.rs
index b8b6c17ef09..591cb5472c4 100644
--- a/components/script/dom/performance.rs
+++ b/components/script/dom/performance.rs
@@ -46,7 +46,7 @@ impl Performance {
impl PerformanceMethods for Performance {
// https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html#performance-timing-attribute
fn Timing(&self) -> Root<PerformanceTiming> {
- self.timing.root()
+ Root::from_ref(&*self.timing)
}
// https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/HighResolutionTime/Overview.html#dom-performance-now
diff --git a/components/script/dom/servohtmlparser.rs b/components/script/dom/servohtmlparser.rs
index 3a4a59ba3af..433c1085aef 100644
--- a/components/script/dom/servohtmlparser.rs
+++ b/components/script/dom/servohtmlparser.rs
@@ -45,7 +45,7 @@ impl Sink {
#[allow(unrooted_must_root)] // method is only run at parse time
pub fn get_or_create(&self, child: NodeOrText<JS<Node>>) -> Root<Node> {
match child {
- NodeOrText::AppendNode(n) => n.root(),
+ NodeOrText::AppendNode(n) => Root::from_ref(&*n),
NodeOrText::AppendText(t) => {
let text = Text::new(t.into(), &self.document);
Root::upcast(text)
diff --git a/components/script/dom/touchlist.rs b/components/script/dom/touchlist.rs
index 5806f945008..f964a1ff250 100644
--- a/components/script/dom/touchlist.rs
+++ b/components/script/dom/touchlist.rs
@@ -38,7 +38,7 @@ impl TouchListMethods for TouchList {
/// https://w3c.github.io/touch-events/#widl-TouchList-item-getter-Touch-unsigned-long-index
fn Item(&self, index: u32) -> Option<Root<Touch>> {
- self.touches.get(index as usize).map(JS::root)
+ self.touches.get(index as usize).map(|js| Root::from_ref(&**js))
}
/// https://w3c.github.io/touch-events/#widl-TouchList-item-getter-Touch-unsigned-long-index
diff --git a/components/script/dom/treewalker.rs b/components/script/dom/treewalker.rs
index f19e8383ddf..2bd5cc706e7 100644
--- a/components/script/dom/treewalker.rs
+++ b/components/script/dom/treewalker.rs
@@ -65,7 +65,7 @@ impl TreeWalker {
impl TreeWalkerMethods for TreeWalker {
// https://dom.spec.whatwg.org/#dom-treewalker-root
fn Root(&self) -> Root<Node> {
- self.root_node.root()
+ Root::from_ref(&*self.root_node)
}
// https://dom.spec.whatwg.org/#dom-treewalker-whattoshow
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index aa92967cb1e..07ac00000a2 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -153,7 +153,7 @@ impl WebGLRenderingContext {
}
fn mark_as_dirty(&self) {
- self.canvas.root().upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
+ self.canvas.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
}
@@ -166,7 +166,7 @@ impl Drop for WebGLRenderingContext {
impl WebGLRenderingContextMethods for WebGLRenderingContext {
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.1
fn Canvas(&self) -> Root<HTMLCanvasElement> {
- self.canvas.root()
+ Root::from_ref(&*self.canvas)
}
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.1
@@ -848,8 +848,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
None => return,
};
- let canvas = self.canvas.root();
- let window = window_from_node(canvas.r());
+ let window = window_from_node(&*self.canvas);
let img = match canvas_utils::request_image_from_cache(window.r(), img_url) {
ImageResponse::Loaded(img) => img,
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 39b86117b34..c5f8ef62556 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -465,7 +465,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
// https://xhr.spec.whatwg.org/#the-upload-attribute
fn Upload(&self) -> Root<XMLHttpRequestUpload> {
- self.upload.root()
+ Root::from_ref(&*self.upload)
}
// https://xhr.spec.whatwg.org/#the-send()-method
diff --git a/components/script/page.rs b/components/script/page.rs
index b6b35c6119a..67cb1ca46ed 100644
--- a/components/script/page.rs
+++ b/components/script/page.rs
@@ -68,11 +68,11 @@ impl Page {
}
pub fn window(&self) -> Root<Window> {
- self.frame.borrow().as_ref().unwrap().window.root()
+ Root::from_ref(&*self.frame.borrow().as_ref().unwrap().window)
}
pub fn document(&self) -> Root<Document> {
- self.frame.borrow().as_ref().unwrap().document.root()
+ Root::from_ref(&*self.frame.borrow().as_ref().unwrap().document)
}
// must handle root case separately
diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs
index 4943fecdb5f..07c5d19b1f3 100644
--- a/components/script/parse/html.rs
+++ b/components/script/parse/html.rs
@@ -10,8 +10,7 @@ use dom::bindings::codegen::Bindings::HTMLTemplateElementBinding::HTMLTemplateEl
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
use dom::bindings::codegen::InheritTypes::{CharacterDataTypeId, NodeTypeId};
use dom::bindings::conversions::Castable;
-use dom::bindings::js::{JS, Root};
-use dom::bindings::js::{RootedReference};
+use dom::bindings::js::{JS, RootedReference};
use dom::characterdata::CharacterData;
use dom::comment::Comment;
use dom::document::Document;
@@ -45,11 +44,10 @@ impl<'a> TreeSink for servohtmlparser::Sink {
type Handle = JS<Node>;
fn get_document(&mut self) -> JS<Node> {
- JS::from_ref(self.document.root().upcast())
+ JS::from_ref(self.document.upcast())
}
fn get_template_contents(&self, target: JS<Node>) -> JS<Node> {
- let target = target.root();
let template = target.downcast::<HTMLTemplateElement>()
.expect("tried to get template contents of non-HTMLTemplateElement in HTML parsing");
JS::from_ref(template.Content().upcast())
@@ -60,8 +58,7 @@ impl<'a> TreeSink for servohtmlparser::Sink {
}
fn elem_name(&self, target: JS<Node>) -> QualName {
- let node: Root<Node> = target.root();
- let elem = node.downcast::<Element>()
+ let elem = target.downcast::<Element>()
.expect("tried to get name of non-Element in HTML parsing");
QualName {
ns: elem.namespace().clone(),
@@ -71,8 +68,7 @@ impl<'a> TreeSink for servohtmlparser::Sink {
fn create_element(&mut self, name: QualName, attrs: Vec<Attribute>)
-> JS<Node> {
- let doc = self.document.root();
- let elem = Element::create(name, None, doc.r(),
+ let elem = Element::create(name, None, &*self.document,
ElementCreator::ParserCreated);
for attr in attrs {
@@ -83,8 +79,7 @@ impl<'a> TreeSink for servohtmlparser::Sink {
}
fn create_comment(&mut self, text: StrTendril) -> JS<Node> {
- let doc = self.document.root();
- let comment = Comment::new(text.into(), doc.r());
+ let comment = Comment::new(text.into(), &*self.document);
JS::from_ref(comment.upcast())
}
@@ -92,14 +87,13 @@ impl<'a> TreeSink for servohtmlparser::Sink {
sibling: JS<Node>,
new_node: NodeOrText<JS<Node>>) -> Result<(), NodeOrText<JS<Node>>> {
// If there is no parent, return the node to the parser.
- let sibling: Root<Node> = sibling.root();
- let parent = match sibling.r().GetParentNode() {
+ let parent = match sibling.GetParentNode() {
Some(p) => p,
None => return Err(new_node),
};
let child = self.get_or_create(new_node);
- assert!(parent.r().InsertBefore(child.r(), Some(sibling.r())).is_ok());
+ assert!(parent.r().InsertBefore(child.r(), Some(&*sibling)).is_ok());
Ok(())
}
@@ -108,29 +102,26 @@ impl<'a> TreeSink for servohtmlparser::Sink {
}
fn set_quirks_mode(&mut self, mode: QuirksMode) {
- let doc = self.document.root();
- doc.r().set_quirks_mode(mode);
+ self.document.set_quirks_mode(mode);
}
fn append(&mut self, parent: JS<Node>, child: NodeOrText<JS<Node>>) {
- let parent: Root<Node> = parent.root();
let child = self.get_or_create(child);
// FIXME(#3701): Use a simpler algorithm and merge adjacent text nodes
- assert!(parent.r().AppendChild(child.r()).is_ok());
+ assert!(parent.AppendChild(child.r()).is_ok());
}
fn append_doctype_to_document(&mut self, name: StrTendril, public_id: StrTendril,
system_id: StrTendril) {
- let doc = self.document.root();
+ let doc = &*self.document;
let doctype = DocumentType::new(
- name.into(), Some(public_id.into()), Some(system_id.into()), doc.r());
+ name.into(), Some(public_id.into()), Some(system_id.into()), doc);
doc.upcast::<Node>().AppendChild(doctype.upcast()).expect("Appending failed");
}
fn add_attrs_if_missing(&mut self, target: JS<Node>, attrs: Vec<Attribute>) {
- let node: Root<Node> = target.root();
- let elem = node.downcast::<Element>()
+ let elem = target.downcast::<Element>()
.expect("tried to set attrs on non-Element in HTML parsing");
for attr in attrs {
elem.set_attribute_from_parser(attr.name, attr.value.into(), None);
@@ -138,20 +129,17 @@ impl<'a> TreeSink for servohtmlparser::Sink {
}
fn remove_from_parent(&mut self, target: JS<Node>) {
- let node = target.root();
- if let Some(ref parent) = node.r().GetParentNode() {
- parent.r().RemoveChild(node.r()).unwrap();
+ if let Some(ref parent) = target.GetParentNode() {
+ parent.r().RemoveChild(&*target).unwrap();
}
}
fn mark_script_already_started(&mut self, node: JS<Node>) {
- let node: Root<Node> = node.root();
let script = node.downcast::<HTMLScriptElement>();
script.map(|script| script.mark_already_started());
}
fn complete_script(&mut self, node: JS<Node>) -> NextParserState {
- let node: Root<Node> = node.root();
let script = node.downcast::<HTMLScriptElement>();
if let Some(script) = script {
return script.prepare();
@@ -160,11 +148,7 @@ impl<'a> TreeSink for servohtmlparser::Sink {
}
fn reparent_children(&mut self, node: JS<Node>, new_parent: JS<Node>) {
- let new_parent = new_parent.root();
- let new_parent = new_parent.r();
- let old_parent = node.root();
- let old_parent = old_parent.r();
- while let Some(ref child) = old_parent.GetFirstChild() {
+ while let Some(ref child) = node.GetFirstChild() {
new_parent.AppendChild(child.r()).unwrap();
}
@@ -181,11 +165,10 @@ impl<'a> Serializable for &'a Node {
let name = QualName::new(elem.namespace().clone(),
elem.local_name().clone());
if traversal_scope == IncludeNode {
- let attrs = elem.attrs().iter().map(|at| {
- let attr = at.root();
- let qname = QualName::new(attr.r().namespace().clone(),
- attr.r().local_name().clone());
- let value = attr.r().value().clone();
+ let attrs = elem.attrs().iter().map(|attr| {
+ let qname = QualName::new(attr.namespace().clone(),
+ attr.local_name().clone());
+ let value = attr.value().clone();
(qname, value)
}).collect::<Vec<_>>();
let attr_refs = attrs.iter().map(|&(ref qname, ref value)| {
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index fa427db6ff1..4939a58e086 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -1747,9 +1747,8 @@ impl ScriptTask {
// Notify Constellation about the topmost anchor mouse over target.
for target in &*mouse_over_targets {
- let target = target.root();
if target.upcast::<Node>().is_anchor_element() {
- let status = target.r().get_attribute(&ns!(""), &atom!("href"))
+ let status = target.get_attribute(&ns!(""), &atom!("href"))
.and_then(|href| {
let value = href.value();
let url = document.r().url();