commit 6a0e69a1962375cdf7590c4c18359a77c67b32bd parent 41d9f4f9768ccd7bc2ac2de9da6f3e499c5c6640 Author: Atila Butkovits <abutkovits@mozilla.com> Date: Thu, 20 Nov 2025 16:35:37 +0200 Revert "Bug 1993095. Don't include "application/x-moz-file" in types. r=tschuster" for causing Bug 2001332. This reverts commit 49beffa1c06658c2098602c62e68fb6697c6439a. Diffstat:
6 files changed, 34 insertions(+), 14 deletions(-)
diff --git a/browser/base/content/test/general/browser_clipboard_pastefile.js b/browser/base/content/test/general/browser_clipboard_pastefile.js @@ -78,9 +78,13 @@ add_task(async function () { "paste", function (event) { let dt = event.clipboardData; - is(dt.types.length, 2, "number of types"); + is(dt.types.length, 3, "number of types"); ok(dt.types.includes("text/plain"), "text/plain exists in types"); - is(dt.types[1], "Files", "Last type should be 'Files'"); + ok( + dt.types.includes("application/x-moz-file"), + "application/x-moz-file exists in types" + ); + is(dt.types[2], "Files", "Last type should be 'Files'"); ok( dt.mozTypesAt(0).contains("text/plain"), "text/plain exists in mozTypesAt" diff --git a/browser/base/content/test/general/clipboard_pastefile.html b/browser/base/content/test/general/clipboard_pastefile.html @@ -22,9 +22,11 @@ function is(a, b, msg) { async function checkPasteHelper(event) { let dt = event.clipboardData; - is(dt.types.length, 1, "Correct number of types"); + is(dt.types.length, 2, "Correct number of types"); - is(dt.types[0], "Files", "Last type must be Files"); + // TODO: Remove application/x-moz-file from content. + is(dt.types[0], "application/x-moz-file", "First type") + is(dt.types[1], "Files", "Last type must be Files"); is(dt.getData("text/plain"), "", "text/plain found with getData"); is(dt.getData("application/x-moz-file"), "", "application/x-moz-file found with getData"); diff --git a/dom/events/DataTransferItemList.cpp b/dom/events/DataTransferItemList.cpp @@ -450,9 +450,13 @@ void DataTransferItemList::GetTypes(nsTArray<nsString>& aTypes, continue; } - if (item->Kind() != DataTransferItem::KIND_FILE) { - nsAutoString type; - item->GetType(type); + // NOTE: The reason why we get the internal type here is because we want + // kFileMime to appear in the types list for backwards compatibility + // reasons. + nsAutoString type; + item->GetInternalType(type); + if (item->Kind() != DataTransferItem::KIND_FILE || + type.EqualsASCII(kFileMime)) { aTypes.AppendElement(type); } } diff --git a/dom/events/test/clipboard/test_paste_image.html b/dom/events/test/clipboard/test_paste_image.html @@ -107,7 +107,7 @@ window.addEventListener("paste", async (e) => { isDeeply(e.clipboardData.types, (navigator.platform.includes("Win") && imageAsFileEnabled) ? - ["Files"] : ["text/html", "text/plain", "Files"]); + ["application/x-moz-file", "Files"] : ["text/html", "text/plain", "Files"]); await onPaste(e, imageAsFileEnabled); resolve(); }, { once: true }); diff --git a/toolkit/components/contentanalysis/tests/browser/browser_clipboard_paste_file_content_analysis.js b/toolkit/components/contentanalysis/tests/browser/browser_clipboard_paste_file_content_analysis.js @@ -182,9 +182,13 @@ async function testClipboardPasteFileWithContentAnalysis(allowPaste) { "paste", function (event) { let dt = event.clipboardData; - is(dt.types.length, 2, "number of types"); + is(dt.types.length, 3, "number of types"); ok(dt.types.includes("text/plain"), "text/plain exists in types"); - is(dt.types[1], "Files", "Last type should be 'Files'"); + ok( + dt.types.includes("application/x-moz-file"), + "application/x-moz-file exists in types" + ); + is(dt.types[2], "Files", "Last type should be 'Files'"); ok( dt.mozTypesAt(0).contains("text/plain"), "text/plain exists in mozTypesAt" @@ -343,9 +347,13 @@ async function testClipboardPasteDirectoryWithContentAnalysis(allowPaste) { "paste", function (event) { let dt = event.clipboardData; - is(dt.types.length, 2, "number of types"); + is(dt.types.length, 3, "number of types"); ok(dt.types.includes("text/plain"), "text/plain exists in types"); - is(dt.types[1], "Files", "Last type should be 'Files'"); + ok( + dt.types.includes("application/x-moz-file"), + "application/x-moz-file exists in types" + ); + is(dt.types[2], "Files", "Last type should be 'Files'"); ok( dt.mozTypesAt(0).contains("text/plain"), "text/plain exists in mozTypesAt" diff --git a/toolkit/components/contentanalysis/tests/browser/clipboard_paste_file.html b/toolkit/components/contentanalysis/tests/browser/clipboard_paste_file.html @@ -25,10 +25,12 @@ async function checkPasteHelper(event) { let filePasteAllowed = document.getElementById("pasteAllowed").checked; let pasteIsDir = document.getElementById("pasteIsDir").checked; - is(dt.types.length, filePasteAllowed ? 1 : 0, "Correct number of types"); + is(dt.types.length, filePasteAllowed ? 2 : 0, "Correct number of types"); if (filePasteAllowed) { - is(dt.types[0], "Files", "Last type must be Files"); + // TODO: Remove application/x-moz-file from content. + is(dt.types[0], "application/x-moz-file", "First type") + is(dt.types[1], "Files", "Last type must be Files"); } is(dt.getData("text/plain"), "", "text/plain found with getData");