Drop support for legacy Edge
This commit is contained in:
parent
890cff921d
commit
dccf6facdc
|
@ -91,7 +91,7 @@ noVNC uses many modern web technologies so a formal requirement list is
|
||||||
not available. However these are the minimum versions we are currently
|
not available. However these are the minimum versions we are currently
|
||||||
aware of:
|
aware of:
|
||||||
|
|
||||||
* Chrome 49, Firefox 44, Safari 11, Opera 36, Edge 12
|
* Chrome 49, Firefox 44, Safari 11, Opera 36, Edge 79
|
||||||
|
|
||||||
|
|
||||||
### Server Requirements
|
### Server Requirements
|
||||||
|
|
|
@ -170,9 +170,7 @@ export default class Keyboard {
|
||||||
|
|
||||||
// If this is a legacy browser then we'll need to wait for
|
// If this is a legacy browser then we'll need to wait for
|
||||||
// a keypress event as well
|
// a keypress event as well
|
||||||
// (Edge has a broken KeyboardEvent.key, so we can't
|
if (!keysym && !e.key) {
|
||||||
// just check for the presence of that field)
|
|
||||||
if (!keysym && (!e.key || browser.isEdge())) {
|
|
||||||
this._pendingKey = code;
|
this._pendingKey = code;
|
||||||
// However we might not get a keypress event if the key
|
// However we might not get a keypress event if the key
|
||||||
// is non-printable, which needs some special fallback
|
// is non-printable, which needs some special fallback
|
||||||
|
|
|
@ -110,18 +110,7 @@ export function getKey(evt) {
|
||||||
return 'Delete';
|
return 'Delete';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Edge need special handling, but for everyone else we
|
return evt.key;
|
||||||
// can trust the value provided
|
|
||||||
if (!browser.isEdge()) {
|
|
||||||
return evt.key;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Edge has broken handling of AltGraph so we can only
|
|
||||||
// trust it for non-printable characters (and unfortunately
|
|
||||||
// is also specifies 'Unidentified' for some problem keys)
|
|
||||||
if ((evt.key.length !== 1) && (evt.key !== 'Unidentified')) {
|
|
||||||
return evt.key;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to deduce it based on the physical key
|
// Try to deduce it based on the physical key
|
||||||
|
|
|
@ -106,10 +106,6 @@ export function isSafari() {
|
||||||
navigator.userAgent.indexOf('Chrome') === -1);
|
navigator.userAgent.indexOf('Chrome') === -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isEdge() {
|
|
||||||
return navigator && !!(/edge/i).exec(navigator.userAgent);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function isFirefox() {
|
export function isFirefox() {
|
||||||
return navigator && !!(/firefox/i).exec(navigator.userAgent);
|
return navigator && !!(/firefox/i).exec(navigator.userAgent);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
import keysyms from '../core/input/keysymdef.js';
|
import keysyms from '../core/input/keysymdef.js';
|
||||||
import * as KeyboardUtil from "../core/input/util.js";
|
import * as KeyboardUtil from "../core/input/util.js";
|
||||||
import * as browser from '../core/util/browser.js';
|
|
||||||
|
|
||||||
describe('Helpers', function () {
|
describe('Helpers', function () {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
@ -97,7 +96,6 @@ describe('Helpers', function () {
|
||||||
|
|
||||||
describe('getKey', function () {
|
describe('getKey', function () {
|
||||||
it('should prefer key', function () {
|
it('should prefer key', function () {
|
||||||
if (browser.isEdge()) this.skip();
|
|
||||||
expect(KeyboardUtil.getKey({key: 'a', charCode: 'Š'.charCodeAt(), keyCode: 0x42, which: 0x43})).to.be.equal('a');
|
expect(KeyboardUtil.getKey({key: 'a', charCode: 'Š'.charCodeAt(), keyCode: 0x42, which: 0x43})).to.be.equal('a');
|
||||||
});
|
});
|
||||||
it('should map legacy values', function () {
|
it('should map legacy values', function () {
|
||||||
|
@ -125,42 +123,6 @@ describe('Helpers', function () {
|
||||||
it('should return Unidentified when it cannot map the key', function () {
|
it('should return Unidentified when it cannot map the key', function () {
|
||||||
expect(KeyboardUtil.getKey({keycode: 0x42})).to.be.equal('Unidentified');
|
expect(KeyboardUtil.getKey({keycode: 0x42})).to.be.equal('Unidentified');
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Broken key AltGraph on Edge', function () {
|
|
||||||
let origNavigator;
|
|
||||||
beforeEach(function () {
|
|
||||||
// window.navigator is a protected read-only property in many
|
|
||||||
// environments, so we need to redefine it whilst running these
|
|
||||||
// tests.
|
|
||||||
origNavigator = Object.getOwnPropertyDescriptor(window, "navigator");
|
|
||||||
|
|
||||||
Object.defineProperty(window, "navigator", {value: {}});
|
|
||||||
if (window.navigator.platform !== undefined) {
|
|
||||||
// Object.defineProperty() doesn't work properly in old
|
|
||||||
// versions of Chrome
|
|
||||||
this.skip();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
afterEach(function () {
|
|
||||||
if (origNavigator !== undefined) {
|
|
||||||
Object.defineProperty(window, "navigator", origNavigator);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should ignore printable character key on Edge', function () {
|
|
||||||
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";
|
|
||||||
expect(KeyboardUtil.getKey({key: 'a'})).to.be.equal('Unidentified');
|
|
||||||
});
|
|
||||||
it('should allow non-printable character key on Edge', function () {
|
|
||||||
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";
|
|
||||||
expect(KeyboardUtil.getKey({key: 'Shift'})).to.be.equal('Shift');
|
|
||||||
});
|
|
||||||
it('should allow printable character key with charCode on Edge', function () {
|
|
||||||
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";
|
|
||||||
expect(KeyboardUtil.getKey({key: 'a', charCode: 0x61})).to.be.equal('a');
|
|
||||||
expect(KeyboardUtil.getKey({key: 'Unidentified', charCode: 0x61})).to.be.equal('a');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getKeysym', function () {
|
describe('getKeysym', function () {
|
||||||
|
@ -213,7 +175,6 @@ describe('Helpers', function () {
|
||||||
|
|
||||||
describe('Numpad', function () {
|
describe('Numpad', function () {
|
||||||
it('should handle Numpad numbers', function () {
|
it('should handle Numpad numbers', function () {
|
||||||
if (browser.isEdge()) this.skip();
|
|
||||||
expect(KeyboardUtil.getKeysym({code: 'Digit5', key: '5', location: 0})).to.be.equal(0x0035);
|
expect(KeyboardUtil.getKeysym({code: 'Digit5', key: '5', location: 0})).to.be.equal(0x0035);
|
||||||
expect(KeyboardUtil.getKeysym({code: 'Numpad5', key: '5', location: 3})).to.be.equal(0xFFB5);
|
expect(KeyboardUtil.getKeysym({code: 'Numpad5', key: '5', location: 3})).to.be.equal(0xFFB5);
|
||||||
});
|
});
|
||||||
|
@ -224,7 +185,6 @@ describe('Helpers', function () {
|
||||||
expect(KeyboardUtil.getKeysym({code: 'NumpadDecimal', key: 'Delete', location: 3})).to.be.equal(0xFF9F);
|
expect(KeyboardUtil.getKeysym({code: 'NumpadDecimal', key: 'Delete', location: 3})).to.be.equal(0xFF9F);
|
||||||
});
|
});
|
||||||
it('should handle Numpad Decimal key', function () {
|
it('should handle Numpad Decimal key', function () {
|
||||||
if (browser.isEdge()) this.skip();
|
|
||||||
expect(KeyboardUtil.getKeysym({code: 'NumpadDecimal', key: '.', location: 3})).to.be.equal(0xFFAE);
|
expect(KeyboardUtil.getKeysym({code: 'NumpadDecimal', key: '.', location: 3})).to.be.equal(0xFFAE);
|
||||||
expect(KeyboardUtil.getKeysym({code: 'NumpadDecimal', key: ',', location: 3})).to.be.equal(0xFFAC);
|
expect(KeyboardUtil.getKeysym({code: 'NumpadDecimal', key: ',', location: 3})).to.be.equal(0xFFAC);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
|
|
||||||
import Keyboard from '../core/input/keyboard.js';
|
import Keyboard from '../core/input/keyboard.js';
|
||||||
import * as browser from '../core/util/browser.js';
|
|
||||||
|
|
||||||
describe('Key Event Handling', function () {
|
describe('Key Event Handling', function () {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
@ -20,7 +19,6 @@ describe('Key Event Handling', function () {
|
||||||
|
|
||||||
describe('Decode Keyboard Events', function () {
|
describe('Decode Keyboard Events', function () {
|
||||||
it('should decode keydown events', function (done) {
|
it('should decode keydown events', function (done) {
|
||||||
if (browser.isEdge()) this.skip();
|
|
||||||
const kbd = new Keyboard(document);
|
const kbd = new Keyboard(document);
|
||||||
kbd.onkeyevent = (keysym, code, down) => {
|
kbd.onkeyevent = (keysym, code, down) => {
|
||||||
expect(keysym).to.be.equal(0x61);
|
expect(keysym).to.be.equal(0x61);
|
||||||
|
@ -31,7 +29,6 @@ describe('Key Event Handling', function () {
|
||||||
kbd._handleKeyDown(keyevent('keydown', {code: 'KeyA', key: 'a'}));
|
kbd._handleKeyDown(keyevent('keydown', {code: 'KeyA', key: 'a'}));
|
||||||
});
|
});
|
||||||
it('should decode keyup events', function (done) {
|
it('should decode keyup events', function (done) {
|
||||||
if (browser.isEdge()) this.skip();
|
|
||||||
let calls = 0;
|
let calls = 0;
|
||||||
const kbd = new Keyboard(document);
|
const kbd = new Keyboard(document);
|
||||||
kbd.onkeyevent = (keysym, code, down) => {
|
kbd.onkeyevent = (keysym, code, down) => {
|
||||||
|
@ -125,9 +122,6 @@ describe('Key Event Handling', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('suppress the right events at the right time', function () {
|
describe('suppress the right events at the right time', function () {
|
||||||
beforeEach(function () {
|
|
||||||
if (browser.isEdge()) this.skip();
|
|
||||||
});
|
|
||||||
it('should suppress anything with a valid key', function () {
|
it('should suppress anything with a valid key', function () {
|
||||||
const kbd = new Keyboard(document, {});
|
const kbd = new Keyboard(document, {});
|
||||||
const evt1 = keyevent('keydown', {code: 'KeyA', key: 'a'});
|
const evt1 = keyevent('keydown', {code: 'KeyA', key: 'a'});
|
||||||
|
@ -156,7 +150,6 @@ describe('Key Event Handling', function () {
|
||||||
|
|
||||||
describe('Fake keyup', function () {
|
describe('Fake keyup', function () {
|
||||||
it('should fake keyup events for virtual keyboards', function (done) {
|
it('should fake keyup events for virtual keyboards', function (done) {
|
||||||
if (browser.isEdge()) this.skip();
|
|
||||||
let count = 0;
|
let count = 0;
|
||||||
const kbd = new Keyboard(document);
|
const kbd = new Keyboard(document);
|
||||||
kbd.onkeyevent = (keysym, code, down) => {
|
kbd.onkeyevent = (keysym, code, down) => {
|
||||||
|
@ -178,9 +171,6 @@ describe('Key Event Handling', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Track Key State', function () {
|
describe('Track Key State', function () {
|
||||||
beforeEach(function () {
|
|
||||||
if (browser.isEdge()) this.skip();
|
|
||||||
});
|
|
||||||
it('should send release using the same keysym as the press', function (done) {
|
it('should send release using the same keysym as the press', function (done) {
|
||||||
const kbd = new Keyboard(document);
|
const kbd = new Keyboard(document);
|
||||||
kbd.onkeyevent = (keysym, code, down) => {
|
kbd.onkeyevent = (keysym, code, down) => {
|
||||||
|
|
Loading…
Reference in New Issue