summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsigbjornf <sigbjornf@opera.com>2016-02-24 13:29:47 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-24 21:30:43 +0000
commit8d568b12722f02dbb2ec358ce4600b96a673c481 (patch)
treef7fe8d4f882149f69db104550dc8ae29c84e8b51
parent45d2cde917cc11147b641242bc39e5b8f36aa692 (diff)
downloadchromium_src-8d568b12722f02dbb2ec358ce4600b96a673c481.zip
chromium_src-8d568b12722f02dbb2ec358ce4600b96a673c481.tar.gz
chromium_src-8d568b12722f02dbb2ec358ce4600b96a673c481.tar.bz2
Have EventSender mouseups unwind better on cancellation during dragover.
Follow up on changes brought by r376733 and check if handling of dragover cancelled our ongoing drag. Leave early, if so. R=dcheng,rbyers BUG=589426 Review URL: https://codereview.chromium.org/1728353002 Cr-Commit-Position: refs/heads/master@{#377392}
-rw-r--r--components/test_runner/event_sender.cc18
-rw-r--r--third_party/WebKit/LayoutTests/fast/events/drag-nested-eventSender-on-dragover-expected.txt9
-rw-r--r--third_party/WebKit/LayoutTests/fast/events/drag-nested-eventSender-on-dragover.html22
3 files changed, 42 insertions, 7 deletions
diff --git a/components/test_runner/event_sender.cc b/components/test_runner/event_sender.cc
index 6e1df4f..31867c9 100644
--- a/components/test_runner/event_sender.cc
+++ b/components/test_runner/event_sender.cc
@@ -2594,13 +2594,17 @@ void EventSender::DoMouseUp(const WebMouseEvent& e) {
WebPoint client_point(e.x, e.y);
WebPoint screen_point(e.globalX, e.globalY);
- FinishDragAndDrop(
- e,
- view_->dragTargetDragOver(
- client_point,
- screen_point,
- current_drag_effects_allowed_,
- e.modifiers));
+ blink::WebDragOperation drag_effect = view_->dragTargetDragOver(
+ client_point,
+ screen_point,
+ current_drag_effects_allowed_,
+ e.modifiers);
+
+ // Bail if dragover caused cancellation.
+ if (current_drag_data_.isNull())
+ return;
+
+ FinishDragAndDrop(e, drag_effect);
}
void EventSender::DoMouseMove(const WebMouseEvent& e) {
diff --git a/third_party/WebKit/LayoutTests/fast/events/drag-nested-eventSender-on-dragover-expected.txt b/third_party/WebKit/LayoutTests/fast/events/drag-nested-eventSender-on-dragover-expected.txt
new file mode 100644
index 0000000..a4f7be6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/events/drag-nested-eventSender-on-dragover-expected.txt
@@ -0,0 +1,9 @@
+Test that nested use of eventSender.beginDragWithFiles() from within |dragover| is handled without crashing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/WebKit/LayoutTests/fast/events/drag-nested-eventSender-on-dragover.html b/third_party/WebKit/LayoutTests/fast/events/drag-nested-eventSender-on-dragover.html
new file mode 100644
index 0000000..1eb5c9f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/events/drag-nested-eventSender-on-dragover.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<body>
+<script>
+if (window.testRunner)
+ testRunner.dumpAsText();
+
+document.addEventListener("dragover", function () {
+ try {
+ eventSender.beginDragWithFiles(["resources/empty.html"]);
+ console.log("FAIL - nested beginDragWithFiles() expected to throw.");
+ } catch (e) {;}
+});
+
+eventSender.beginDragWithFiles(["resources/empty.html"]);
+eventSender.mouseMoveTo(10, 10);
+eventSender.mouseUp();
+</script>
+<script src="../../resources/js-test.js"></script>
+<script>
+description('Test that nested use of eventSender.beginDragWithFiles() from within |dragover| is handled without crashing.');
+</script>
+</body>