From abb8a45226f2fb8b9f92f442dc4ae14907b8558b Mon Sep 17 00:00:00 2001 From: Juanjo Diaz Date: Tue, 7 Jan 2020 15:12:59 +0100 Subject: [PATCH] Fix constructor for Firefox --- core/rfb.js | 7 ++++++- tests/test.clipboard.js | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/core/rfb.js b/core/rfb.js index 0c8408f0..e6f9e9ae 100644 --- a/core/rfb.js +++ b/core/rfb.js @@ -2235,7 +2235,12 @@ export default class RFB extends EventTargetMixin { if (Clipboard.isSupported) { const clipboardData = new DataTransfer(); clipboardData.setData("text/plain", text); - this._canvas.dispatchEvent(new ClipboardEvent('copy', { clipboardData })); + const clipboardEvent = new ClipboardEvent('paste', { clipboardData }); + // Force initialization since the constructor is broken in Firefox + if (!clipboardEvent.clipboardData.items.length) { + clipboardEvent.clipboardData.items.add(text, "text/plain"); + } + this._canvas.dispatchEvent(clipboardEvent); } } else { diff --git a/tests/test.clipboard.js b/tests/test.clipboard.js index ada9b8b6..2ef00574 100644 --- a/tests/test.clipboard.js +++ b/tests/test.clipboard.js @@ -31,7 +31,12 @@ describe('Automatic Clipboard Sync', function () { if (Clipboard.isSupported) { const clipboardData = new DataTransfer(); clipboardData.setData("text/plain", text); - clipboard._handleCopy(new ClipboardEvent('paste', { clipboardData })); + const clipboardEvent = new ClipboardEvent('paste', { clipboardData }); + // Force initialization since the constructor is broken in Firefox + if (!clipboardEvent.clipboardData.items.length) { + clipboardEvent.clipboardData.items.add(text, "text/plain"); + } + clipboard._handleCopy(clipboardEvent); if (navigator.clipboard.writeText) { expect(navigator.clipboard.writeText).to.have.been.calledWith(text); } @@ -45,7 +50,12 @@ describe('Automatic Clipboard Sync', function () { if (Clipboard.isSupported) { const clipboardData = new DataTransfer(); clipboardData.setData("text/plain", text); - clipboard._handlePaste(new ClipboardEvent('paste', { clipboardData })); + const clipboardEvent = new ClipboardEvent('paste', { clipboardData }); + // Force initialization since the constructor is broken in Firefox + if (!clipboardEvent.clipboardData.items.length) { + clipboardEvent.clipboardData.items.add(text, "text/plain"); + } + clipboard._handlePaste(clipboardEvent); if (navigator.clipboard.readText) { expect(navigator.clipboard.readText).to.have.been.called; }