Backed out changeset d20646799abb (bug 1352852) for failures in test_drag_empty.html a=backout
authorWes Kocher <wkocher@mozilla.com>
Thu, 08 Jun 2017 17:58:43 -0700
changeset 411266 53cdf23f7d183ee68dee237efc074d15cc299f77
parent 411265 ee6c97bf9ca68e449662d9bba14ec83dc19753ba
child 411267 3c1e9ea66c7f9316d457be2cab3eacd57d72f208
push id7391
push usermtabara@mozilla.com
push dateMon, 12 Jun 2017 13:08:53 +0000
treeherdermozilla-beta@2191d7f87e2e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbackout
bugs1352852
milestone55.0a1
backs outd20646799abb8ab802873017464461bd1a526804
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset d20646799abb (bug 1352852) for failures in test_drag_empty.html a=backout MozReview-Commit-ID: KNLK1tSFLD0
dom/events/DataTransfer.cpp
dom/events/DataTransfer.h
dom/events/EventStateManager.cpp
dom/events/test/mochitest.ini
dom/events/test/test_drag_empty.html
widget/nsITransferable.idl
--- a/dom/events/DataTransfer.cpp
+++ b/dom/events/DataTransfer.cpp
@@ -33,17 +33,16 @@
 #include "mozilla/dom/DataTransferBinding.h"
 #include "mozilla/dom/DataTransferItemList.h"
 #include "mozilla/dom/Directory.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/FileList.h"
 #include "mozilla/dom/BindingUtils.h"
 #include "mozilla/dom/OSFileSystem.h"
 #include "mozilla/dom/Promise.h"
-#include "mozilla/storage/Variant.h"
 #include "nsNetUtil.h"
 
 namespace mozilla {
 namespace dom {
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(DataTransfer)
 
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(DataTransfer)
@@ -1569,33 +1568,10 @@ DataTransfer::FillInExternalCustomTypes(
       rv = variant->SetAsAString(data);
       NS_ENSURE_SUCCESS_VOID(rv);
 
       SetDataWithPrincipal(format, variant, aIndex, aPrincipal);
     }
   } while (type != eCustomClipboardTypeId_None);
 }
 
-void
-DataTransfer::AddDummyHiddenData()
-{
-  RefPtr<nsVariantCC> variant = new nsVariantCC();
-  variant->SetAsAString(EmptyString());
-
-  ErrorResult rv;
-  RefPtr<DataTransferItem> item =
-    mItems->SetDataWithPrincipal(NS_LITERAL_STRING(kDummyTypeMime),
-                                 variant,
-                                 /* aIndex = */ 0,
-                                 nsContentUtils::GetSystemPrincipal(),
-                                 /* aInsertOnly = */ true,
-                                 /* aHidden = */ true,
-                                 rv);
-  MOZ_ASSERT(item->ChromeOnly());
-
-  // We might have gotten a NS_ERROR_DOM_NOT_SUPPORTED_ERROR because we've
-  // already added an application/x-moz-dummy-data. We want to ignore that
-  // error.
-  rv.SuppressException();
-}
-
 } // namespace dom
 } // namespace mozilla
--- a/dom/events/DataTransfer.h
+++ b/dom/events/DataTransfer.h
@@ -265,20 +265,16 @@ public:
   // Variation of SetDataWithPrincipal with handles extracting
   // kCustomTypesMime data into separate types.
   void SetDataWithPrincipalFromOtherProcess(const nsAString& aFormat,
                                             nsIVariant* aData,
                                             uint32_t aIndex,
                                             nsIPrincipal* aPrincipal,
                                             bool aHidden);
 
-  // Adds a dummy type to the DataTransfer which is hidden from the user to
-  // allow the drag to run. This type is not visible to content code.
-  void AddDummyHiddenData();
-
   // returns a weak reference to the drag image
   Element* GetDragImage(int32_t* aX, int32_t* aY) const
   {
     *aX = mDragImageX;
     *aY = mDragImageY;
     return mDragImage;
   }
 
