From 28b4962f843e459de172316740f6b5aab8177139 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 e32f351a..dcb302ec 100644 --- a/core/rfb.js +++ b/core/rfb.js @@ -2204,7 +2204,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; }