Title: [105649] trunk
Revision
105649
Author
[email protected]
Date
2012-01-23 15:46:15 -0800 (Mon, 23 Jan 2012)

Log Message

https://bugs.webkit.org/show_bug.cgi?id=75799
Calling intersectsNode on a detached range should throw.

Source/WebCore:

INVALID_STATE_ERR exception should be thrown if intersectsNode is called on a detached Range.

Patch by Joe Thomas <[email protected]> on 2012-01-23
Reviewed by Darin Adler.

Test: fast/dom/Range/range-intersectsNode-exception.html

* dom/Range.cpp:
(WebCore::Range::intersectsNode): Throwing INVALID_STATE_ERR exception if the range is detached.

LayoutTests:

Added test case to verify the exception thrown while calling intersectsNode on a detached range.

Patch by Joe Thomas <[email protected]> on 2012-01-23
Reviewed by Darin Adler.

* fast/dom/Range/range-intersectsNode-exception-expected.txt: Added.
* fast/dom/Range/range-intersectsNode-exception.html: Added.
* fast/dom/Range/range-intersectsNode-expected.txt:
* fast/dom/Range/resources/intersectsNode.js:  Modified the test case to catch the exception.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (105648 => 105649)


--- trunk/LayoutTests/ChangeLog	2012-01-23 23:35:44 UTC (rev 105648)
+++ trunk/LayoutTests/ChangeLog	2012-01-23 23:46:15 UTC (rev 105649)
@@ -1,3 +1,17 @@
+2012-01-23  Joe Thomas  <[email protected]>
+
+        https://bugs.webkit.org/show_bug.cgi?id=75799
+        Calling intersectsNode on a detached range should throw.
+
+        Added test case to verify the exception thrown while calling intersectsNode on a detached range.
+
+        Reviewed by Darin Adler.
+
+        * fast/dom/Range/range-intersectsNode-exception-expected.txt: Added.
+        * fast/dom/Range/range-intersectsNode-exception.html: Added.
+        * fast/dom/Range/range-intersectsNode-expected.txt:
+        * fast/dom/Range/resources/intersectsNode.js:  Modified the test case to catch the exception.
+
 2012-01-23  Mike Lawther  <[email protected]>
 
         getComputedStyle margin percentage test for CSS calc

Added: trunk/LayoutTests/fast/dom/Range/range-intersectsNode-exception-expected.txt (0 => 105649)


--- trunk/LayoutTests/fast/dom/Range/range-intersectsNode-exception-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/Range/range-intersectsNode-exception-expected.txt	2012-01-23 23:46:15 UTC (rev 105649)
@@ -0,0 +1,10 @@
+Test for Bug: 75799 - Calling intersectsNode on a detached range should throw
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS range.intersectsNode(document.getElementById('b1')) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/dom/Range/range-intersectsNode-exception.html (0 => 105649)


--- trunk/LayoutTests/fast/dom/Range/range-intersectsNode-exception.html	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/Range/range-intersectsNode-exception.html	2012-01-23 23:46:15 UTC (rev 105649)
@@ -0,0 +1,22 @@
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<!-- hidden area to create the ranges being tested -->
+<div  style="visibility: hidden">
+    <div id=a1>a1
+        <div id=b1>b1</div>
+    </div>
+</div>
+
+<script>
+description("Test for Bug: 75799 - Calling intersectsNode on a detached range should throw");
+var range = document.createRange();
+range.selectNode(document.getElementById("a1"));
+range.detach();
+shouldThrow("range.intersectsNode(document.getElementById('b1'))", '"Error: INVALID_STATE_ERR: DOM Exception 11"');
+</script>
+<script src=""
+</body>
+</html>

Modified: trunk/LayoutTests/fast/dom/Range/range-intersectsNode-expected.txt (105648 => 105649)


--- trunk/LayoutTests/fast/dom/Range/range-intersectsNode-expected.txt	2012-01-23 23:35:44 UTC (rev 105648)
+++ trunk/LayoutTests/fast/dom/Range/range-intersectsNode-expected.txt	2012-01-23 23:46:15 UTC (rev 105649)
@@ -44,7 +44,7 @@
 PASS intersects is true
 
 2.1 Detached Range, attached node
-PASS intersects is false
+PASS detachedRange.intersectsNode(document.getElementById('a1')) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
 
 2.2 attached range, detached node
 PASS intersects is false

Modified: trunk/LayoutTests/fast/dom/Range/resources/intersectsNode.js (105648 => 105649)


--- trunk/LayoutTests/fast/dom/Range/resources/intersectsNode.js	2012-01-23 23:35:44 UTC (rev 105648)
+++ trunk/LayoutTests/fast/dom/Range/resources/intersectsNode.js	2012-01-23 23:46:15 UTC (rev 105649)
@@ -95,8 +95,7 @@
 debug("2.1 Detached Range, attached node");
 var detachedRange = document.createRange();
 detachedRange.detach();
-intersects = detachedRange.intersectsNode(document.getElementById("a1"));
-shouldBeFalse("intersects");
+shouldThrow("detachedRange.intersectsNode(document.getElementById('a1'))", '"Error: INVALID_STATE_ERR: DOM Exception 11"');
 debug("");
 
 debug("2.2 attached range, detached node");

Modified: trunk/Source/WebCore/ChangeLog (105648 => 105649)


--- trunk/Source/WebCore/ChangeLog	2012-01-23 23:35:44 UTC (rev 105648)
+++ trunk/Source/WebCore/ChangeLog	2012-01-23 23:46:15 UTC (rev 105649)
@@ -1,3 +1,17 @@
+2012-01-23  Joe Thomas  <[email protected]>
+
+        https://bugs.webkit.org/show_bug.cgi?id=75799
+        Calling intersectsNode on a detached range should throw.
+
+        INVALID_STATE_ERR exception should be thrown if intersectsNode is called on a detached Range.
+
+        Reviewed by Darin Adler.
+
+        Test: fast/dom/Range/range-intersectsNode-exception.html
+
+        * dom/Range.cpp:
+        (WebCore::Range::intersectsNode): Throwing INVALID_STATE_ERR exception if the range is detached.
+
 2012-01-23  Daniel Cheng  <[email protected]>
 
         Convert DataTransferItem/DataTransferItemList back into an interface class

Modified: trunk/Source/WebCore/dom/Range.cpp (105648 => 105649)


--- trunk/Source/WebCore/dom/Range.cpp	2012-01-23 23:35:44 UTC (rev 105648)
+++ trunk/Source/WebCore/dom/Range.cpp	2012-01-23 23:46:15 UTC (rev 105649)
@@ -589,14 +589,17 @@
     // http://developer.mozilla.org/en/docs/DOM:range.intersectsNode
     // Returns a bool if the node intersects the range.
 
+    // Throw exception if the range is already detached.
+    if (!m_start.container()) {
+        ec = INVALID_STATE_ERR;
+        return false;
+    }
     if (!refNode) {
         ec = NOT_FOUND_ERR;
         return false;
     }
-    
-    if ((!m_start.container() && refNode->attached())
-            || (m_start.container() && !refNode->attached())
-            || refNode->document() != m_ownerDocument) {
+
+    if (!refNode->attached() || refNode->document() != m_ownerDocument) {
         // Firefox doesn't throw an exception for these cases; it returns false.
         return false;
     }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to