commit 5096c7c9bba153ee864c194652329f946491e4d7
parent 29e90175b7cfd49cc39655fd25db24c12c0cecb0
Author: Marco Bonardo <mbonardo@mozilla.com>
Date: Tue, 4 Nov 2025 12:49:14 +0000
Bug 1997805 - Avoid loading clipboard data to enable cmd_paste in the Downloads view. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D271066
Diffstat:
1 file changed, 14 insertions(+), 16 deletions(-)
diff --git a/browser/components/downloads/content/allDownloadsView.js b/browser/components/downloads/content/allDownloadsView.js
@@ -18,6 +18,8 @@ ChromeUtils.defineESModuleGetters(this, {
PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
});
+const CLIPBOARD_URL_FLAVORS = ["text/x-moz-url", "text/plain"];
+
/**
* A download element shell is responsible for handling the commands and the
* displayed data for a single download view element.
@@ -607,7 +609,11 @@ DownloadsPlacesView.prototype = {
case "cmd_selectAll":
return true;
case "cmd_paste":
- return this._canDownloadClipboardURL();
+ // We check later whether content is valid for pasting, or ignore it.
+ return Services.clipboard.hasDataMatchingFlavors(
+ CLIPBOARD_URL_FLAVORS,
+ Ci.nsIClipboard.kGlobalClipboard
+ );
case "downloadsCmd_clearDownloads":
return this.canClearDownloads(this._richlistbox);
default:
@@ -635,8 +641,7 @@ DownloadsPlacesView.prototype = {
);
trans.init(null);
- let flavors = ["text/x-moz-url", "text/plain"];
- flavors.forEach(trans.addDataFlavor);
+ CLIPBOARD_URL_FLAVORS.forEach(trans.addDataFlavor);
Services.clipboard.getData(trans, Services.clipboard.kGlobalClipboard);
@@ -655,18 +660,6 @@ DownloadsPlacesView.prototype = {
return ["", ""];
},
- _canDownloadClipboardURL() {
- let [url /* ,name */] = this._getURLFromClipboardData();
- return url != "";
- },
-
- _downloadURLFromClipboard() {
- let [url, name] = this._getURLFromClipboardData();
- let browserWin = BrowserWindowTracker.getTopWindow();
- let initiatingDoc = browserWin ? browserWin.document : document;
- DownloadURL(url, name, initiatingDoc);
- },
-
// nsIController
doCommand(aCommand) {
// Commands may be invoked with keyboard shortcuts even if disabled.
@@ -718,7 +711,12 @@ DownloadsPlacesView.prototype = {
},
cmd_paste() {
- this._downloadURLFromClipboard();
+ let [url, name] = this._getURLFromClipboardData();
+ if (url) {
+ let browserWin = BrowserWindowTracker.getTopWindow();
+ let initiatingDoc = browserWin ? browserWin.document : document;
+ DownloadURL(url, name, initiatingDoc);
+ }
},
downloadsCmd_clearDownloads() {