Remove createEvent() fallbacks

We can now rely on proper constructors for our events.
This commit is contained in:
Pierre Ossman 2020-12-04 17:03:57 +01:00
parent 27496941a0
commit 6a4c411976
4 changed files with 23 additions and 94 deletions

View File

@ -25,7 +25,6 @@ import DES from "./des.js";
import KeyTable from "./input/keysym.js"; import KeyTable from "./input/keysym.js";
import XtScancode from "./input/xtscancodes.js"; import XtScancode from "./input/xtscancodes.js";
import { encodings } from "./encodings.js"; import { encodings } from "./encodings.js";
import "./util/polyfill.js";
import RawDecoder from "./decoders/raw.js"; import RawDecoder from "./decoders/raw.js";
import CopyRectDecoder from "./decoders/copyrect.js"; import CopyRectDecoder from "./decoders/copyrect.js";

View File

@ -1,23 +0,0 @@
/*
* noVNC: HTML5 VNC client
* Copyright (C) 2020 The noVNC Authors
* Licensed under MPL 2.0 or any later version (see LICENSE.txt)
*/
/* Polyfills to provide new APIs in old browsers */
/* CustomEvent constructor (taken from MDN) */
(() => {
function CustomEvent(event, params) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
const evt = document.createEvent( 'CustomEvent' );
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
}
CustomEvent.prototype = window.Event.prototype;
if (typeof window.CustomEvent !== "function") {
window.CustomEvent = CustomEvent;
}
})();

View File

@ -1,17 +1,5 @@
import Base64 from '../core/base64.js'; import Base64 from '../core/base64.js';
// PhantomJS can't create Event objects directly, so we need to use this
function makeEvent(name, props) {
const evt = document.createEvent('Event');
evt.initEvent(name, true, true);
if (props) {
for (let prop in props) {
evt[prop] = props[prop];
}
}
return evt;
}
export default class FakeWebSocket { export default class FakeWebSocket {
constructor(uri, protocols) { constructor(uri, protocols) {
this.url = uri; this.url = uri;
@ -35,7 +23,7 @@ export default class FakeWebSocket {
close(code, reason) { close(code, reason) {
this.readyState = FakeWebSocket.CLOSED; this.readyState = FakeWebSocket.CLOSED;
if (this.onclose) { if (this.onclose) {
this.onclose(makeEvent("close", { 'code': code, 'reason': reason, 'wasClean': true })); this.onclose(new CloseEvent("close", { 'code': code, 'reason': reason, 'wasClean': true }));
} }
} }
@ -58,7 +46,7 @@ export default class FakeWebSocket {
_open() { _open() {
this.readyState = FakeWebSocket.OPEN; this.readyState = FakeWebSocket.OPEN;
if (this.onopen) { if (this.onopen) {
this.onopen(makeEvent('open')); this.onopen(new Event('open'));
} }
} }
@ -67,7 +55,7 @@ export default class FakeWebSocket {
// neatly packaged // neatly packaged
for (let i = 0;i < data.length;i++) { for (let i = 0;i < data.length;i++) {
let buf = data.subarray(i, i+1); let buf = data.subarray(i, i+1);
this.onmessage(makeEvent("message", { 'data': buf })); this.onmessage(new MessageEvent("message", { 'data': buf }));
} }
} }
} }

View File

@ -2506,23 +2506,11 @@ describe('Remote Frame Buffer Protocol Client', function () {
let pos = elementToClient(x, y); let pos = elementToClient(x, y);
let ev; let ev;
try { ev = new MouseEvent('mousemove',
ev = new MouseEvent('mousemove', { 'screenX': pos.x + window.screenX,
{ 'screenX': pos.x + window.screenX, 'screenY': pos.y + window.screenY,
'screenY': pos.y + window.screenY, 'clientX': pos.x,
'clientX': pos.x, 'clientY': pos.y });
'clientY': pos.y });
} catch (e) {
ev = document.createEvent('MouseEvent');
ev.initMouseEvent('mousemove',
true, true, window, 0,
pos.x + window.screenX,
pos.y + window.screenY,
pos.x, pos.y,
false, false, false, false,
0, null);
}
client._canvas.dispatchEvent(ev); client._canvas.dispatchEvent(ev);
} }
@ -2530,25 +2518,13 @@ describe('Remote Frame Buffer Protocol Client', function () {
let pos = elementToClient(x, y); let pos = elementToClient(x, y);
let ev; let ev;
try { ev = new MouseEvent(down ? 'mousedown' : 'mouseup',
ev = new MouseEvent(down ? 'mousedown' : 'mouseup', { 'screenX': pos.x + window.screenX,
{ 'screenX': pos.x + window.screenX, 'screenY': pos.y + window.screenY,
'screenY': pos.y + window.screenY, 'clientX': pos.x,
'clientX': pos.x, 'clientY': pos.y,
'clientY': pos.y, 'button': button,
'button': button, 'buttons': 1 << button });
'buttons': 1 << button });
} catch (e) {
ev = document.createEvent('MouseEvent');
ev.initMouseEvent(down ? 'mousedown' : 'mouseup',
true, true, window, 0,
pos.x + window.screenX,
pos.y + window.screenY,
pos.x, pos.y,
false, false, false, false,
button, null);
}
client._canvas.dispatchEvent(ev); client._canvas.dispatchEvent(ev);
} }
@ -2783,25 +2759,14 @@ describe('Remote Frame Buffer Protocol Client', function () {
let pos = elementToClient(x, y); let pos = elementToClient(x, y);
let ev; let ev;
try { ev = new WheelEvent('wheel',
ev = new WheelEvent('wheel', { 'screenX': pos.x + window.screenX,
{ 'screenX': pos.x + window.screenX, 'screenY': pos.y + window.screenY,
'screenY': pos.y + window.screenY, 'clientX': pos.x,
'clientX': pos.x, 'clientY': pos.y,
'clientY': pos.y, 'deltaX': dx,
'deltaX': dx, 'deltaY': dy,
'deltaY': dy, 'deltaMode': mode });
'deltaMode': mode });
} catch (e) {
ev = document.createEvent('WheelEvent');
ev.initWheelEvent('wheel', true, true, window, 0,
pos.x + window.screenX,
pos.y + window.screenY,
pos.x, pos.y,
0, null, "",
dx, dy, 0, mode);
}
client._canvas.dispatchEvent(ev); client._canvas.dispatchEvent(ev);
} }