--- a/dom/events/EventStateManager.cpp
+++ b/dom/events/EventStateManager.cpp
@@ -1780,33 +1780,16 @@ EventStateManager::GenerateDragGesture(n
 
       // Dispatch the dragstart event to the DOM.
       nsEventStatus status = nsEventStatus_eIgnore;
       EventDispatcher::Dispatch(targetContent, aPresContext, &startEvent,
                                 nullptr, &status);
 
       WidgetDragEvent* event = &startEvent;
 
-      // If we didn't get any data in the dataTransfer, yet the targetContent is
-      // a draggable HTML element draggable, we need to fire the drag event
-      // anyway. We'll add a custom dummy data type to the DataTransfer to make
-      // this possible. This data type will be marked as hidden so that content
-      // can't see it. This does not apply to non-HTML elements.
-      uint32_t count = 0;
-      dataTransfer->GetMozItemCount(&count);
-      if (count == 0) {
-        nsCOMPtr<nsIDOMHTMLElement> htmlDragTarget = do_QueryInterface(targetContent);
-        bool draggable = false;
-        if (htmlDragTarget &&
-            NS_SUCCEEDED(htmlDragTarget->GetDraggable(&draggable)) &&
-            draggable) {
-          dataTransfer->AddDummyHiddenData();
-        }
-      }
-
       nsCOMPtr<nsIObserverService> observerService =
         mozilla::services::GetObserverService();
       // Emit observer event to allow addons to modify the DataTransfer object.
       if (observerService) {
         observerService->NotifyObservers(dataTransfer,
                                          "on-datatransfer-available",
                                          nullptr);
       }
--- a/dom/events/test/mochitest.ini
+++ b/dom/events/test/mochitest.ini
@@ -149,17 +149,16 @@ skip-if = toolkit == 'android' #CRASH_DU
 skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
 [test_dom_mouse_event.html]
 skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
 [test_dom_storage_event.html]
 [test_dom_wheel_event.html]
 [test_draggableprop.html]
 skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
 [test_dragstart.html]
-skip-if = (!e10s && os == "win") # non-e10s windows builds hang when running this test due to the OS expecting non-synthesized input events (bug 1352852 comment 16)
 [test_error_events.html]
 skip-if = toolkit == 'android' #TIMED_OUT
 [test_eventctors.html]
 skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
 [test_eventhandler_scoping.html]
 [test_eventTimeStamp.html]
 [test_focus_disabled.html]
 [test_legacy_event.html]
@@ -173,10 +172,8 @@ skip-if = toolkit == 'android' #CRASH_DU
 [test_wheel_default_action.html]
 [test_bug687787.html]
 [test_bug1305458.html]
 [test_bug1298970.html]
 [test_bug1304044.html]
 [test_bug1332699.html]
 [test_bug1339758.html]
 [test_dnd_with_modifiers.html]
-[test_drag_empty.html]
-skip-if = (!e10s && os == "win") # non-e10s windows builds hang when running this test due to the OS expecting non-synthesized input events (bug 1352852 comment 16)
deleted file mode 100644
--- a/dom/events/test/test_drag_empty.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<html>
-<head>
-  <title>Tests for the dragstart event</title>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
-  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
-  <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
-</head>
-
-<body>
-<!--
- This test checks the behaviour of the dragstart event when no data is added to the DataTransfer.
-  -->
-  <style>
-    #droptarget { width: 100px; height: 100px; background-color: #550000; }
-  </style>
-
-<div id="draggable" draggable="true" ondragstart="onDragStart(event)">This is a bit of text.</div>
-
-<div id="droptarget" ondragover="onDragOver(event)" ondrop="onDrop(event)">THIS IS A DROP TARGET?!?!?</div>
-
-<script>
-  let dragStartFired = false;
-  function onDragStart(event) {
-    dragStartFired = true;
-    info("dragstart fired");
-  }
-
-  let dragOverFired = false;
-  function onDragOver(event) {
-    dragOverFired = true;
-    event.preventDefault();
-    info("dragover fired");
-  }
-
-  let dropFired = false;
-  function onDrop(event) {
-    dropFired = true;
-    is(event.dataTransfer.types.length, 0,
-       "There shouldn't be any data on the DataTransfer");
-    info("drop fired");
-  }
-
-  let loaded = new Promise(resolve => document.body.onload = resolve);
-
-  add_task(function*() {
-    var ds = SpecialPowers.Cc["@mozilla.org/widget/dragservice;1"].
-             getService(SpecialPowers.Ci.nsIDragService);
-    ok(!ds.getCurrentSession(), "There should be no drag session in progress");
-
-    // XXX: Make sure that we've finished loading the document before we start
-    // trying to do work with drag events.
-    yield loaded;
-
-    var draggable = $("draggable");
-    var droptarget = $("droptarget");
-    // Fire the dragstart event - this should start a drag session
-    synthesizeMouse(draggable, 6, 6, { type: "mousedown" });
-    synthesizeMouse(draggable, 14, 14, { type: "mousemove" });
-    // drags are asynchronous on Linux, so this extra event is needed to make
-    // sure the drag gets processed
-    synthesizeMouse(draggable, 15, 15, { type: "mousemove" });
-
-    ok(dragStartFired, "dragstart should have fired");
-    ok(ds.getCurrentSession(), "The drag session should have started");
-
-    // Synthesize the dragover and drop events on the target node.
-    var [result, dataTransfer] = synthesizeDragOver(draggable, droptarget);
-    synthesizeDropAfterDragOver(result, dataTransfer, droptarget);
-    ds.endDragSession(true);
-
-    ok(dropFired, "drop should have been fired");
-    ok(dragOverFired, "dragover should have been fired");
-    ok(!ds.getCurrentSession(), "The drag session should have ended");
-  });
-</script>
-</body>
-</html>
--- a/widget/nsITransferable.idl
+++ b/widget/nsITransferable.idl
@@ -45,25 +45,18 @@ interface nsIPrincipal;
 #define kFilePromiseURLMime         "application/x-moz-file-promise-url"
 // the destination filename for a file promise
 #define kFilePromiseDestFilename    "application/x-moz-file-promise-dest-filename"
 // a dataless flavor used to interact with the OS during file drags
 #define kFilePromiseMime            "application/x-moz-file-promise"
 // a synthetic flavor, put into the transferable once we know the destination directory of a file drag
 #define kFilePromiseDirectoryMime   "application/x-moz-file-promise-dir"
 
-// A custom data type used by DataTransfer for securely transferring arbitrary
-// data through the drag or clipboard object without allowing websites to set
-// arbitrary data types.
 #define kCustomTypesMime "application/x-moz-custom-clipdata"
 
-// A custom data type used during drag events to allow them to occur even when
-// no data has been attached to the drag event's Transferrable.
-#define kDummyTypeMime "application/x-moz-dummy-data"
-
 %}
 
 
 /**
   * nsIFlavorDataProvider allows a flavor to 'promise' data later,
   * supplying the data lazily.
   * 
   * To use it, call setTransferData, passing the flavor string,