96e0061
diff --git a/widget/gtk/nsClipboardWayland.cpp b/widget/gtk/nsClipboardWayland.cpp
96e0061
--- a/widget/gtk/nsClipboardWayland.cpp
96e0061
+++ b/widget/gtk/nsClipboardWayland.cpp
96e0061
@@ -155,6 +155,8 @@
96e0061
 }
96e0061
 
96e0061
 bool WaylandDataOffer::RequestDataTransfer(const char* aMimeType, int fd) {
96e0061
+  LOGCLIP(
96e0061
+      ("WaylandDataOffer::RequestDataTransfer MIME %s FD %d\n", aMimeType, fd));
96e0061
   if (mWaylandDataOffer) {
96e0061
     wl_data_offer_receive(mWaylandDataOffer, aMimeType, fd);
96e0061
     return true;
96e0061
@@ -164,6 +166,8 @@
96e0061
 }
96e0061
 
96e0061
 void WaylandDataOffer::DragOfferAccept(const char* aMimeType, uint32_t aTime) {
96e0061
+  LOGDRAG(("WaylandDataOffer::DragOfferAccept MIME %s aTime %d\n", aMimeType,
96e0061
+           aTime));
96e0061
   wl_data_offer_accept(mWaylandDataOffer, aTime, aMimeType);
96e0061
 }
96e0061
 
96e0061
@@ -175,6 +179,9 @@
96e0061
   uint32_t preferredAction = gdk_to_wl_actions(aPreferredAction);
96e0061
   uint32_t allActions = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE;
96e0061
 
96e0061
+  LOGDRAG(("WaylandDataOffer::SetDragStatus aPreferredAction %d\n",
96e0061
+           aPreferredAction));
96e0061
+
96e0061
   /* We only don't choose a preferred action if we don't accept any.
96e0061
    * If we do accept any, it is currently alway copy and move
96e0061
    */
96e0061
@@ -412,12 +419,17 @@
96e0061
 
96e0061
 char* nsWaylandDragContext::GetData(const char* aMimeType,
96e0061
                                     uint32_t* aContentLength) {
96e0061
+  LOGDRAG(("nsWaylandDragContext::GetData %s\n", aMimeType));
96e0061
   mDataOffer->DragOfferAccept(aMimeType, mTime);
96e0061
   return mDataOffer->GetData(mDisplay, aMimeType, aContentLength);
96e0061
 }
96e0061
 
96e0061
 void nsRetrievalContextWayland::RegisterNewDataOffer(
96e0061
     wl_data_offer* aWaylandDataOffer) {
96e0061
+  LOGCLIP(
96e0061
+      ("nsRetrievalContextWayland::RegisterNewDataOffer (wl_data_offer) %p\n",
96e0061
+       aWaylandDataOffer));
96e0061
+
96e0061
   DataOffer* dataOffer = static_cast<DataOffer*>(
96e0061
       g_hash_table_lookup(mActiveOffers, aWaylandDataOffer));
96e0061
   MOZ_ASSERT(
96e0061
@@ -432,6 +444,9 @@
96e0061
 
96e0061
 void nsRetrievalContextWayland::RegisterNewDataOffer(
96e0061
     gtk_primary_selection_offer* aPrimaryDataOffer) {
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::RegisterNewDataOffer (primary) %p\n",
96e0061
+           aPrimaryDataOffer));
96e0061
+
96e0061
   DataOffer* dataOffer = static_cast<DataOffer*>(
96e0061
       g_hash_table_lookup(mActiveOffers, aPrimaryDataOffer));
96e0061
   MOZ_ASSERT(
96e0061
@@ -446,6 +461,9 @@
96e0061
 
96e0061
 void nsRetrievalContextWayland::RegisterNewDataOffer(
96e0061
     zwp_primary_selection_offer_v1* aPrimaryDataOffer) {
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::RegisterNewDataOffer (primary ZWP) %p\n",
96e0061
+           aPrimaryDataOffer));
96e0061
+
96e0061
   DataOffer* dataOffer = static_cast<DataOffer*>(
96e0061
       g_hash_table_lookup(mActiveOffers, aPrimaryDataOffer));
96e0061
   MOZ_ASSERT(
96e0061
@@ -460,6 +478,10 @@
96e0061
 
96e0061
 void nsRetrievalContextWayland::SetClipboardDataOffer(
96e0061
     wl_data_offer* aWaylandDataOffer) {
96e0061
+  LOGCLIP(
96e0061
+      ("nsRetrievalContextWayland::SetClipboardDataOffer (wl_data_offer) %p\n",
96e0061
+       aWaylandDataOffer));
96e0061
+
96e0061
   // Delete existing clipboard data offer
96e0061
   mClipboardOffer = nullptr;
96e0061
 
96e0061
@@ -468,7 +490,11 @@
96e0061
   if (aWaylandDataOffer != nullptr) {
96e0061
     DataOffer* dataOffer = static_cast<DataOffer*>(
96e0061
         g_hash_table_lookup(mActiveOffers, aWaylandDataOffer));
96e0061
-    NS_ASSERTION(dataOffer, "We're missing stored clipboard data offer!");
96e0061
+#ifdef MOZ_LOGGING
96e0061
+    if (!dataOffer) {
96e0061
+      LOGCLIP(("    We're missing stored clipboard data offer!\n"));
96e0061
+    }
96e0061
+#endif
96e0061
     if (dataOffer) {
96e0061
       g_hash_table_remove(mActiveOffers, aWaylandDataOffer);
96e0061
       mClipboardOffer = WrapUnique(dataOffer);
96e0061
@@ -478,6 +504,9 @@
96e0061
 
96e0061
 void nsRetrievalContextWayland::SetPrimaryDataOffer(
96e0061
     gtk_primary_selection_offer* aPrimaryDataOffer) {
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::SetPrimaryDataOffer (primary) %p\n",
96e0061
+           aPrimaryDataOffer));
96e0061
+
96e0061
   // Release any primary offer we have.
96e0061
   mPrimaryOffer = nullptr;
96e0061
 
96e0061
@@ -486,7 +515,11 @@
96e0061
   if (aPrimaryDataOffer) {
96e0061
     DataOffer* dataOffer = static_cast<DataOffer*>(
96e0061
         g_hash_table_lookup(mActiveOffers, aPrimaryDataOffer));
96e0061
-    NS_ASSERTION(dataOffer, "We're missing primary data offer!");
96e0061
+#ifdef MOZ_LOGGING
96e0061
+    if (!dataOffer) {
96e0061
+      LOGCLIP(("    We're missing stored primary data offer!\n"));
96e0061
+    }
96e0061
+#endif
96e0061
     if (dataOffer) {
96e0061
       g_hash_table_remove(mActiveOffers, aPrimaryDataOffer);
96e0061
       mPrimaryOffer = WrapUnique(dataOffer);
96e0061
@@ -496,6 +529,9 @@
96e0061
 
96e0061
 void nsRetrievalContextWayland::SetPrimaryDataOffer(
96e0061
     zwp_primary_selection_offer_v1* aPrimaryDataOffer) {
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::SetPrimaryDataOffer (primary ZWP)%p\n",
96e0061
+           aPrimaryDataOffer));
96e0061
+
96e0061
   // Release any primary offer we have.
96e0061
   mPrimaryOffer = nullptr;
96e0061
 
96e0061
@@ -504,7 +540,11 @@
96e0061
   if (aPrimaryDataOffer) {
96e0061
     DataOffer* dataOffer = static_cast<DataOffer*>(
96e0061
         g_hash_table_lookup(mActiveOffers, aPrimaryDataOffer));
96e0061
-    NS_ASSERTION(dataOffer, "We're missing primary data offer!");
96e0061
+#ifdef MOZ_LOGGING
96e0061
+    if (!dataOffer) {
96e0061
+      LOGCLIP(("    We're missing stored primary data offer!\n"));
96e0061
+    }
96e0061
+#endif
96e0061
     if (dataOffer) {
96e0061
       g_hash_table_remove(mActiveOffers, aPrimaryDataOffer);
96e0061
       mPrimaryOffer = WrapUnique(dataOffer);
96e0061
@@ -514,12 +554,19 @@
96e0061
 
96e0061
 void nsRetrievalContextWayland::AddDragAndDropDataOffer(
96e0061
     wl_data_offer* aDropDataOffer) {
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::AddDragAndDropDataOffer %p\n",
96e0061
+           aDropDataOffer));
96e0061
+
96e0061
   // Remove any existing D&D contexts.
96e0061
   mDragContext = nullptr;
96e0061
 
96e0061
   WaylandDataOffer* dataOffer = static_cast<WaylandDataOffer*>(
96e0061
       g_hash_table_lookup(mActiveOffers, aDropDataOffer));
96e0061
-  NS_ASSERTION(dataOffer, "We're missing drag and drop data offer!");
96e0061
+#ifdef MOZ_LOGGING
96e0061
+  if (!dataOffer) {
96e0061
+    LOGCLIP(("    We're missing stored Drag & Drop data offer!\n"));
96e0061
+  }
96e0061
+#endif
96e0061
   if (dataOffer) {
96e0061
     g_hash_table_remove(mActiveOffers, aDropDataOffer);
96e0061
     mDragContext = new nsWaylandDragContext(dataOffer, mDisplay->GetDisplay());
96e0061
@@ -531,6 +578,7 @@
96e0061
 }
96e0061
 
96e0061
 void nsRetrievalContextWayland::ClearDragAndDropDataOffer(void) {
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::ClearDragAndDropDataOffer()\n"));
96e0061
   mDragContext = nullptr;
96e0061
 }
96e0061
 
96e0061
@@ -539,7 +587,7 @@
96e0061
 static void data_device_data_offer(void* data,
96e0061
                                    struct wl_data_device* data_device,
96e0061
                                    struct wl_data_offer* offer) {
96e0061
-  LOGCLIP(("data_device_data_offer() callback\n"));
96e0061
+  LOGCLIP(("data_device_data_offer(), wl_data_offer %p\n", offer));
96e0061
   nsRetrievalContextWayland* context =
96e0061
       static_cast<nsRetrievalContextWayland*>(data);
96e0061
   context->RegisterNewDataOffer(offer);
96e0061
@@ -549,7 +597,7 @@
96e0061
 static void data_device_selection(void* data,
96e0061
                                   struct wl_data_device* wl_data_device,
96e0061
                                   struct wl_data_offer* offer) {
96e0061
-  LOGCLIP(("data_device_selection() callback\n"));
96e0061
+  LOGCLIP(("data_device_selection(), set wl_data_offer %p\n", offer));
96e0061
   nsRetrievalContextWayland* context =
96e0061
       static_cast<nsRetrievalContextWayland*>(data);
96e0061
   context->SetClipboardDataOffer(offer);
96e0061
@@ -650,7 +698,7 @@
96e0061
 static void primary_selection_data_offer(
96e0061
     void* data, struct gtk_primary_selection_device* primary_selection_device,
96e0061
     struct gtk_primary_selection_offer* primary_offer) {
96e0061
-  LOGCLIP(("primary_selection_data_offer() callback\n"));
96e0061
+  LOGCLIP(("primary_selection_data_offer()\n"));
96e0061
   // create and add listener
96e0061
   nsRetrievalContextWayland* context =
96e0061
       static_cast<nsRetrievalContextWayland*>(data);
96e0061
@@ -661,7 +709,7 @@
96e0061
     void* data,
96e0061
     struct zwp_primary_selection_device_v1* primary_selection_device,
96e0061
     struct zwp_primary_selection_offer_v1* primary_offer) {
96e0061
-  LOGCLIP(("primary_selection_data_offer() callback\n"));
96e0061
+  LOGCLIP(("primary_selection_data_offer()\n"));
96e0061
   // create and add listener
96e0061
   nsRetrievalContextWayland* context =
96e0061
       static_cast<nsRetrievalContextWayland*>(data);
96e0061
@@ -671,7 +719,7 @@
96e0061
 static void primary_selection_selection(
96e0061
     void* data, struct gtk_primary_selection_device* primary_selection_device,
96e0061
     struct gtk_primary_selection_offer* primary_offer) {
96e0061
-  LOGCLIP(("primary_selection_selection() callback\n"));
96e0061
+  LOGCLIP(("primary_selection_selection()\n"));
96e0061
   nsRetrievalContextWayland* context =
96e0061
       static_cast<nsRetrievalContextWayland*>(data);
96e0061
   context->SetPrimaryDataOffer(primary_offer);
96e0061
@@ -681,7 +729,7 @@
96e0061
     void* data,
96e0061
     struct zwp_primary_selection_device_v1* primary_selection_device,
96e0061
     struct zwp_primary_selection_offer_v1* primary_offer) {
96e0061
-  LOGCLIP(("primary_selection_selection() callback\n"));
96e0061
+  LOGCLIP(("primary_selection_selection()\n"));
96e0061
   nsRetrievalContextWayland* context =
96e0061
       static_cast<nsRetrievalContextWayland*>(data);
96e0061
   context->SetPrimaryDataOffer(primary_offer);
96e0061
@@ -803,17 +851,26 @@
96e0061
 
96e0061
 void nsRetrievalContextWayland::TransferFastTrackClipboard(
96e0061
     int aClipboardRequestNumber, GtkSelectionData* aSelectionData) {
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::TransferFastTrackClipboard()\n"));
96e0061
+
96e0061
   if (mClipboardRequestNumber == aClipboardRequestNumber) {
96e0061
+    LOGCLIP(("    request number matches\n"));
96e0061
     int dataLength = gtk_selection_data_get_length(aSelectionData);
96e0061
-    if (dataLength > 0) {
96e0061
-      mClipboardDataLength = dataLength;
96e0061
-      mClipboardData = reinterpret_cast<char*>(
96e0061
-          g_malloc(sizeof(char) * (mClipboardDataLength + 1)));
96e0061
-      memcpy(mClipboardData, gtk_selection_data_get_data(aSelectionData),
96e0061
-             sizeof(char) * mClipboardDataLength);
96e0061
-      mClipboardData[mClipboardDataLength] = '\0';
96e0061
+    if (!dataLength) {
96e0061
+      LOGCLIP(
96e0061
+          ("    gtk_selection_data_get_length() returned 0 data length!\n"));
96e0061
+      return;
96e0061
     }
96e0061
+    LOGCLIP(("    fastracking %d bytes of data.\n", dataLength));
96e0061
+    mClipboardDataLength = dataLength;
96e0061
+    mClipboardData = reinterpret_cast<char*>(
96e0061
+        g_malloc(sizeof(char) * (mClipboardDataLength + 1)));
96e0061
+    memcpy(mClipboardData, gtk_selection_data_get_data(aSelectionData),
96e0061
+           sizeof(char) * mClipboardDataLength);
96e0061
+    mClipboardData[mClipboardDataLength] = '\0';
96e0061
+    LOGCLIP(("    done, mClipboardData = %p\n", mClipboardData));
96e0061
   } else {
96e0061
+    LOGCLIP(("    request number does not match!\n"));
96e0061
     NS_WARNING("Received obsoleted clipboard data!");
96e0061
   }
96e0061
 }
96e0061
@@ -833,25 +890,29 @@
96e0061
    */
96e0061
   GdkAtom selection = GetSelectionAtom(aWhichClipboard);
96e0061
   if (gdk_selection_owner_get(selection)) {
96e0061
-    LOGCLIP(("  Internal clipboard content\n"));
96e0061
+    LOGCLIP(("  Asking for internal clipboard content.\n"));
96e0061
     mClipboardRequestNumber++;
96e0061
     gtk_clipboard_request_contents(
96e0061
         gtk_clipboard_get(selection), gdk_atom_intern(aMimeType, FALSE),
96e0061
         wayland_clipboard_contents_received,
96e0061
         new FastTrackClipboard(mClipboardRequestNumber, this));
96e0061
   } else {
96e0061
-    LOGCLIP(("  Remote clipboard content\n"));
96e0061
+    LOGCLIP(("  Asking for remote clipboard content.\n"));
96e0061
     const auto& dataOffer =
96e0061
         (selection == GDK_SELECTION_PRIMARY) ? mPrimaryOffer : mClipboardOffer;
96e0061
     if (!dataOffer) {
96e0061
       // Something went wrong. We're requested to provide clipboard data
96e0061
       // but we haven't got any from wayland.
96e0061
-      NS_WARNING("Requested data without valid DataOffer!");
96e0061
+      LOGCLIP(("  We're missing dataOffer! mClipboardData = null\n"));
96e0061
       mClipboardData = nullptr;
96e0061
       mClipboardDataLength = 0;
96e0061
     } else {
96e0061
+      LOGCLIP(
96e0061
+          ("  Getting clipboard data from compositor, MIME %s\n", aMimeType));
96e0061
       mClipboardData = dataOffer->GetData(mDisplay->GetDisplay(), aMimeType,
96e0061
                                           &mClipboardDataLength);
96e0061
+      LOGCLIP(("  Got %d bytes of data, mClipboardData = %p\n",
96e0061
+               mClipboardDataLength, mClipboardData));
96e0061
     }
96e0061
   }
96e0061
 
96e0061
@@ -861,25 +922,36 @@
96e0061
 
96e0061
 const char* nsRetrievalContextWayland::GetClipboardText(
96e0061
     int32_t aWhichClipboard) {
96e0061
-  LOGCLIP(("nsRetrievalContextWayland::GetClipboardText [%p]\n", this));
96e0061
+  GdkAtom selection = GetSelectionAtom(aWhichClipboard);
96e0061
 
96e0061
-  GdkAtom selection = GetSelectionAtom(aWhichClipboard);
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::GetClipboardText [%p], clipboard %s\n",
96e0061
+           this,
96e0061
+           (selection == GDK_SELECTION_PRIMARY) ? "Primary" : "Selection"));
96e0061
+
96e0061
   const auto& dataOffer =
96e0061
       (selection == GDK_SELECTION_PRIMARY) ? mPrimaryOffer : mClipboardOffer;
96e0061
-  if (!dataOffer) return nullptr;
96e0061
+  if (!dataOffer) {
96e0061
+    LOGCLIP(("  We're missing data offer!\n"));
96e0061
+    return nullptr;
96e0061
+  }
96e0061
 
96e0061
   for (unsigned int i = 0; i < TEXT_MIME_TYPES_NUM; i++) {
96e0061
     if (dataOffer->HasTarget(sTextMimeTypes[i])) {
96e0061
+      LOGCLIP(("  We have %s MIME type in clipboard, ask for it.\n",
96e0061
+               sTextMimeTypes[i]));
96e0061
       uint32_t unused;
96e0061
       return GetClipboardData(sTextMimeTypes[i], aWhichClipboard, &unused);
96e0061
     }
96e0061
   }
96e0061
+
96e0061
+  LOGCLIP(("  There isn't text MIME type in clipboard!\n"));
96e0061
   return nullptr;
96e0061
 }
96e0061
 
96e0061
 void nsRetrievalContextWayland::ReleaseClipboardData(
96e0061
     const char* aClipboardData) {
96e0061
-  LOGCLIP(("nsRetrievalContextWayland::ReleaseClipboardData [%p]\n", this));
96e0061
+  LOGCLIP(("nsRetrievalContextWayland::ReleaseClipboardData [%p]\n",
96e0061
+           aClipboardData));
96e0061
 
96e0061
   NS_ASSERTION(aClipboardData == mClipboardData,
96e0061
                "Releasing unknown clipboard data!");
96e0061