From 7af5a7fd5409ab8db0274eb829136e5953e718ed Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Sun, 18 Jun 2017 13:21:32 +0200 Subject: Untry script --- components/script/dom/range.rs | 84 +++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 42 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index b5521e93d55..fa849a0fc1a 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -269,25 +269,25 @@ impl RangeMethods for Range { // https://dom.spec.whatwg.org/#dom-range-setstartbefore fn SetStartBefore(&self, node: &Node) -> ErrorResult { - let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); + let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?; self.SetStart(&parent, node.index()) } // https://dom.spec.whatwg.org/#dom-range-setstartafter fn SetStartAfter(&self, node: &Node) -> ErrorResult { - let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); + let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?; self.SetStart(&parent, node.index() + 1) } // https://dom.spec.whatwg.org/#dom-range-setendbefore fn SetEndBefore(&self, node: &Node) -> ErrorResult { - let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); + let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?; self.SetEnd(&parent, node.index()) } // https://dom.spec.whatwg.org/#dom-range-setendafter fn SetEndAfter(&self, node: &Node) -> ErrorResult { - let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); + let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?; self.SetEnd(&parent, node.index() + 1) } @@ -303,7 +303,7 @@ impl RangeMethods for Range { // https://dom.spec.whatwg.org/#dom-range-selectnode fn SelectNode(&self, node: &Node) -> ErrorResult { // Steps 1, 2. - let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); + let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?; // Step 3. let index = node.index(); // Step 4. @@ -446,7 +446,7 @@ impl RangeMethods for Range { let data = cdata.SubstringData(start_offset, end_offset - start_offset).unwrap(); let clone = cdata.clone_with_data(data, &start_node.owner_doc()); // Step 4.3. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; // Step 4.4 return Ok(fragment); } @@ -454,7 +454,7 @@ impl RangeMethods for Range { // Steps 5-12. let (first_contained_child, last_contained_child, contained_children) = - try!(self.contained_children()); + self.contained_children()?; if let Some(child) = first_contained_child { // Step 13. @@ -464,12 +464,12 @@ impl RangeMethods for Range { let data = cdata.SubstringData(start_offset, start_node.len() - start_offset).unwrap(); let clone = cdata.clone_with_data(data, &start_node.owner_doc()); // Step 13.3. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; } else { // Step 14.1. let clone = child.CloneNode(false); // Step 14.2. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; // Step 14.3. let subrange = Range::new(&clone.owner_doc(), &start_node, @@ -477,9 +477,9 @@ impl RangeMethods for Range { &child, child.len()); // Step 14.4. - let subfragment = try!(subrange.CloneContents()); + let subfragment = subrange.CloneContents()?; // Step 14.5. - try!(clone.AppendChild(subfragment.upcast())); + clone.AppendChild(subfragment.upcast())?; } } @@ -488,7 +488,7 @@ impl RangeMethods for Range { // Step 15.1. let clone = child.CloneNode(true); // Step 15.2. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; } if let Some(child) = last_contained_child { @@ -499,12 +499,12 @@ impl RangeMethods for Range { let data = cdata.SubstringData(0, end_offset).unwrap(); let clone = cdata.clone_with_data(data, &start_node.owner_doc()); // Step 16.3. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; } else { // Step 17.1. let clone = child.CloneNode(false); // Step 17.2. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; // Step 17.3. let subrange = Range::new(&clone.owner_doc(), &child, @@ -512,9 +512,9 @@ impl RangeMethods for Range { &end_node, end_offset); // Step 17.4. - let subfragment = try!(subrange.CloneContents()); + let subfragment = subrange.CloneContents()?; // Step 17.5. - try!(clone.AppendChild(subfragment.upcast())); + clone.AppendChild(subfragment.upcast())?; } } @@ -547,11 +547,11 @@ impl RangeMethods for Range { let text = end_data.SubstringData(start_offset, end_offset - start_offset); clone.downcast::().unwrap().SetData(text.unwrap()); // Step 4.3. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; // Step 4.4. - try!(end_data.ReplaceData(start_offset, + end_data.ReplaceData(start_offset, end_offset - start_offset, - DOMString::new())); + DOMString::new())?; // Step 4.5. return Ok(fragment); } @@ -559,7 +559,7 @@ impl RangeMethods for Range { // Steps 5-12. let (first_contained_child, last_contained_child, contained_children) = - try!(self.contained_children()); + self.contained_children()?; let (new_node, new_offset) = if start_node.is_inclusive_ancestor_of(&end_node) { // Step 13. @@ -584,16 +584,16 @@ impl RangeMethods for Range { start_node.len() - start_offset); clone.downcast::().unwrap().SetData(text.unwrap()); // Step 15.3. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; // Step 15.4. - try!(start_data.ReplaceData(start_offset, + start_data.ReplaceData(start_offset, start_node.len() - start_offset, - DOMString::new())); + DOMString::new())?; } else { // Step 16.1. let clone = child.CloneNode(false); // Step 16.2. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; // Step 16.3. let subrange = Range::new(&clone.owner_doc(), &start_node, @@ -601,15 +601,15 @@ impl RangeMethods for Range { &child, child.len()); // Step 16.4. - let subfragment = try!(subrange.ExtractContents()); + let subfragment = subrange.ExtractContents()?; // Step 16.5. - try!(clone.AppendChild(subfragment.upcast())); + clone.AppendChild(subfragment.upcast())?; } } // Step 17. for child in contained_children { - try!(fragment.upcast::().AppendChild(&child)); + fragment.upcast::().AppendChild(&child)?; } if let Some(child) = last_contained_child { @@ -621,14 +621,14 @@ impl RangeMethods for Range { let text = end_data.SubstringData(0, end_offset); clone.downcast::().unwrap().SetData(text.unwrap()); // Step 18.3. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; // Step 18.4. - try!(end_data.ReplaceData(0, end_offset, DOMString::new())); + end_data.ReplaceData(0, end_offset, DOMString::new())?; } else { // Step 19.1. let clone = child.CloneNode(false); // Step 19.2. - try!(fragment.upcast::().AppendChild(&clone)); + fragment.upcast::().AppendChild(&clone)?; // Step 19.3. let subrange = Range::new(&clone.owner_doc(), &child, @@ -636,15 +636,15 @@ impl RangeMethods for Range { &end_node, end_offset); // Step 19.4. - let subfragment = try!(subrange.ExtractContents()); + let subfragment = subrange.ExtractContents()?; // Step 19.5. - try!(clone.AppendChild(subfragment.upcast())); + clone.AppendChild(subfragment.upcast())?; } } // Step 20. - try!(self.SetStart(&new_node, new_offset)); - try!(self.SetEnd(&new_node, new_offset)); + self.SetStart(&new_node, new_offset)?; + self.SetEnd(&new_node, new_offset)?; // Step 21. Ok(fragment) @@ -690,16 +690,16 @@ impl RangeMethods for Range { }; // Step 6. - try!(Node::ensure_pre_insertion_validity(node, + Node::ensure_pre_insertion_validity(node, &parent, - reference_node.r())); + reference_node.r())?; // Step 7. let split_text; let reference_node = match start_node.downcast::() { Some(text) => { - split_text = try!(text.SplitText(start_offset)); + split_text = text.SplitText(start_offset)?; let new_reference = Root::upcast::(split_text); assert!(new_reference.GetParentNode().r() == Some(&parent)); Some(new_reference) @@ -729,7 +729,7 @@ impl RangeMethods for Range { }; // Step 12. - try!(Node::pre_insert(node, &parent, reference_node.r())); + Node::pre_insert(node, &parent, reference_node.r())?; // Step 13. if self.Collapsed() { @@ -839,16 +839,16 @@ impl RangeMethods for Range { } // Step 3. - let fragment = try!(self.ExtractContents()); + let fragment = self.ExtractContents()?; // Step 4. Node::replace_all(None, new_parent); // Step 5. - try!(self.InsertNode(new_parent)); + self.InsertNode(new_parent)?; // Step 6. - try!(new_parent.AppendChild(fragment.upcast())); + new_parent.AppendChild(fragment.upcast())?; // Step 7. self.SelectNode(new_parent) @@ -915,7 +915,7 @@ impl RangeMethods for Range { let element = Element::fragment_parsing_context(&owner_doc, element.r()); // Step 3. - let fragment_node = try!(element.parse_fragment(fragment)); + let fragment_node = element.parse_fragment(fragment)?; // Step 4. for node in fragment_node.upcast::().traverse_preorder() { -- cgit v1.2.3 From b5a4b8d6a09a71bd3a4ff4ae68e7a9639f9dcaad Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 11 Aug 2017 16:24:21 +0200 Subject: Upgrade to rustc 1.21.0-nightly (13d94d5fa 2017-08-10) --- components/script/dom/range.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index fa849a0fc1a..1e65caedc9d 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -1049,7 +1049,7 @@ impl WeakRangeVec { let offset = context.index(); let parent = context.parent; unsafe { - let mut ranges = &mut *self.cell.get(); + let ranges = &mut *self.cell.get(); ranges.update(|entry| { let range = entry.root().unwrap(); @@ -1076,7 +1076,7 @@ impl WeakRangeVec { } unsafe { - let mut ranges = &mut *self.cell.get(); + let ranges = &mut *self.cell.get(); ranges.update(|entry| { let range = entry.root().unwrap(); -- cgit v1.2.3 From 0e3c54c1911ba2c3bf305ee04f04fcd9bf2fc2fe Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 25 Sep 2017 23:30:24 +0200 Subject: Rename dom::bindings::js to dom::bindings::root --- components/script/dom/range.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 1e65caedc9d..1e0e8f090c6 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -13,8 +13,8 @@ use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; use dom::bindings::inheritance::Castable; -use dom::bindings::js::{JS, MutJS, Root, RootedReference}; use dom::bindings::reflector::{Reflector, reflect_dom_object}; +use dom::bindings::root::{JS, MutJS, Root, RootedReference}; use dom::bindings::str::DOMString; use dom::bindings::trace::JSTraceable; use dom::bindings::weakref::{WeakRef, WeakRefVec}; -- cgit v1.2.3 From 7be32fb2371a14ba61b008a37e79761f66c073c7 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 25 Sep 2017 23:56:32 +0200 Subject: Rename JS to Dom --- components/script/dom/range.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 1e0e8f090c6..1344f9c7a5c 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -14,7 +14,7 @@ use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; use dom::bindings::inheritance::Castable; use dom::bindings::reflector::{Reflector, reflect_dom_object}; -use dom::bindings::root::{JS, MutJS, Root, RootedReference}; +use dom::bindings::root::{Dom, MutJS, Root, RootedReference}; use dom::bindings::str::DOMString; use dom::bindings::trace::JSTraceable; use dom::bindings::weakref::{WeakRef, WeakRefVec}; @@ -770,7 +770,7 @@ impl RangeMethods for Range { let mut next = iter.next(); while let Some(child) = next { if self.contains(&child) { - contained_children.push(JS::from_ref(&*child)); + contained_children.push(Dom::from_ref(&*child)); next = iter.next_skipping_children(); } else { next = iter.next(); -- cgit v1.2.3 From d29335040d78a19f25830061484cf70dc03a9c21 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 26 Sep 2017 00:16:22 +0200 Subject: Rename MutJS to MutDom --- components/script/dom/range.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 1344f9c7a5c..79091beff55 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -14,7 +14,7 @@ use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; use dom::bindings::inheritance::Castable; use dom::bindings::reflector::{Reflector, reflect_dom_object}; -use dom::bindings::root::{Dom, MutJS, Root, RootedReference}; +use dom::bindings::root::{Dom, MutDom, Root, RootedReference}; use dom::bindings::str::DOMString; use dom::bindings::trace::JSTraceable; use dom::bindings::weakref::{WeakRef, WeakRefVec}; @@ -933,7 +933,7 @@ impl RangeMethods for Range { #[derive(DenyPublicFields, HeapSizeOf, JSTraceable)] #[must_root] pub struct BoundaryPoint { - node: MutJS, + node: MutDom, offset: Cell, } @@ -942,7 +942,7 @@ impl BoundaryPoint { debug_assert!(!node.is_doctype()); debug_assert!(offset <= node.len()); BoundaryPoint { - node: MutJS::new(node), + node: MutDom::new(node), offset: Cell::new(offset), } } -- cgit v1.2.3 From f87c2a8d7616112ca924e30292db2d244cf87eec Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 26 Sep 2017 01:53:40 +0200 Subject: Rename Root to DomRoot In a later PR, DomRoot will become a type alias of Root>, where Root will be able to handle all the things that need to be rooted that have a stable traceable address that doesn't move for the whole lifetime of the root. Stay tuned. --- components/script/dom/range.rs | 50 +++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 79091beff55..b6a05b31881 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -14,7 +14,7 @@ use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; use dom::bindings::inheritance::Castable; use dom::bindings::reflector::{Reflector, reflect_dom_object}; -use dom::bindings::root::{Dom, MutDom, Root, RootedReference}; +use dom::bindings::root::{Dom, DomRoot, MutDom, RootedReference}; use dom::bindings::str::DOMString; use dom::bindings::trace::JSTraceable; use dom::bindings::weakref::{WeakRef, WeakRefVec}; @@ -49,7 +49,7 @@ impl Range { } } - pub fn new_with_doc(document: &Document) -> Root { + pub fn new_with_doc(document: &Document) -> DomRoot { let root = document.upcast(); Range::new(document, root, 0, root, 0) } @@ -57,7 +57,7 @@ impl Range { pub fn new(document: &Document, start_container: &Node, start_offset: u32, end_container: &Node, end_offset: u32) - -> Root { + -> DomRoot { let range = reflect_dom_object(box Range::new_inherited(start_container, start_offset, end_container, end_offset), document.window(), @@ -70,7 +70,7 @@ impl Range { } // https://dom.spec.whatwg.org/#dom-range - pub fn Constructor(window: &Window) -> Fallible> { + pub fn Constructor(window: &Window) -> Fallible> { let document = window.Document(); Ok(Range::new_with_doc(&document)) } @@ -91,9 +91,9 @@ impl Range { } // https://dom.spec.whatwg.org/#concept-range-clone - fn contained_children(&self) -> Fallible<(Option>, - Option>, - Vec>)> { + fn contained_children(&self) -> Fallible<(Option>, + Option>, + Vec>)> { let start_node = self.StartContainer(); let end_node = self.EndContainer(); // Steps 5-6. @@ -120,7 +120,7 @@ impl Range { }; // Step 11. - let contained_children: Vec> = + let contained_children: Vec> = common_ancestor.children().filter(|n| self.contains(n)).collect(); // Step 12. @@ -191,7 +191,7 @@ impl Range { impl RangeMethods for Range { // https://dom.spec.whatwg.org/#dom-range-startcontainer - fn StartContainer(&self) -> Root { + fn StartContainer(&self) -> DomRoot { self.start.node.get() } @@ -201,7 +201,7 @@ impl RangeMethods for Range { } // https://dom.spec.whatwg.org/#dom-range-endcontainer - fn EndContainer(&self) -> Root { + fn EndContainer(&self) -> DomRoot { self.end.node.get() } @@ -216,7 +216,7 @@ impl RangeMethods for Range { } // https://dom.spec.whatwg.org/#dom-range-commonancestorcontainer - fn CommonAncestorContainer(&self) -> Root { + fn CommonAncestorContainer(&self) -> DomRoot { let end_container = self.EndContainer(); // Step 1. for container in self.StartContainer().inclusive_ancestors() { @@ -366,7 +366,7 @@ impl RangeMethods for Range { } // https://dom.spec.whatwg.org/#dom-range-clonerange - fn CloneRange(&self) -> Root { + fn CloneRange(&self) -> DomRoot { let start_node = self.StartContainer(); let owner_doc = start_node.owner_doc(); Range::new(&owner_doc, &start_node, self.StartOffset(), @@ -425,7 +425,7 @@ impl RangeMethods for Range { // https://dom.spec.whatwg.org/#dom-range-clonecontents // https://dom.spec.whatwg.org/#concept-range-clone - fn CloneContents(&self) -> Fallible> { + fn CloneContents(&self) -> Fallible> { // Step 3. let start_node = self.StartContainer(); let start_offset = self.StartOffset(); @@ -524,7 +524,7 @@ impl RangeMethods for Range { // https://dom.spec.whatwg.org/#dom-range-extractcontents // https://dom.spec.whatwg.org/#concept-range-extract - fn ExtractContents(&self) -> Fallible> { + fn ExtractContents(&self) -> Fallible> { // Step 3. let start_node = self.StartContainer(); let start_offset = self.StartOffset(); @@ -563,13 +563,13 @@ impl RangeMethods for Range { let (new_node, new_offset) = if start_node.is_inclusive_ancestor_of(&end_node) { // Step 13. - (Root::from_ref(&*start_node), start_offset) + (DomRoot::from_ref(&*start_node), start_offset) } else { // Step 14.1-2. let reference_node = start_node.ancestors() .take_while(|n| !n.is_inclusive_ancestor_of(&end_node)) .last() - .unwrap_or(Root::from_ref(&start_node)); + .unwrap_or(DomRoot::from_ref(&start_node)); // Step 14.3. (reference_node.GetParentNode().unwrap(), reference_node.index() + 1) }; @@ -682,11 +682,11 @@ impl RangeMethods for Range { None => return Err(Error::HierarchyRequest) }; // Step 5. - (Some(Root::from_ref(&*start_node)), parent) + (Some(DomRoot::from_ref(&*start_node)), parent) } else { // Steps 4-5. let child = start_node.ChildNodes().Item(start_offset); - (child, Root::from_ref(&*start_node)) + (child, DomRoot::from_ref(&*start_node)) }; // Step 6. @@ -700,7 +700,7 @@ impl RangeMethods for Range { match start_node.downcast::() { Some(text) => { split_text = text.SplitText(start_offset)?; - let new_reference = Root::upcast::(split_text); + let new_reference = DomRoot::upcast::(split_text); assert!(new_reference.GetParentNode().r() == Some(&parent)); Some(new_reference) }, @@ -779,11 +779,11 @@ impl RangeMethods for Range { let (new_node, new_offset) = if start_node.is_inclusive_ancestor_of(&end_node) { // Step 5. - (Root::from_ref(&*start_node), start_offset) + (DomRoot::from_ref(&*start_node), start_offset) } else { // Step 6. - fn compute_reference(start_node: &Node, end_node: &Node) -> (Root, u32) { - let mut reference_node = Root::from_ref(start_node); + fn compute_reference(start_node: &Node, end_node: &Node) -> (DomRoot, u32) { + let mut reference_node = DomRoot::from_ref(start_node); while let Some(parent) = reference_node.GetParentNode() { if parent.is_inclusive_ancestor_of(end_node) { return (parent, reference_node.index() + 1) @@ -879,7 +879,7 @@ impl RangeMethods for Range { // Step 4. let ancestor = self.CommonAncestorContainer(); let mut iter = start_node.following_nodes(&ancestor) - .filter_map(Root::downcast::); + .filter_map(DomRoot::downcast::); while let Some(child) = iter.next() { if self.contains(child.upcast()) { @@ -898,13 +898,13 @@ impl RangeMethods for Range { } // https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#extensions-to-the-range-interface - fn CreateContextualFragment(&self, fragment: DOMString) -> Fallible> { + fn CreateContextualFragment(&self, fragment: DOMString) -> Fallible> { // Step 1. let node = self.StartContainer(); let owner_doc = node.owner_doc(); let element = match node.type_id() { NodeTypeId::Document(_) | NodeTypeId::DocumentFragment => None, - NodeTypeId::Element(_) => Some(Root::downcast::(node).unwrap()), + NodeTypeId::Element(_) => Some(DomRoot::downcast::(node).unwrap()), NodeTypeId::CharacterData(CharacterDataTypeId::Comment) | NodeTypeId::CharacterData(CharacterDataTypeId::Text) => node.GetParentElement(), NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) | -- cgit v1.2.3 From aa15dc269f41503d81ad44cd7e85d69e6f4aeac7 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Mon, 16 Oct 2017 14:35:30 +0200 Subject: Remove use of unstable box syntax. http://www.robohornet.org gives a score of 101.36 on master, and 102.68 with this PR. The latter is slightly better, but probably within noise level. So it looks like this PR does not affect DOM performance. This is expected since `Box::new` is defined as: ```rust impl Box { #[inline(always)] pub fn new(x: T) -> Box { box x } } ``` With inlining, it should compile to the same as box syntax. --- components/script/dom/range.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index b6a05b31881..00e2d23ce76 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -58,10 +58,13 @@ impl Range { start_container: &Node, start_offset: u32, end_container: &Node, end_offset: u32) -> DomRoot { - let range = reflect_dom_object(box Range::new_inherited(start_container, start_offset, - end_container, end_offset), - document.window(), - RangeBinding::Wrap); + let range = reflect_dom_object( + Box::new(Range::new_inherited( + start_container, start_offset, end_container, end_offset + )), + document.window(), + RangeBinding::Wrap + ); start_container.ranges().push(WeakRef::new(&range)); if start_container != end_container { end_container.ranges().push(WeakRef::new(&range)); -- cgit v1.2.3 From efc3683cc7ceff0cd8c8528a168a78d42fb1a0e8 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Tue, 17 Oct 2017 09:39:20 -0700 Subject: Fix commonmark Markdown warnings in docs, part 1 Fixes warnings from rust-lang/rust#44229 when `--enable-commonmark` is passed to rustdoc. This is mostly a global find-and-replace for bare URIs on lines by themselves in doc comments. --- components/script/dom/range.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 00e2d23ce76..c4699c7f8ff 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -1031,19 +1031,19 @@ impl WeakRangeVec { } /// Used for steps 2.1-2. when inserting a node. - /// https://dom.spec.whatwg.org/#concept-node-insert + /// pub fn increase_above(&self, node: &Node, offset: u32, delta: u32) { self.map_offset_above(node, offset, |offset| offset + delta); } /// Used for steps 4-5. when removing a node. - /// https://dom.spec.whatwg.org/#concept-node-remove + /// pub fn decrease_above(&self, node: &Node, offset: u32, delta: u32) { self.map_offset_above(node, offset, |offset| offset - delta); } /// Used for steps 2-3. when removing a node. - /// https://dom.spec.whatwg.org/#concept-node-remove + /// pub fn drain_to_parent(&self, context: &UnbindContext, child: &Node) { if self.is_empty() { return; @@ -1072,7 +1072,7 @@ impl WeakRangeVec { } /// Used for steps 7.1-2. when normalizing a node. - /// https://dom.spec.whatwg.org/#dom-node-normalize + /// pub fn drain_to_preceding_text_sibling(&self, node: &Node, sibling: &Node, length: u32) { if self.is_empty() { return; @@ -1099,7 +1099,7 @@ impl WeakRangeVec { } /// Used for steps 7.3-4. when normalizing a node. - /// https://dom.spec.whatwg.org/#dom-node-normalize + /// pub fn move_to_text_child_at(&self, node: &Node, offset: u32, child: &Node, new_offset: u32) { @@ -1142,7 +1142,7 @@ impl WeakRangeVec { } /// Used for steps 8-11. when replacing character data. - /// https://dom.spec.whatwg.org/#concept-cd-replace + /// pub fn replace_code_units(&self, node: &Node, offset: u32, removed_code_units: u32, added_code_units: u32) { @@ -1156,7 +1156,7 @@ impl WeakRangeVec { } /// Used for steps 7.2-3. when splitting a text node. - /// https://dom.spec.whatwg.org/#concept-text-split + /// pub fn move_to_following_text_sibling_above(&self, node: &Node, offset: u32, sibling: &Node) { @@ -1202,7 +1202,7 @@ impl WeakRangeVec { } /// Used for steps 7.4-5. when splitting a text node. - /// https://dom.spec.whatwg.org/#concept-text-split + /// pub fn increment_at(&self, node: &Node, offset: u32) { unsafe { (*self.cell.get()).update(|entry| { -- cgit v1.2.3 From 4506f0d30cbbb02df32e9c16135ef288ad6b7e2e Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Wed, 18 Oct 2017 10:42:01 +1100 Subject: Replace all uses of the `heapsize` crate with `malloc_size_of`. Servo currently uses `heapsize`, but Stylo/Gecko use `malloc_size_of`. `malloc_size_of` is better -- it handles various cases that `heapsize` does not -- so this patch changes Servo to use `malloc_size_of`. This patch makes the following changes to the `malloc_size_of` crate. - Adds `MallocSizeOf` trait implementations for numerous types, some built-in (e.g. `VecDeque`), some external and Servo-only (e.g. `string_cache`). - Makes `enclosing_size_of_op` optional, because vanilla jemalloc doesn't support that operation. - For `HashSet`/`HashMap`, falls back to a computed estimate when `enclosing_size_of_op` isn't available. - Adds an extern "C" `malloc_size_of` function that does the actual heap measurement; this is based on the same functions from the `heapsize` crate. This patch makes the following changes elsewhere. - Converts all the uses of `heapsize` to instead use `malloc_size_of`. - Disables the "heapsize"/"heap_size" feature for the external crates that provide it. - Removes the `HeapSizeOf` implementation from `hashglobe`. - Adds `ignore` annotations to a few `Rc`/`Arc`, because `malloc_size_of` doesn't derive those types, unlike `heapsize`. --- components/script/dom/range.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index c4699c7f8ff..f43c9e1922c 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -27,8 +27,8 @@ use dom::node::{Node, UnbindContext}; use dom::text::Text; use dom::window::Window; use dom_struct::dom_struct; -use heapsize::HeapSizeOf; use js::jsapi::JSTracer; +use malloc_size_of::{MallocSizeOf, MallocSizeOfOps}; use std::cell::{Cell, UnsafeCell}; use std::cmp::{Ord, Ordering, PartialEq, PartialOrd}; @@ -933,7 +933,7 @@ impl RangeMethods for Range { } } -#[derive(DenyPublicFields, HeapSizeOf, JSTraceable)] +#[derive(DenyPublicFields, JSTraceable, MallocSizeOf)] #[must_root] pub struct BoundaryPoint { node: MutDom, @@ -1251,9 +1251,9 @@ impl WeakRangeVec { } #[allow(unsafe_code)] -impl HeapSizeOf for WeakRangeVec { - fn heap_size_of_children(&self) -> usize { - unsafe { (*self.cell.get()).heap_size_of_children() } +impl MallocSizeOf for WeakRangeVec { + fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize { + unsafe { (*self.cell.get()).size_of(ops) } } } -- cgit v1.2.3 From c37a345dc9f4dda6ea29c42f96f6c7201c42cbac Mon Sep 17 00:00:00 2001 From: chansuke Date: Tue, 18 Sep 2018 23:24:15 +0900 Subject: Format script component --- components/script/dom/range.rs | 386 +++++++++++++++++++++++------------------ 1 file changed, 214 insertions(+), 172 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index f43c9e1922c..9123a2c67e3 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -40,8 +40,12 @@ pub struct Range { } impl Range { - fn new_inherited(start_container: &Node, start_offset: u32, - end_container: &Node, end_offset: u32) -> Range { + fn new_inherited( + start_container: &Node, + start_offset: u32, + end_container: &Node, + end_offset: u32, + ) -> Range { Range { reflector_: Reflector::new(), start: BoundaryPoint::new(start_container, start_offset), @@ -54,16 +58,22 @@ impl Range { Range::new(document, root, 0, root, 0) } - pub fn new(document: &Document, - start_container: &Node, start_offset: u32, - end_container: &Node, end_offset: u32) - -> DomRoot { + pub fn new( + document: &Document, + start_container: &Node, + start_offset: u32, + end_container: &Node, + end_offset: u32, + ) -> DomRoot { let range = reflect_dom_object( Box::new(Range::new_inherited( - start_container, start_offset, end_container, end_offset + start_container, + start_offset, + end_container, + end_offset, )), document.window(), - RangeBinding::Wrap + RangeBinding::Wrap, ); start_container.ranges().push(WeakRef::new(&range)); if start_container != end_container { @@ -80,58 +90,74 @@ impl Range { // https://dom.spec.whatwg.org/#contained fn contains(&self, node: &Node) -> bool { - match (bp_position(node, 0, &self.StartContainer(), self.StartOffset()), - bp_position(node, node.len(), &self.EndContainer(), self.EndOffset())) { + match ( + bp_position(node, 0, &self.StartContainer(), self.StartOffset()), + bp_position(node, node.len(), &self.EndContainer(), self.EndOffset()), + ) { (Some(Ordering::Greater), Some(Ordering::Less)) => true, - _ => false + _ => false, } } // https://dom.spec.whatwg.org/#partially-contained fn partially_contains(&self, node: &Node) -> bool { - self.StartContainer().inclusive_ancestors().any(|n| &*n == node) != - self.EndContainer().inclusive_ancestors().any(|n| &*n == node) + self.StartContainer() + .inclusive_ancestors() + .any(|n| &*n == node) != + self.EndContainer() + .inclusive_ancestors() + .any(|n| &*n == node) } // https://dom.spec.whatwg.org/#concept-range-clone - fn contained_children(&self) -> Fallible<(Option>, - Option>, - Vec>)> { + fn contained_children( + &self, + ) -> Fallible<( + Option>, + Option>, + Vec>, + )> { let start_node = self.StartContainer(); let end_node = self.EndContainer(); // Steps 5-6. let common_ancestor = self.CommonAncestorContainer(); - let first_contained_child = - if start_node.is_inclusive_ancestor_of(&end_node) { - // Step 7. - None - } else { - // Step 8. - common_ancestor.children() - .find(|node| Range::partially_contains(self, node)) - }; + let first_contained_child = if start_node.is_inclusive_ancestor_of(&end_node) { + // Step 7. + None + } else { + // Step 8. + common_ancestor + .children() + .find(|node| Range::partially_contains(self, node)) + }; - let last_contained_child = - if end_node.is_inclusive_ancestor_of(&start_node) { - // Step 9. - None - } else { - // Step 10. - common_ancestor.rev_children() - .find(|node| Range::partially_contains(self, node)) - }; + let last_contained_child = if end_node.is_inclusive_ancestor_of(&start_node) { + // Step 9. + None + } else { + // Step 10. + common_ancestor + .rev_children() + .find(|node| Range::partially_contains(self, node)) + }; // Step 11. - let contained_children: Vec> = - common_ancestor.children().filter(|n| self.contains(n)).collect(); + let contained_children: Vec> = common_ancestor + .children() + .filter(|n| self.contains(n)) + .collect(); // Step 12. if contained_children.iter().any(|n| n.is_doctype()) { return Err(Error::HierarchyRequest); } - Ok((first_contained_child, last_contained_child, contained_children)) + Ok(( + first_contained_child, + last_contained_child, + contained_children, + )) } // https://dom.spec.whatwg.org/#concept-range-bp-set @@ -142,7 +168,8 @@ impl Range { } else if &self.end.node == node { self.StartContainer().ranges().remove(self); } else { - node.ranges().push(self.StartContainer().ranges().remove(self)); + node.ranges() + .push(self.StartContainer().ranges().remove(self)); } } self.start.set(node, offset); @@ -156,7 +183,8 @@ impl Range { } else if &self.start.node == node { self.EndContainer().ranges().remove(self); } else { - node.ranges().push(self.EndContainer().ranges().remove(self)); + node.ranges() + .push(self.EndContainer().ranges().remove(self)); } } self.end.set(node, offset); @@ -179,11 +207,14 @@ impl Range { // Step 3. return Err(Error::IndexSize); } - if let Ordering::Less = bp_position(node, offset, &start_node, self.StartOffset()).unwrap() { + if let Ordering::Less = bp_position(node, offset, &start_node, self.StartOffset()).unwrap() + { // Step 4. return Ok(Ordering::Less); } - if let Ordering::Greater = bp_position(node, offset, &self.EndContainer(), self.EndOffset()).unwrap() { + if let Ordering::Greater = + bp_position(node, offset, &self.EndContainer(), self.EndOffset()).unwrap() + { // Step 5. return Ok(Ordering::Greater); } @@ -332,8 +363,7 @@ impl RangeMethods for Range { } // https://dom.spec.whatwg.org/#dom-range-compareboundarypoints - fn CompareBoundaryPoints(&self, how: u16, other: &Range) - -> Fallible { + fn CompareBoundaryPoints(&self, how: u16, other: &Range) -> Fallible { if how > RangeConstants::END_TO_START { // Step 1. return Err(Error::NotSupported); @@ -346,18 +376,10 @@ impl RangeMethods for Range { } // Step 3. let (this_point, other_point) = match how { - RangeConstants::START_TO_START => { - (&self.start, &other.start) - }, - RangeConstants::START_TO_END => { - (&self.end, &other.start) - }, - RangeConstants::END_TO_END => { - (&self.end, &other.end) - }, - RangeConstants::END_TO_START => { - (&self.start, &other.end) - }, + RangeConstants::START_TO_START => (&self.start, &other.start), + RangeConstants::START_TO_END => (&self.end, &other.start), + RangeConstants::END_TO_END => (&self.end, &other.end), + RangeConstants::END_TO_START => (&self.start, &other.end), _ => unreachable!(), }; // step 4. @@ -372,8 +394,13 @@ impl RangeMethods for Range { fn CloneRange(&self) -> DomRoot { let start_node = self.StartContainer(); let owner_doc = start_node.owner_doc(); - Range::new(&owner_doc, &start_node, self.StartOffset(), - &self.EndContainer(), self.EndOffset()) + Range::new( + &owner_doc, + &start_node, + self.StartOffset(), + &self.EndContainer(), + self.EndOffset(), + ) } // https://dom.spec.whatwg.org/#dom-range-ispointinrange @@ -385,19 +412,17 @@ impl RangeMethods for Range { Err(Error::WrongDocument) => { // Step 2. Ok(false) - } + }, Err(error) => Err(error), } } // https://dom.spec.whatwg.org/#dom-range-comparepoint fn ComparePoint(&self, node: &Node, offset: u32) -> Fallible { - self.compare_point(node, offset).map(|order| { - match order { - Ordering::Less => -1, - Ordering::Equal => 0, - Ordering::Greater => 1, - } + self.compare_point(node, offset).map(|order| match order { + Ordering::Less => -1, + Ordering::Equal => 0, + Ordering::Greater => 1, }) } @@ -420,10 +445,10 @@ impl RangeMethods for Range { // Step 4. let offset = node.index(); // Step 5. - Ordering::Greater == bp_position(&parent, offset + 1, - &start_node, self.StartOffset()).unwrap() && - Ordering::Less == bp_position(&parent, offset, - &self.EndContainer(), self.EndOffset()).unwrap() + Ordering::Greater == + bp_position(&parent, offset + 1, &start_node, self.StartOffset()).unwrap() && + Ordering::Less == + bp_position(&parent, offset, &self.EndContainer(), self.EndOffset()).unwrap() } // https://dom.spec.whatwg.org/#dom-range-clonecontents @@ -446,7 +471,9 @@ impl RangeMethods for Range { if end_node == start_node { if let Some(cdata) = start_node.downcast::() { // Steps 4.1-2. - let data = cdata.SubstringData(start_offset, end_offset - start_offset).unwrap(); + let data = cdata + .SubstringData(start_offset, end_offset - start_offset) + .unwrap(); let clone = cdata.clone_with_data(data, &start_node.owner_doc()); // Step 4.3. fragment.upcast::().AppendChild(&clone)?; @@ -464,7 +491,9 @@ impl RangeMethods for Range { if let Some(cdata) = child.downcast::() { assert!(child == start_node); // Steps 13.1-2. - let data = cdata.SubstringData(start_offset, start_node.len() - start_offset).unwrap(); + let data = cdata + .SubstringData(start_offset, start_node.len() - start_offset) + .unwrap(); let clone = cdata.clone_with_data(data, &start_node.owner_doc()); // Step 13.3. fragment.upcast::().AppendChild(&clone)?; @@ -474,11 +503,13 @@ impl RangeMethods for Range { // Step 14.2. fragment.upcast::().AppendChild(&clone)?; // Step 14.3. - let subrange = Range::new(&clone.owner_doc(), - &start_node, - start_offset, - &child, - child.len()); + let subrange = Range::new( + &clone.owner_doc(), + &start_node, + start_offset, + &child, + child.len(), + ); // Step 14.4. let subfragment = subrange.CloneContents()?; // Step 14.5. @@ -509,11 +540,7 @@ impl RangeMethods for Range { // Step 17.2. fragment.upcast::().AppendChild(&clone)?; // Step 17.3. - let subrange = Range::new(&clone.owner_doc(), - &child, - 0, - &end_node, - end_offset); + let subrange = Range::new(&clone.owner_doc(), &child, 0, &end_node, end_offset); // Step 17.4. let subfragment = subrange.CloneContents()?; // Step 17.5. @@ -548,13 +575,14 @@ impl RangeMethods for Range { let clone = end_node.CloneNode(true); // Step 4.2. let text = end_data.SubstringData(start_offset, end_offset - start_offset); - clone.downcast::().unwrap().SetData(text.unwrap()); + clone + .downcast::() + .unwrap() + .SetData(text.unwrap()); // Step 4.3. fragment.upcast::().AppendChild(&clone)?; // Step 4.4. - end_data.ReplaceData(start_offset, - end_offset - start_offset, - DOMString::new())?; + end_data.ReplaceData(start_offset, end_offset - start_offset, DOMString::new())?; // Step 4.5. return Ok(fragment); } @@ -569,12 +597,16 @@ impl RangeMethods for Range { (DomRoot::from_ref(&*start_node), start_offset) } else { // Step 14.1-2. - let reference_node = start_node.ancestors() - .take_while(|n| !n.is_inclusive_ancestor_of(&end_node)) - .last() - .unwrap_or(DomRoot::from_ref(&start_node)); + let reference_node = start_node + .ancestors() + .take_while(|n| !n.is_inclusive_ancestor_of(&end_node)) + .last() + .unwrap_or(DomRoot::from_ref(&start_node)); // Step 14.3. - (reference_node.GetParentNode().unwrap(), reference_node.index() + 1) + ( + reference_node.GetParentNode().unwrap(), + reference_node.index() + 1, + ) }; if let Some(child) = first_contained_child { @@ -583,26 +615,32 @@ impl RangeMethods for Range { // Step 15.1. let clone = start_node.CloneNode(true); // Step 15.2. - let text = start_data.SubstringData(start_offset, - start_node.len() - start_offset); - clone.downcast::().unwrap().SetData(text.unwrap()); + let text = start_data.SubstringData(start_offset, start_node.len() - start_offset); + clone + .downcast::() + .unwrap() + .SetData(text.unwrap()); // Step 15.3. fragment.upcast::().AppendChild(&clone)?; // Step 15.4. - start_data.ReplaceData(start_offset, - start_node.len() - start_offset, - DOMString::new())?; + start_data.ReplaceData( + start_offset, + start_node.len() - start_offset, + DOMString::new(), + )?; } else { // Step 16.1. let clone = child.CloneNode(false); // Step 16.2. fragment.upcast::().AppendChild(&clone)?; // Step 16.3. - let subrange = Range::new(&clone.owner_doc(), - &start_node, - start_offset, - &child, - child.len()); + let subrange = Range::new( + &clone.owner_doc(), + &start_node, + start_offset, + &child, + child.len(), + ); // Step 16.4. let subfragment = subrange.ExtractContents()?; // Step 16.5. @@ -622,7 +660,10 @@ impl RangeMethods for Range { let clone = end_node.CloneNode(true); // Step 18.2. let text = end_data.SubstringData(0, end_offset); - clone.downcast::().unwrap().SetData(text.unwrap()); + clone + .downcast::() + .unwrap() + .SetData(text.unwrap()); // Step 18.3. fragment.upcast::().AppendChild(&clone)?; // Step 18.4. @@ -633,11 +674,7 @@ impl RangeMethods for Range { // Step 19.2. fragment.upcast::().AppendChild(&clone)?; // Step 19.3. - let subrange = Range::new(&clone.owner_doc(), - &child, - 0, - &end_node, - end_offset); + let subrange = Range::new(&clone.owner_doc(), &child, 0, &end_node, end_offset); // Step 19.4. let subfragment = subrange.ExtractContents()?; // Step 19.5. @@ -672,7 +709,7 @@ impl RangeMethods for Range { // Handled under step 2. NodeTypeId::CharacterData(CharacterDataTypeId::Text) => (), NodeTypeId::CharacterData(_) => return Err(Error::HierarchyRequest), - _ => () + _ => (), } // Step 2. @@ -682,7 +719,7 @@ impl RangeMethods for Range { let parent = match start_node.GetParentNode() { Some(parent) => parent, // Step 1. - None => return Err(Error::HierarchyRequest) + None => return Err(Error::HierarchyRequest), }; // Step 5. (Some(DomRoot::from_ref(&*start_node)), parent) @@ -693,22 +730,19 @@ impl RangeMethods for Range { }; // Step 6. - Node::ensure_pre_insertion_validity(node, - &parent, - reference_node.r())?; + Node::ensure_pre_insertion_validity(node, &parent, reference_node.r())?; // Step 7. let split_text; - let reference_node = - match start_node.downcast::() { - Some(text) => { - split_text = text.SplitText(start_offset)?; - let new_reference = DomRoot::upcast::(split_text); - assert!(new_reference.GetParentNode().r() == Some(&parent)); - Some(new_reference) - }, - _ => reference_node - }; + let reference_node = match start_node.downcast::() { + Some(text) => { + split_text = text.SplitText(start_offset)?; + let new_reference = DomRoot::upcast::(split_text); + assert!(new_reference.GetParentNode().r() == Some(&parent)); + Some(new_reference) + }, + _ => reference_node, + }; // Step 8. let reference_node = if Some(node) == reference_node.r() { @@ -721,8 +755,7 @@ impl RangeMethods for Range { node.remove_self(); // Step 10. - let new_offset = - reference_node.r().map_or(parent.len(), |node| node.index()); + let new_offset = reference_node.r().map_or(parent.len(), |node| node.index()); // Step 11 let new_offset = new_offset + if node.type_id() == NodeTypeId::DocumentFragment { @@ -758,9 +791,7 @@ impl RangeMethods for Range { // Step 3. if start_node == end_node { if let Some(text) = start_node.downcast::() { - return text.ReplaceData(start_offset, - end_offset - start_offset, - DOMString::new()); + return text.ReplaceData(start_offset, end_offset - start_offset, DOMString::new()); } } @@ -789,7 +820,7 @@ impl RangeMethods for Range { let mut reference_node = DomRoot::from_ref(start_node); while let Some(parent) = reference_node.GetParentNode() { if parent.is_inclusive_ancestor_of(end_node) { - return (parent, reference_node.index() + 1) + return (parent, reference_node.index() + 1); } reference_node = parent; } @@ -801,9 +832,11 @@ impl RangeMethods for Range { // Step 7. if let Some(text) = start_node.downcast::() { - text.ReplaceData(start_offset, - start_node.len() - start_offset, - DOMString::new()).unwrap(); + text.ReplaceData( + start_offset, + start_node.len() - start_offset, + DOMString::new(), + ).unwrap(); } // Step 8. @@ -828,17 +861,21 @@ impl RangeMethods for Range { let start = self.StartContainer(); let end = self.EndContainer(); - if start.inclusive_ancestors().any(|n| !n.is_inclusive_ancestor_of(&end) && !n.is::()) || - end.inclusive_ancestors().any(|n| !n.is_inclusive_ancestor_of(&start) && !n.is::()) { - return Err(Error::InvalidState); + if start + .inclusive_ancestors() + .any(|n| !n.is_inclusive_ancestor_of(&end) && !n.is::()) || + end.inclusive_ancestors() + .any(|n| !n.is_inclusive_ancestor_of(&start) && !n.is::()) + { + return Err(Error::InvalidState); } // Step 2. match new_parent.type_id() { - NodeTypeId::Document(_) | - NodeTypeId::DocumentType | - NodeTypeId::DocumentFragment => return Err(Error::InvalidNodeType), - _ => () + NodeTypeId::Document(_) | NodeTypeId::DocumentType | NodeTypeId::DocumentFragment => { + return Err(Error::InvalidNodeType) + }, + _ => (), } // Step 3. @@ -870,19 +907,24 @@ impl RangeMethods for Range { // Step 2. if start_node == end_node { - return char_data.SubstringData(self.StartOffset(), - self.EndOffset() - self.StartOffset()).unwrap(); + return char_data + .SubstringData(self.StartOffset(), self.EndOffset() - self.StartOffset()) + .unwrap(); } // Step 3. - s.push_str(&*char_data.SubstringData(self.StartOffset(), - char_data.Length() - self.StartOffset()).unwrap()); + s.push_str( + &*char_data + .SubstringData(self.StartOffset(), char_data.Length() - self.StartOffset()) + .unwrap(), + ); } // Step 4. let ancestor = self.CommonAncestorContainer(); - let mut iter = start_node.following_nodes(&ancestor) - .filter_map(DomRoot::downcast::); + let mut iter = start_node + .following_nodes(&ancestor) + .filter_map(DomRoot::downcast::); while let Some(child) = iter.next() { if self.contains(child.upcast()) { @@ -963,23 +1005,24 @@ impl BoundaryPoint { #[allow(unrooted_must_root)] impl PartialOrd for BoundaryPoint { fn partial_cmp(&self, other: &Self) -> Option { - bp_position(&self.node.get(), self.offset.get(), - &other.node.get(), other.offset.get()) + bp_position( + &self.node.get(), + self.offset.get(), + &other.node.get(), + other.offset.get(), + ) } } #[allow(unrooted_must_root)] impl PartialEq for BoundaryPoint { fn eq(&self, other: &Self) -> bool { - self.node.get() == other.node.get() && - self.offset.get() == other.offset.get() + self.node.get() == other.node.get() && self.offset.get() == other.offset.get() } } // https://dom.spec.whatwg.org/#concept-range-bp-position -fn bp_position(a_node: &Node, a_offset: u32, - b_node: &Node, b_offset: u32) - -> Option { +fn bp_position(a_node: &Node, a_offset: u32, b_node: &Node, b_offset: u32) -> Option { if a_node as *const Node == b_node as *const Node { // Step 1. return Some(a_offset.cmp(&b_offset)); @@ -998,9 +1041,9 @@ fn bp_position(a_node: &Node, a_offset: u32, } else if position & NodeConstants::DOCUMENT_POSITION_CONTAINS != 0 { // Step 3-1, 3-2. let mut b_ancestors = b_node.inclusive_ancestors(); - let child = b_ancestors.find(|child| { - &*child.GetParentNode().unwrap() == a_node - }).unwrap(); + let child = b_ancestors + .find(|child| &*child.GetParentNode().unwrap() == a_node) + .unwrap(); // Step 3-3. if child.index() < a_offset { Some(Ordering::Greater) @@ -1022,7 +1065,9 @@ pub struct WeakRangeVec { impl WeakRangeVec { /// Create a new vector of weak references. pub fn new() -> Self { - WeakRangeVec { cell: UnsafeCell::new(WeakRefVec::new()) } + WeakRangeVec { + cell: UnsafeCell::new(WeakRefVec::new()), + } } /// Whether that vector of ranges is empty. @@ -1100,9 +1145,7 @@ impl WeakRangeVec { /// Used for steps 7.3-4. when normalizing a node. /// - pub fn move_to_text_child_at(&self, - node: &Node, offset: u32, - child: &Node, new_offset: u32) { + pub fn move_to_text_child_at(&self, node: &Node, offset: u32, child: &Node, new_offset: u32) { unsafe { let child_ranges = &mut *child.ranges().cell.get(); @@ -1116,8 +1159,8 @@ impl WeakRangeVec { let move_end = node_is_end && range.EndOffset() == offset; let remove_from_node = move_start && move_end || - move_start && !node_is_end || - move_end && !node_is_start; + move_start && !node_is_end || + move_end && !node_is_start; let already_in_child = &range.start.node == child || &range.end.node == child; let push_to_child = !already_in_child && (move_start || move_end); @@ -1143,9 +1186,13 @@ impl WeakRangeVec { /// Used for steps 8-11. when replacing character data. /// - pub fn replace_code_units(&self, - node: &Node, offset: u32, - removed_code_units: u32, added_code_units: u32) { + pub fn replace_code_units( + &self, + node: &Node, + offset: u32, + removed_code_units: u32, + added_code_units: u32, + ) { self.map_offset_above(node, offset, |range_offset| { if range_offset <= offset + removed_code_units { offset @@ -1157,9 +1204,7 @@ impl WeakRangeVec { /// Used for steps 7.2-3. when splitting a text node. /// - pub fn move_to_following_text_sibling_above(&self, - node: &Node, offset: u32, - sibling: &Node) { + pub fn move_to_following_text_sibling_above(&self, node: &Node, offset: u32, sibling: &Node) { unsafe { let sibling_ranges = &mut *sibling.ranges().cell.get(); @@ -1175,11 +1220,10 @@ impl WeakRangeVec { let move_end = node_is_end && end_offset > offset; let remove_from_node = move_start && move_end || - move_start && !node_is_end || - move_end && !node_is_start; + move_start && !node_is_end || + move_end && !node_is_start; - let already_in_sibling = - &range.start.node == sibling || &range.end.node == sibling; + let already_in_sibling = &range.start.node == sibling || &range.end.node == sibling; let push_to_sibling = !already_in_sibling && (move_start || move_end); if remove_from_node { @@ -1242,9 +1286,7 @@ impl WeakRangeVec { fn remove(&self, range: &Range) -> WeakRef { unsafe { let ranges = &mut *self.cell.get(); - let position = ranges.iter().position(|ref_| { - ref_ == range - }).unwrap(); + let position = ranges.iter().position(|ref_| ref_ == range).unwrap(); ranges.swap_remove(position) } } -- cgit v1.2.3 From 45f7199eee82c66637ec68287eafa40a651001c4 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 1 Nov 2018 23:45:06 +0100 Subject: `cargo fix --edition` --- components/script/dom/range.rs | 48 +++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 9123a2c67e3..7bba5ad9f00 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -2,30 +2,30 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods; -use dom::bindings::codegen::Bindings::NodeBinding::NodeConstants; -use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; -use dom::bindings::codegen::Bindings::NodeListBinding::NodeListMethods; -use dom::bindings::codegen::Bindings::RangeBinding::{self, RangeConstants}; -use dom::bindings::codegen::Bindings::RangeBinding::RangeMethods; -use dom::bindings::codegen::Bindings::TextBinding::TextMethods; -use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; -use dom::bindings::error::{Error, ErrorResult, Fallible}; -use dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; -use dom::bindings::inheritance::Castable; -use dom::bindings::reflector::{Reflector, reflect_dom_object}; -use dom::bindings::root::{Dom, DomRoot, MutDom, RootedReference}; -use dom::bindings::str::DOMString; -use dom::bindings::trace::JSTraceable; -use dom::bindings::weakref::{WeakRef, WeakRefVec}; -use dom::characterdata::CharacterData; -use dom::document::Document; -use dom::documentfragment::DocumentFragment; -use dom::element::Element; -use dom::htmlscriptelement::HTMLScriptElement; -use dom::node::{Node, UnbindContext}; -use dom::text::Text; -use dom::window::Window; +use crate::dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods; +use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeConstants; +use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; +use crate::dom::bindings::codegen::Bindings::NodeListBinding::NodeListMethods; +use crate::dom::bindings::codegen::Bindings::RangeBinding::{self, RangeConstants}; +use crate::dom::bindings::codegen::Bindings::RangeBinding::RangeMethods; +use crate::dom::bindings::codegen::Bindings::TextBinding::TextMethods; +use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; +use crate::dom::bindings::error::{Error, ErrorResult, Fallible}; +use crate::dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; +use crate::dom::bindings::inheritance::Castable; +use crate::dom::bindings::reflector::{Reflector, reflect_dom_object}; +use crate::dom::bindings::root::{Dom, DomRoot, MutDom, RootedReference}; +use crate::dom::bindings::str::DOMString; +use crate::dom::bindings::trace::JSTraceable; +use crate::dom::bindings::weakref::{WeakRef, WeakRefVec}; +use crate::dom::characterdata::CharacterData; +use crate::dom::document::Document; +use crate::dom::documentfragment::DocumentFragment; +use crate::dom::element::Element; +use crate::dom::htmlscriptelement::HTMLScriptElement; +use crate::dom::node::{Node, UnbindContext}; +use crate::dom::text::Text; +use crate::dom::window::Window; use dom_struct::dom_struct; use js::jsapi::JSTracer; use malloc_size_of::{MallocSizeOf, MallocSizeOfOps}; -- cgit v1.2.3 From cb07debcb6f3d3561177ce536c320986720791b7 Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Tue, 6 Nov 2018 13:01:35 +0100 Subject: Format remaining files --- components/script/dom/range.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 7bba5ad9f00..3f8d5440917 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -836,7 +836,8 @@ impl RangeMethods for Range { start_offset, start_node.len() - start_offset, DOMString::new(), - ).unwrap(); + ) + .unwrap(); } // Step 8. -- cgit v1.2.3 From 9e92eb205a2a12fe0be883e42cb7f82deebc9031 Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Tue, 6 Nov 2018 20:38:02 +0100 Subject: Reorder imports --- components/script/dom/range.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 3f8d5440917..c75989580ff 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -6,14 +6,14 @@ use crate::dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterData use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeConstants; use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use crate::dom::bindings::codegen::Bindings::NodeListBinding::NodeListMethods; -use crate::dom::bindings::codegen::Bindings::RangeBinding::{self, RangeConstants}; use crate::dom::bindings::codegen::Bindings::RangeBinding::RangeMethods; +use crate::dom::bindings::codegen::Bindings::RangeBinding::{self, RangeConstants}; use crate::dom::bindings::codegen::Bindings::TextBinding::TextMethods; use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use crate::dom::bindings::error::{Error, ErrorResult, Fallible}; -use crate::dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; use crate::dom::bindings::inheritance::Castable; -use crate::dom::bindings::reflector::{Reflector, reflect_dom_object}; +use crate::dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; +use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; use crate::dom::bindings::root::{Dom, DomRoot, MutDom, RootedReference}; use crate::dom::bindings::str::DOMString; use crate::dom::bindings::trace::JSTraceable; -- cgit v1.2.3 From a1a14459c141afc6ac6771b8a6c9ca374537edf2 Mon Sep 17 00:00:00 2001 From: Jan Andre Ikenmeyer Date: Mon, 19 Nov 2018 14:47:12 +0100 Subject: Update MPL license to https (part 3) --- components/script/dom/range.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index c75989580ff..74dc526c57f 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -1,6 +1,6 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods; use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeConstants; -- cgit v1.2.3 From be69f9c3e6a6f5efb5ba1edd50955cb12c111bf8 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 14 Dec 2018 08:31:30 +0100 Subject: Rustfmt has changed its default style :/ --- components/script/dom/range.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 74dc526c57f..e30c5601cf7 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -758,11 +758,12 @@ impl RangeMethods for Range { let new_offset = reference_node.r().map_or(parent.len(), |node| node.index()); // Step 11 - let new_offset = new_offset + if node.type_id() == NodeTypeId::DocumentFragment { - node.len() - } else { - 1 - }; + let new_offset = new_offset + + if node.type_id() == NodeTypeId::DocumentFragment { + node.len() + } else { + 1 + }; // Step 12. Node::pre_insert(node, &parent, reference_node.r())?; @@ -874,7 +875,7 @@ impl RangeMethods for Range { // Step 2. match new_parent.type_id() { NodeTypeId::Document(_) | NodeTypeId::DocumentType | NodeTypeId::DocumentFragment => { - return Err(Error::InvalidNodeType) + return Err(Error::InvalidNodeType); }, _ => (), } -- cgit v1.2.3 From 5fe5e5d6debef5adf234b650ee1b758e683a5230 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Sun, 10 Mar 2019 13:20:07 +0100 Subject: Remove most RootedReference uses We can replace all uses of RootedReference for Option by Option::deref calls. --- components/script/dom/range.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index e30c5601cf7..5a81ba595b6 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -14,7 +14,7 @@ use crate::dom::bindings::error::{Error, ErrorResult, Fallible}; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; -use crate::dom::bindings::root::{Dom, DomRoot, MutDom, RootedReference}; +use crate::dom::bindings::root::{Dom, DomRoot, MutDom}; use crate::dom::bindings::str::DOMString; use crate::dom::bindings::trace::JSTraceable; use crate::dom::bindings::weakref::{WeakRef, WeakRefVec}; @@ -730,7 +730,7 @@ impl RangeMethods for Range { }; // Step 6. - Node::ensure_pre_insertion_validity(node, &parent, reference_node.r())?; + Node::ensure_pre_insertion_validity(node, &parent, reference_node.deref())?; // Step 7. let split_text; @@ -738,14 +738,14 @@ impl RangeMethods for Range { Some(text) => { split_text = text.SplitText(start_offset)?; let new_reference = DomRoot::upcast::(split_text); - assert!(new_reference.GetParentNode().r() == Some(&parent)); + assert!(new_reference.GetParentNode().deref() == Some(&parent)); Some(new_reference) }, _ => reference_node, }; // Step 8. - let reference_node = if Some(node) == reference_node.r() { + let reference_node = if Some(node) == reference_node.deref() { node.GetNextSibling() } else { reference_node @@ -755,7 +755,9 @@ impl RangeMethods for Range { node.remove_self(); // Step 10. - let new_offset = reference_node.r().map_or(parent.len(), |node| node.index()); + let new_offset = reference_node + .as_ref() + .map_or(parent.len(), |node| node.index()); // Step 11 let new_offset = new_offset + @@ -766,7 +768,7 @@ impl RangeMethods for Range { }; // Step 12. - Node::pre_insert(node, &parent, reference_node.r())?; + Node::pre_insert(node, &parent, reference_node.deref())?; // Step 13. if self.Collapsed() { @@ -842,7 +844,7 @@ impl RangeMethods for Range { } // Step 8. - for child in contained_children.r() { + for child in &*contained_children { child.remove_self(); } @@ -959,7 +961,7 @@ impl RangeMethods for Range { }; // Step 2. - let element = Element::fragment_parsing_context(&owner_doc, element.r()); + let element = Element::fragment_parsing_context(&owner_doc, element.deref()); // Step 3. let fragment_node = element.parse_fragment(fragment)?; -- cgit v1.2.3 From 4b8282b3b164771e3351c2a85890167ab6d0ab7f Mon Sep 17 00:00:00 2001 From: George Roman Date: Wed, 13 Feb 2019 22:21:52 +0200 Subject: Implement CDATASection interface and createCDATASection method --- components/script/dom/range.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 5a81ba595b6..630c4acd245 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -707,14 +707,14 @@ impl RangeMethods for Range { } match start_node.type_id() { // Handled under step 2. - NodeTypeId::CharacterData(CharacterDataTypeId::Text) => (), + NodeTypeId::CharacterData(CharacterDataTypeId::Text(_)) => (), NodeTypeId::CharacterData(_) => return Err(Error::HierarchyRequest), _ => (), } // Step 2. - let (reference_node, parent) = - if start_node.type_id() == NodeTypeId::CharacterData(CharacterDataTypeId::Text) { + let (reference_node, parent) = match start_node.type_id() { + NodeTypeId::CharacterData(CharacterDataTypeId::Text(_)) => { // Step 3. let parent = match start_node.GetParentNode() { Some(parent) => parent, @@ -723,11 +723,13 @@ impl RangeMethods for Range { }; // Step 5. (Some(DomRoot::from_ref(&*start_node)), parent) - } else { + }, + _ => { // Steps 4-5. let child = start_node.ChildNodes().Item(start_offset); (child, DomRoot::from_ref(&*start_node)) - }; + }, + }; // Step 6. Node::ensure_pre_insertion_validity(node, &parent, reference_node.deref())?; @@ -955,7 +957,7 @@ impl RangeMethods for Range { NodeTypeId::Document(_) | NodeTypeId::DocumentFragment => None, NodeTypeId::Element(_) => Some(DomRoot::downcast::(node).unwrap()), NodeTypeId::CharacterData(CharacterDataTypeId::Comment) | - NodeTypeId::CharacterData(CharacterDataTypeId::Text) => node.GetParentElement(), + NodeTypeId::CharacterData(CharacterDataTypeId::Text(_)) => node.GetParentElement(), NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) | NodeTypeId::DocumentType => unreachable!(), }; -- cgit v1.2.3 From 18ae0fcbd6af223f978a527d7d5039633d3c22ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Mon, 21 Jan 2019 15:58:54 +0100 Subject: ShadowRoot interface --- components/script/dom/range.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 630c4acd245..9a1bc5db7a6 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -10,6 +10,7 @@ use crate::dom::bindings::codegen::Bindings::RangeBinding::RangeMethods; use crate::dom::bindings::codegen::Bindings::RangeBinding::{self, RangeConstants}; use crate::dom::bindings::codegen::Bindings::TextBinding::TextMethods; use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; +use crate::dom::bindings::codegen::InheritTypes::DocumentFragmentTypeId; use crate::dom::bindings::error::{Error, ErrorResult, Fallible}; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; @@ -763,7 +764,8 @@ impl RangeMethods for Range { // Step 11 let new_offset = new_offset + - if node.type_id() == NodeTypeId::DocumentFragment { + if node.type_id() == NodeTypeId::DocumentFragment(DocumentFragmentTypeId::DocumentFragment) || + node.type_id() == NodeTypeId::DocumentFragment(DocumentFragmentTypeId::ShadowRoot) { node.len() } else { 1 @@ -878,7 +880,7 @@ impl RangeMethods for Range { // Step 2. match new_parent.type_id() { - NodeTypeId::Document(_) | NodeTypeId::DocumentType | NodeTypeId::DocumentFragment => { + NodeTypeId::Document(_) | NodeTypeId::DocumentType | NodeTypeId::DocumentFragment(_) => { return Err(Error::InvalidNodeType); }, _ => (), @@ -954,7 +956,7 @@ impl RangeMethods for Range { let node = self.StartContainer(); let owner_doc = node.owner_doc(); let element = match node.type_id() { - NodeTypeId::Document(_) | NodeTypeId::DocumentFragment => None, + NodeTypeId::Document(_) | NodeTypeId::DocumentFragment(_) => None, NodeTypeId::Element(_) => Some(DomRoot::downcast::(node).unwrap()), NodeTypeId::CharacterData(CharacterDataTypeId::Comment) | NodeTypeId::CharacterData(CharacterDataTypeId::Text(_)) => node.GetParentElement(), -- cgit v1.2.3 From 4304ee28dceffa8ad66f5b088754705bc2bb3b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Mon, 21 Jan 2019 20:58:52 +0100 Subject: Partial ShadowRoot implementation of DocumentOrShadowRoot --- components/script/dom/range.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 9a1bc5db7a6..96f276944bc 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -764,8 +764,11 @@ impl RangeMethods for Range { // Step 11 let new_offset = new_offset + - if node.type_id() == NodeTypeId::DocumentFragment(DocumentFragmentTypeId::DocumentFragment) || - node.type_id() == NodeTypeId::DocumentFragment(DocumentFragmentTypeId::ShadowRoot) { + if node.type_id() == + NodeTypeId::DocumentFragment(DocumentFragmentTypeId::DocumentFragment) || + node.type_id() == + NodeTypeId::DocumentFragment(DocumentFragmentTypeId::ShadowRoot) + { node.len() } else { 1 @@ -880,7 +883,9 @@ impl RangeMethods for Range { // Step 2. match new_parent.type_id() { - NodeTypeId::Document(_) | NodeTypeId::DocumentType | NodeTypeId::DocumentFragment(_) => { + NodeTypeId::Document(_) | + NodeTypeId::DocumentType | + NodeTypeId::DocumentFragment(_) => { return Err(Error::InvalidNodeType); }, _ => (), -- cgit v1.2.3 From 6a85409ffe674f92c08d5d79c4b6fe68dac5ad93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Tue, 29 Jan 2019 15:06:34 +0100 Subject: Throw NotSupported when trying to deep clone a shadow root --- components/script/dom/range.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 96f276944bc..afa759de52f 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -500,7 +500,7 @@ impl RangeMethods for Range { fragment.upcast::().AppendChild(&clone)?; } else { // Step 14.1. - let clone = child.CloneNode(false); + let clone = child.CloneNode(/* deep */ false)?; // Step 14.2. fragment.upcast::().AppendChild(&clone)?; // Step 14.3. @@ -521,7 +521,7 @@ impl RangeMethods for Range { // Step 15. for child in contained_children { // Step 15.1. - let clone = child.CloneNode(true); + let clone = child.CloneNode(/* deep */ true)?; // Step 15.2. fragment.upcast::().AppendChild(&clone)?; } @@ -537,7 +537,7 @@ impl RangeMethods for Range { fragment.upcast::().AppendChild(&clone)?; } else { // Step 17.1. - let clone = child.CloneNode(false); + let clone = child.CloneNode(/* deep */ false)?; // Step 17.2. fragment.upcast::().AppendChild(&clone)?; // Step 17.3. @@ -573,7 +573,7 @@ impl RangeMethods for Range { if end_node == start_node { if let Some(end_data) = end_node.downcast::() { // Step 4.1. - let clone = end_node.CloneNode(true); + let clone = end_node.CloneNode(/* deep */ true)?; // Step 4.2. let text = end_data.SubstringData(start_offset, end_offset - start_offset); clone @@ -614,7 +614,7 @@ impl RangeMethods for Range { if let Some(start_data) = child.downcast::() { assert!(child == start_node); // Step 15.1. - let clone = start_node.CloneNode(true); + let clone = start_node.CloneNode(/* deep */ true)?; // Step 15.2. let text = start_data.SubstringData(start_offset, start_node.len() - start_offset); clone @@ -631,7 +631,7 @@ impl RangeMethods for Range { )?; } else { // Step 16.1. - let clone = child.CloneNode(false); + let clone = child.CloneNode(/* deep */ false)?; // Step 16.2. fragment.upcast::().AppendChild(&clone)?; // Step 16.3. @@ -658,7 +658,7 @@ impl RangeMethods for Range { if let Some(end_data) = child.downcast::() { assert!(child == end_node); // Step 18.1. - let clone = end_node.CloneNode(true); + let clone = end_node.CloneNode(/* deep */ true)?; // Step 18.2. let text = end_data.SubstringData(0, end_offset); clone @@ -671,7 +671,7 @@ impl RangeMethods for Range { end_data.ReplaceData(0, end_offset, DOMString::new())?; } else { // Step 19.1. - let clone = child.CloneNode(false); + let clone = child.CloneNode(/* deep */ false)?; // Step 19.2. fragment.upcast::().AppendChild(&clone)?; // Step 19.3. -- cgit v1.2.3 From 2e5c0584637079889f4ed490b98afe07445f26d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Wed, 30 Jan 2019 16:19:40 +0100 Subject: Implement concept of shadow including tree order --- components/script/dom/range.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index afa759de52f..2f0b5422b1e 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -976,7 +976,10 @@ impl RangeMethods for Range { let fragment_node = element.parse_fragment(fragment)?; // Step 4. - for node in fragment_node.upcast::().traverse_preorder() { + for node in fragment_node + .upcast::() + .traverse_preorder(/* shadow incluing */ false) + { if let Some(script) = node.downcast::() { script.set_already_started(false); script.set_parser_inserted(false); -- cgit v1.2.3 From 3ccd622c9b94930ce43ca1bfb5d101783b367d58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Thu, 21 Feb 2019 13:19:01 +0100 Subject: Introduce ShadowIncluding enum for tree traversals --- components/script/dom/range.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 2f0b5422b1e..462b3382c71 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -24,7 +24,7 @@ use crate::dom::document::Document; use crate::dom::documentfragment::DocumentFragment; use crate::dom::element::Element; use crate::dom::htmlscriptelement::HTMLScriptElement; -use crate::dom::node::{Node, UnbindContext}; +use crate::dom::node::{Node, ShadowIncluding, UnbindContext}; use crate::dom::text::Text; use crate::dom::window::Window; use dom_struct::dom_struct; @@ -978,7 +978,7 @@ impl RangeMethods for Range { // Step 4. for node in fragment_node .upcast::() - .traverse_preorder(/* shadow incluing */ false) + .traverse_preorder(ShadowIncluding::No) { if let Some(script) = node.downcast::() { script.set_already_started(false); -- cgit v1.2.3 From bdd2f32c0fd7d51d207b2889c597b9e2e05346a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Thu, 7 Mar 2019 13:10:04 +0100 Subject: Minor tweaks: rename composed_parent_node_ref, remove or update outdated comments... --- components/script/dom/range.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 462b3382c71..8d9bfbf21d2 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -10,7 +10,6 @@ use crate::dom::bindings::codegen::Bindings::RangeBinding::RangeMethods; use crate::dom::bindings::codegen::Bindings::RangeBinding::{self, RangeConstants}; use crate::dom::bindings::codegen::Bindings::TextBinding::TextMethods; use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; -use crate::dom::bindings::codegen::InheritTypes::DocumentFragmentTypeId; use crate::dom::bindings::error::{Error, ErrorResult, Fallible}; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId}; @@ -764,11 +763,7 @@ impl RangeMethods for Range { // Step 11 let new_offset = new_offset + - if node.type_id() == - NodeTypeId::DocumentFragment(DocumentFragmentTypeId::DocumentFragment) || - node.type_id() == - NodeTypeId::DocumentFragment(DocumentFragmentTypeId::ShadowRoot) - { + if let NodeTypeId::DocumentFragment(_) = node.type_id() { node.len() } else { 1 -- cgit v1.2.3 From 8eba5875471c9ddef95e0e4d4207ee6d6e70bbfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Thu, 7 Mar 2019 18:46:08 +0100 Subject: Merge Node::shadow_including_inclusive_ancestors into inclusive_ancestors --- components/script/dom/range.rs | 48 +++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 12 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 8d9bfbf21d2..de17427664e 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -102,10 +102,10 @@ impl Range { // https://dom.spec.whatwg.org/#partially-contained fn partially_contains(&self, node: &Node) -> bool { self.StartContainer() - .inclusive_ancestors() + .inclusive_ancestors(ShadowIncluding::No) .any(|n| &*n == node) != self.EndContainer() - .inclusive_ancestors() + .inclusive_ancestors(ShadowIncluding::No) .any(|n| &*n == node) } @@ -193,8 +193,14 @@ impl Range { // https://dom.spec.whatwg.org/#dom-range-comparepointnode-offset fn compare_point(&self, node: &Node, offset: u32) -> Fallible { let start_node = self.StartContainer(); - let start_node_root = start_node.inclusive_ancestors().last().unwrap(); - let node_root = node.inclusive_ancestors().last().unwrap(); + let start_node_root = start_node + .inclusive_ancestors(ShadowIncluding::No) + .last() + .unwrap(); + let node_root = node + .inclusive_ancestors(ShadowIncluding::No) + .last() + .unwrap(); if start_node_root != node_root { // Step 1. return Err(Error::WrongDocument); @@ -253,7 +259,10 @@ impl RangeMethods for Range { fn CommonAncestorContainer(&self) -> DomRoot { let end_container = self.EndContainer(); // Step 1. - for container in self.StartContainer().inclusive_ancestors() { + for container in self + .StartContainer() + .inclusive_ancestors(ShadowIncluding::No) + { // Step 2. if container.is_inclusive_ancestor_of(&end_container) { // Step 3. @@ -368,8 +377,16 @@ impl RangeMethods for Range { // Step 1. return Err(Error::NotSupported); } - let this_root = self.StartContainer().inclusive_ancestors().last().unwrap(); - let other_root = other.StartContainer().inclusive_ancestors().last().unwrap(); + let this_root = self + .StartContainer() + .inclusive_ancestors(ShadowIncluding::No) + .last() + .unwrap(); + let other_root = other + .StartContainer() + .inclusive_ancestors(ShadowIncluding::No) + .last() + .unwrap(); if this_root != other_root { // Step 2. return Err(Error::WrongDocument); @@ -429,8 +446,15 @@ impl RangeMethods for Range { // https://dom.spec.whatwg.org/#dom-range-intersectsnode fn IntersectsNode(&self, node: &Node) -> bool { let start_node = self.StartContainer(); - let start_node_root = self.StartContainer().inclusive_ancestors().last().unwrap(); - let node_root = node.inclusive_ancestors().last().unwrap(); + let start_node_root = self + .StartContainer() + .inclusive_ancestors(ShadowIncluding::No) + .last() + .unwrap(); + let node_root = node + .inclusive_ancestors(ShadowIncluding::No) + .last() + .unwrap(); if start_node_root != node_root { // Step 1. return false; @@ -868,9 +892,9 @@ impl RangeMethods for Range { let end = self.EndContainer(); if start - .inclusive_ancestors() + .inclusive_ancestors(ShadowIncluding::No) .any(|n| !n.is_inclusive_ancestor_of(&end) && !n.is::()) || - end.inclusive_ancestors() + end.inclusive_ancestors(ShadowIncluding::No) .any(|n| !n.is_inclusive_ancestor_of(&start) && !n.is::()) { return Err(Error::InvalidState); @@ -1051,7 +1075,7 @@ fn bp_position(a_node: &Node, a_offset: u32, b_node: &Node, b_offset: u32) -> Op } } else if position & NodeConstants::DOCUMENT_POSITION_CONTAINS != 0 { // Step 3-1, 3-2. - let mut b_ancestors = b_node.inclusive_ancestors(); + let mut b_ancestors = b_node.inclusive_ancestors(ShadowIncluding::No); let child = b_ancestors .find(|child| &*child.GetParentNode().unwrap() == a_node) .unwrap(); -- cgit v1.2.3 From c38c964f1b1d2614f50863be0b896e1700b5fea8 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Wed, 31 Jul 2019 13:34:01 +0200 Subject: Upgrade to rustc 1.38.0-nightly (dddb7fca0 2019-07-30) --- components/script/dom/range.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index de17427664e..64a26fa0ba9 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -756,7 +756,7 @@ impl RangeMethods for Range { }; // Step 6. - Node::ensure_pre_insertion_validity(node, &parent, reference_node.deref())?; + Node::ensure_pre_insertion_validity(node, &parent, reference_node.as_deref())?; // Step 7. let split_text; @@ -764,14 +764,14 @@ impl RangeMethods for Range { Some(text) => { split_text = text.SplitText(start_offset)?; let new_reference = DomRoot::upcast::(split_text); - assert!(new_reference.GetParentNode().deref() == Some(&parent)); + assert!(new_reference.GetParentNode().as_deref() == Some(&parent)); Some(new_reference) }, _ => reference_node, }; // Step 8. - let reference_node = if Some(node) == reference_node.deref() { + let reference_node = if Some(node) == reference_node.as_deref() { node.GetNextSibling() } else { reference_node @@ -794,7 +794,7 @@ impl RangeMethods for Range { }; // Step 12. - Node::pre_insert(node, &parent, reference_node.deref())?; + Node::pre_insert(node, &parent, reference_node.as_deref())?; // Step 13. if self.Collapsed() { @@ -989,7 +989,7 @@ impl RangeMethods for Range { }; // Step 2. - let element = Element::fragment_parsing_context(&owner_doc, element.deref()); + let element = Element::fragment_parsing_context(&owner_doc, element.as_deref()); // Step 3. let fragment_node = element.parse_fragment(fragment)?; -- cgit v1.2.3 From bea73951db5a758f78842a0056daccba9d89a9c0 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Tue, 12 Nov 2019 22:16:08 +0100 Subject: Use `#![register_tool]` instead of `#![register_attr]` CC https://github.com/rust-lang/rust/issues/66079 --- components/script/dom/range.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 64a26fa0ba9..819cc284d63 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -1011,7 +1011,7 @@ impl RangeMethods for Range { } #[derive(DenyPublicFields, JSTraceable, MallocSizeOf)] -#[must_root] +#[unrooted_must_root_lint::must_root] pub struct BoundaryPoint { node: MutDom, offset: Cell, -- cgit v1.2.3 From 67e9fc8c0ad5dd54a9947a3048f588a8ea55458e Mon Sep 17 00:00:00 2001 From: Patrick Shaughnessy Date: Fri, 13 Dec 2019 18:39:11 -0500 Subject: Attr is a Node, with consequences for many Node methods --- components/script/dom/range.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 819cc284d63..665469f4884 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -986,6 +986,7 @@ impl RangeMethods for Range { NodeTypeId::CharacterData(CharacterDataTypeId::Text(_)) => node.GetParentElement(), NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) | NodeTypeId::DocumentType => unreachable!(), + NodeTypeId::Attr => unreachable!(), }; // Step 2. -- cgit v1.2.3 From f7db4b7f8011239f01c3ba2e5e402c866fbe68fb Mon Sep 17 00:00:00 2001 From: Kunal Mohan Date: Sat, 18 Jan 2020 01:29:26 +0530 Subject: Modify `script` to prevent further violations of snake_case --- components/script/dom/range.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 665469f4884..e9e62a9cdc0 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -83,6 +83,7 @@ impl Range { } // https://dom.spec.whatwg.org/#dom-range + #[allow(non_snake_case)] pub fn Constructor(window: &Window) -> Fallible> { let document = window.Document(); Ok(Range::new_with_doc(&document)) -- cgit v1.2.3 From 5ef335895138bff8288a840c39779dda760dfbec Mon Sep 17 00:00:00 2001 From: Patrick Shaughnessy Date: Fri, 31 Jan 2020 21:56:36 -0500 Subject: Selection interface working for synthetic operations --- components/script/dom/range.rs | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index e9e62a9cdc0..1aabc0fc540 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods; use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeConstants; use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; @@ -24,6 +25,7 @@ use crate::dom::documentfragment::DocumentFragment; use crate::dom::element::Element; use crate::dom::htmlscriptelement::HTMLScriptElement; use crate::dom::node::{Node, ShadowIncluding, UnbindContext}; +use crate::dom::selection::Selection; use crate::dom::text::Text; use crate::dom::window::Window; use dom_struct::dom_struct; @@ -37,6 +39,16 @@ pub struct Range { reflector_: Reflector, start: BoundaryPoint, end: BoundaryPoint, + // A range that belongs to a Selection needs to know about it + // so selectionchange can fire when the range changes. + // A range shouldn't belong to more than one Selection at a time, + // but from the spec as of Feb 1 2020 I can't rule out a corner case like: + // * Select a range R in document A, from node X to Y + // * Insert everything from X to Y into document B + // * Set B's selection's range to R + // which leaves R technically, and observably, associated with A even though + // it will fail the same-root-node check on many of A's selection's methods. + associated_selections: DomRefCell>>, } impl Range { @@ -50,6 +62,7 @@ impl Range { reflector_: Reflector::new(), start: BoundaryPoint::new(start_container, start_offset), end: BoundaryPoint::new(end_container, end_offset), + associated_selections: DomRefCell::new(vec![]), } } @@ -163,6 +176,9 @@ impl Range { // https://dom.spec.whatwg.org/#concept-range-bp-set fn set_start(&self, node: &Node, offset: u32) { + if &self.start.node != node || self.start.offset.get() != offset { + self.report_change(); + } if &self.start.node != node { if self.start.node == self.end.node { node.ranges().push(WeakRef::new(&self)); @@ -178,6 +194,9 @@ impl Range { // https://dom.spec.whatwg.org/#concept-range-bp-set fn set_end(&self, node: &Node, offset: u32) { + if &self.end.node != node || self.end.offset.get() != offset { + self.report_change(); + } if &self.end.node != node { if self.end.node == self.start.node { node.ranges().push(WeakRef::new(&self)); @@ -228,6 +247,26 @@ impl Range { // Step 6. Ok(Ordering::Equal) } + + pub fn associate_selection(&self, selection: &Selection) { + let mut selections = self.associated_selections.borrow_mut(); + if !selections.iter().any(|s| &**s == selection) { + selections.push(Dom::from_ref(selection)); + } + } + + pub fn disassociate_selection(&self, selection: &Selection) { + self.associated_selections + .borrow_mut() + .retain(|s| &**s != selection); + } + + fn report_change(&self) { + self.associated_selections + .borrow() + .iter() + .for_each(|s| s.queue_selectionchange_task()); + } } impl RangeMethods for Range { @@ -821,6 +860,9 @@ impl RangeMethods for Range { // Step 3. if start_node == end_node { if let Some(text) = start_node.downcast::() { + if end_offset > start_offset { + self.report_change(); + } return text.ReplaceData(start_offset, end_offset - start_offset, DOMString::new()); } } @@ -1142,9 +1184,11 @@ impl WeakRangeVec { entry.remove(); } if &range.start.node == child { + range.report_change(); range.start.set(context.parent, offset); } if &range.end.node == child { + range.report_change(); range.end.set(context.parent, offset); } }); @@ -1169,9 +1213,11 @@ impl WeakRangeVec { entry.remove(); } if &range.start.node == node { + range.report_change(); range.start.set(sibling, range.StartOffset() + length); } if &range.end.node == node { + range.report_change(); range.end.set(sibling, range.EndOffset() + length); } }); @@ -1212,9 +1258,11 @@ impl WeakRangeVec { } if move_start { + range.report_change(); range.start.set(child, new_offset); } if move_end { + range.report_change(); range.end.set(child, new_offset); } }); @@ -1273,9 +1321,11 @@ impl WeakRangeVec { } if move_start { + range.report_change(); range.start.set(sibling, start_offset - offset); } if move_end { + range.report_change(); range.end.set(sibling, end_offset - offset); } }); @@ -1289,9 +1339,11 @@ impl WeakRangeVec { (*self.cell.get()).update(|entry| { let range = entry.root().unwrap(); if &range.start.node == node && offset == range.StartOffset() { + range.report_change(); range.start.set_offset(offset + 1); } if &range.end.node == node && offset == range.EndOffset() { + range.report_change(); range.end.set_offset(offset + 1); } }); @@ -1304,10 +1356,12 @@ impl WeakRangeVec { let range = entry.root().unwrap(); let start_offset = range.StartOffset(); if &range.start.node == node && start_offset > offset { + range.report_change(); range.start.set_offset(f(start_offset)); } let end_offset = range.EndOffset(); if &range.end.node == node && end_offset > offset { + range.report_change(); range.end.set_offset(f(end_offset)); } }); -- cgit v1.2.3 From 3ea6d87bcc37167464e856949a4b9b77d0e9318a Mon Sep 17 00:00:00 2001 From: YUAN LYU Date: Fri, 20 Mar 2020 22:14:18 -0400 Subject: Add trait DomObjectWrap to provide WRAP function --- components/script/dom/range.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 1aabc0fc540..0b1c8f16de1 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -7,8 +7,8 @@ use crate::dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterData use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeConstants; use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use crate::dom::bindings::codegen::Bindings::NodeListBinding::NodeListMethods; +use crate::dom::bindings::codegen::Bindings::RangeBinding::RangeConstants; use crate::dom::bindings::codegen::Bindings::RangeBinding::RangeMethods; -use crate::dom::bindings::codegen::Bindings::RangeBinding::{self, RangeConstants}; use crate::dom::bindings::codegen::Bindings::TextBinding::TextMethods; use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use crate::dom::bindings::error::{Error, ErrorResult, Fallible}; @@ -86,7 +86,6 @@ impl Range { end_offset, )), document.window(), - RangeBinding::Wrap, ); start_container.ranges().push(WeakRef::new(&range)); if start_container != end_container { -- cgit v1.2.3 From 036f123c4ee61f72fd123cc0c624df9d604cbb93 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 27 Apr 2020 17:54:06 +0200 Subject: Implement concept of dirty root --- components/script/dom/range.rs | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 0b1c8f16de1..e9b3a2e34cb 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -296,19 +296,8 @@ impl RangeMethods for Range { // https://dom.spec.whatwg.org/#dom-range-commonancestorcontainer fn CommonAncestorContainer(&self) -> DomRoot { - let end_container = self.EndContainer(); - // Step 1. - for container in self - .StartContainer() - .inclusive_ancestors(ShadowIncluding::No) - { - // Step 2. - if container.is_inclusive_ancestor_of(&end_container) { - // Step 3. - return container; - } - } - unreachable!(); + self.EndContainer() + .common_ancestor(&self.StartContainer(), ShadowIncluding::No) } // https://dom.spec.whatwg.org/#dom-range-setstart -- cgit v1.2.3 From 962e6205293b3466df173889cd56ba435cdaa233 Mon Sep 17 00:00:00 2001 From: Utsav Oza Date: Thu, 30 Jul 2020 16:31:36 +0530 Subject: Do not panic on navigating across documents --- components/script/dom/range.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'components/script/dom/range.rs') diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index e9b3a2e34cb..b48e186bc3f 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -298,6 +298,7 @@ impl RangeMethods for Range { fn CommonAncestorContainer(&self) -> DomRoot { self.EndContainer() .common_ancestor(&self.StartContainer(), ShadowIncluding::No) + .expect("Couldn't find common ancestor container") } // https://dom.spec.whatwg.org/#dom-range-setstart -- cgit v1.2.3