Title: [106488] trunk
Revision
106488
Author
[email protected]
Date
2012-02-01 13:34:08 -0800 (Wed, 01 Feb 2012)

Log Message

Crash in EventHandler::updateDragAndDrop
https://bugs.webkit.org/show_bug.cgi?id=77569

Reviewed by Alexey Proskuryakov.

Source/WebCore: 

Test: fast/events/remove-target-with-shadow-in-drag.html

* page/EventHandler.cpp:
(WebCore::EventHandler::updateDragAndDrop):

LayoutTests: 

* fast/events/remove-target-with-shadow-in-drag-expected.txt: Added.
* fast/events/remove-target-with-shadow-in-drag.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (106487 => 106488)


--- trunk/LayoutTests/ChangeLog	2012-02-01 21:18:23 UTC (rev 106487)
+++ trunk/LayoutTests/ChangeLog	2012-02-01 21:34:08 UTC (rev 106488)
@@ -1,3 +1,13 @@
+2012-02-01  Ryosuke Niwa  <[email protected]>
+
+        Crash in EventHandler::updateDragAndDrop
+        https://bugs.webkit.org/show_bug.cgi?id=77569
+
+        Reviewed by Alexey Proskuryakov.
+
+        * fast/events/remove-target-with-shadow-in-drag-expected.txt: Added.
+        * fast/events/remove-target-with-shadow-in-drag.html: Added.
+
 2012-02-01  Szilard Ledan  <[email protected]>
 
         Fixed some lines in the date-constructor.js test.

Added: trunk/LayoutTests/fast/events/remove-target-with-shadow-in-drag-expected.txt (0 => 106488)


--- trunk/LayoutTests/fast/events/remove-target-with-shadow-in-drag-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/remove-target-with-shadow-in-drag-expected.txt	2012-02-01 21:34:08 UTC (rev 106488)
@@ -0,0 +1,3 @@
+CONSOLE MESSAGE: line 34: NOT_FOUND_ERR: DOM Exception 8: An attempt was made to reference a Node in a context where it does not exist.
+CONSOLE MESSAGE: line 34: NOT_FOUND_ERR: DOM Exception 8: An attempt was made to reference a Node in a context where it does not exist.
+PASS. DRT didn't crash.

Added: trunk/LayoutTests/fast/events/remove-target-with-shadow-in-drag.html (0 => 106488)


--- trunk/LayoutTests/fast/events/remove-target-with-shadow-in-drag.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/remove-target-with-shadow-in-drag.html	2012-02-01 21:34:08 UTC (rev 106488)
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script>
+
+if (!window.layoutTestController)
+    document.writeln("This crash test needs to be ran inside DumpRenderTree");
+
+var target;
+
+function startTest() {
+    if (!window.layoutTestController)
+        return;
+
+    layoutTestController.dumpAsText();
+
+    function mouseMoveToCenterOfElement(element) {
+        eventSender.mouseMoveTo(element.offsetLeft + element.offsetWidth / 2, element.offsetTop + element.offsetHeight / 2);
+    }
+
+    var src = ""
+    mouseMoveToCenterOfElement(src);
+    eventSender.mouseDown();
+    eventSender.leapForward(200);
+
+    target = document.getElementById('target');
+    eventSender.mouseMoveTo(target.offsetLeft + 5, target.offsetTop + 5);
+    eventSender.mouseUp();
+
+    document.body.innerHTML = "PASS. DRT didn't crash."
+}
+
+function trigger() {
+    document.body.removeChild(target);
+    target = null;
+    if (window.GCController)
+        GCController.collect();
+}
+
+</script>
+<img id="src" src="" _onload_="startTest()" draggable="true" _ondrag_="trigger();">
+<textarea id="target" style="width: 500px; height: 500px;">Dropzone</textarea>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (106487 => 106488)


--- trunk/Source/WebCore/ChangeLog	2012-02-01 21:18:23 UTC (rev 106487)
+++ trunk/Source/WebCore/ChangeLog	2012-02-01 21:34:08 UTC (rev 106488)
@@ -1,3 +1,15 @@
+2012-02-01  Ryosuke Niwa  <[email protected]>
+
+        Crash in EventHandler::updateDragAndDrop
+        https://bugs.webkit.org/show_bug.cgi?id=77569
+
+        Reviewed by Alexey Proskuryakov.
+
+        Test: fast/events/remove-target-with-shadow-in-drag.html
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::updateDragAndDrop):
+
 2012-02-01  Sheriff Bot  <[email protected]>
 
         Unreviewed, rolling out r106382.

Modified: trunk/Source/WebCore/page/EventHandler.cpp (106487 => 106488)


--- trunk/Source/WebCore/page/EventHandler.cpp	2012-02-01 21:18:23 UTC (rev 106487)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2012-02-01 21:34:08 UTC (rev 106488)
@@ -1837,7 +1837,7 @@
     MouseEventWithHitTestResults mev = prepareMouseEvent(request, event);
 
     // Drag events should never go to text nodes (following IE, and proper mouseover/out dispatch)
-    Node* newTarget = targetNode(mev);
+    RefPtr<Node> newTarget = targetNode(mev);
     if (newTarget && newTarget->isTextNode())
         newTarget = newTarget->parentNode();
     if (newTarget)
@@ -1850,7 +1850,7 @@
         //
         // Moreover, this ordering conforms to section 7.9.4 of the HTML 5 spec. <http://dev.w3.org/html5/spec/Overview.html#drag-and-drop-processing-model>.
         Frame* targetFrame;
-        if (targetIsFrame(newTarget, targetFrame)) {
+        if (targetIsFrame(newTarget.get(), targetFrame)) {
             if (targetFrame)
                 accept = targetFrame->eventHandler()->updateDragAndDrop(event, clipboard);
         } else if (newTarget) {
@@ -1859,9 +1859,9 @@
                 // for now we don't care if event handler cancels default behavior, since there is none
                 dispatchDragSrcEvent(eventNames().dragEvent, event);
             }
-            accept = dispatchDragEvent(eventNames().dragenterEvent, newTarget, event, clipboard);
+            accept = dispatchDragEvent(eventNames().dragenterEvent, newTarget.get(), event, clipboard);
             if (!accept)
-                accept = findDropZone(newTarget, clipboard);
+                accept = findDropZone(newTarget.get(), clipboard);
         }
 
         if (targetIsFrame(m_dragTarget.get(), targetFrame)) {
@@ -1877,7 +1877,7 @@
         }
     } else {
         Frame* targetFrame;
-        if (targetIsFrame(newTarget, targetFrame)) {
+        if (targetIsFrame(newTarget.get(), targetFrame)) {
             if (targetFrame)
                 accept = targetFrame->eventHandler()->updateDragAndDrop(event, clipboard);
         } else if (newTarget) {
@@ -1886,9 +1886,9 @@
                 // for now we don't care if event handler cancels default behavior, since there is none
                 dispatchDragSrcEvent(eventNames().dragEvent, event);
             }
-            accept = dispatchDragEvent(eventNames().dragoverEvent, newTarget, event, clipboard);
+            accept = dispatchDragEvent(eventNames().dragoverEvent, newTarget.get(), event, clipboard);
             if (!accept)
-                accept = findDropZone(newTarget, clipboard);
+                accept = findDropZone(newTarget.get(), clipboard);
             m_shouldOnlyFireDragOverEvent = false;
         }
     }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to