Skip to content

Commit

Permalink
Drop support for Internet Explorer
Browse files Browse the repository at this point in the history
  • Loading branch information
CendioOssman committed Oct 15, 2020
1 parent 499eee4 commit c01eb5e
Show file tree
Hide file tree
Showing 11 changed files with 17 additions and 108 deletions.
2 changes: 0 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ jobs:
browser: Safari
- os: windows-latest
browser: EdgeHeadless
- os: windows-latest
browser: IE
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
aware of:

* Chrome 49, Firefox 44, Safari 11, Opera 36, IE 11, Edge 12
* Chrome 49, Firefox 44, Safari 11, Opera 36, Edge 12


### Server Requirements
Expand Down
4 changes: 2 additions & 2 deletions core/input/keyboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,9 @@ export default class Keyboard {

// If this is a legacy browser then we'll need to wait for
// a keypress event as well
// (IE and Edge has a broken KeyboardEvent.key, so we can't
// (Edge has a broken KeyboardEvent.key, so we can't
// just check for the presence of that field)
if (!keysym && (!e.key || browser.isIE() || browser.isEdge())) {
if (!keysym && (!e.key || browser.isEdge())) {
this._pendingKey = code;
// However we might not get a keypress event if the key
// is non-printable, which needs some special fallback
Expand Down
10 changes: 5 additions & 5 deletions core/input/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,15 @@ export function getKey(evt) {
return 'Delete';
}

// IE and Edge need special handling, but for everyone else we
// Edge need special handling, but for everyone else we
// can trust the value provided
if (!browser.isIE() && !browser.isEdge()) {
if (!browser.isEdge()) {
return evt.key;
}

// IE and Edge have broken handling of AltGraph so we can only
// trust them for non-printable characters (and unfortunately
// they also specify 'Unidentified' for some problem keys)
// 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;
}
Expand Down
4 changes: 0 additions & 4 deletions core/util/browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,6 @@ export function isSafari() {
navigator.userAgent.indexOf('Chrome') === -1);
}

export function isIE() {
return navigator && !!(/trident/i).exec(navigator.userAgent);
}

export function isEdge() {
return navigator && !!(/edge/i).exec(navigator.userAgent);
}
Expand Down
7 changes: 0 additions & 7 deletions tests/test.gesturehandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ const expect = chai.expect;
import EventTargetMixin from '../core/util/eventtarget.js';

import GestureHandler from '../core/input/gesturehandler.js';
import * as browser from '../core/util/browser.js';

class DummyTarget extends EventTargetMixin {
}
Expand All @@ -23,12 +22,6 @@ describe('Gesture handler', function () {
});

beforeEach(function () {
// Touch events and gestures are not supported on IE
if (browser.isIE()) {
this.skip();
return;
}

target = new DummyTarget();
gestures = sinon.spy();
target.addEventListener('gesturestart', gestures);
Expand Down
31 changes: 4 additions & 27 deletions tests/test.helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,6 @@ describe('Helpers', function () {
// environments, so we need to redefine it whilst running these
// tests.
origNavigator = Object.getOwnPropertyDescriptor(window, "navigator");
if (origNavigator === undefined) {
// Object.getOwnPropertyDescriptor() doesn't work
// properly in any version of IE
this.skip();
}

Object.defineProperty(window, "navigator", {value: {}});
if (window.navigator.platform !== undefined) {
Expand Down Expand Up @@ -102,7 +97,7 @@ describe('Helpers', function () {

describe('getKey', function () {
it('should prefer key', function () {
if (browser.isIE() || browser.isEdge()) this.skip();
if (browser.isEdge()) this.skip();
expect(KeyboardUtil.getKey({key: 'a', charCode: 'Š'.charCodeAt(), keyCode: 0x42, which: 0x43})).to.be.equal('a');
});
it('should map legacy values', function () {
Expand Down Expand Up @@ -131,18 +126,13 @@ describe('Helpers', function () {
expect(KeyboardUtil.getKey({keycode: 0x42})).to.be.equal('Unidentified');
});

describe('Broken key AltGraph on IE/Edge', function () {
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");
if (origNavigator === undefined) {
// Object.getOwnPropertyDescriptor() doesn't work
// properly in any version of IE
this.skip();
}

Object.defineProperty(window, "navigator", {value: {}});
if (window.navigator.platform !== undefined) {
Expand All @@ -157,27 +147,14 @@ describe('Helpers', function () {
}
});

it('should ignore printable character key on IE', function () {
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko";
expect(KeyboardUtil.getKey({key: 'a'})).to.be.equal('Unidentified');
});
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 IE', function () {
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko";
expect(KeyboardUtil.getKey({key: 'Shift'})).to.be.equal('Shift');
});
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 IE', function () {
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko";
expect(KeyboardUtil.getKey({key: 'a', charCode: 0x61})).to.be.equal('a');
expect(KeyboardUtil.getKey({key: 'Unidentified', charCode: 0x61})).to.be.equal('a');
});
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');
Expand Down Expand Up @@ -236,7 +213,7 @@ describe('Helpers', function () {

describe('Numpad', function () {
it('should handle Numpad numbers', function () {
if (browser.isIE() || browser.isEdge()) this.skip();
if (browser.isEdge()) this.skip();
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);
});
Expand All @@ -247,7 +224,7 @@ describe('Helpers', function () {
expect(KeyboardUtil.getKeysym({code: 'NumpadDecimal', key: 'Delete', location: 3})).to.be.equal(0xFF9F);
});
it('should handle Numpad Decimal key', function () {
if (browser.isIE() || browser.isEdge()) this.skip();
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(0xFFAC);
});
Expand Down
30 changes: 5 additions & 25 deletions tests/test.keyboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ describe('Key Event Handling', function () {

describe('Decode Keyboard Events', function () {
it('should decode keydown events', function (done) {
if (browser.isIE() || browser.isEdge()) this.skip();
if (browser.isEdge()) this.skip();
const kbd = new Keyboard(document);
kbd.onkeyevent = (keysym, code, down) => {
expect(keysym).to.be.equal(0x61);
Expand All @@ -31,7 +31,7 @@ describe('Key Event Handling', function () {
kbd._handleKeyDown(keyevent('keydown', {code: 'KeyA', key: 'a'}));
});
it('should decode keyup events', function (done) {
if (browser.isIE() || browser.isEdge()) this.skip();
if (browser.isEdge()) this.skip();
let calls = 0;
const kbd = new Keyboard(document);
kbd.onkeyevent = (keysym, code, down) => {
Expand Down Expand Up @@ -126,7 +126,7 @@ describe('Key Event Handling', function () {

describe('suppress the right events at the right time', function () {
beforeEach(function () {
if (browser.isIE() || browser.isEdge()) this.skip();
if (browser.isEdge()) this.skip();
});
it('should suppress anything with a valid key', function () {
const kbd = new Keyboard(document, {});
Expand Down Expand Up @@ -156,7 +156,7 @@ describe('Key Event Handling', function () {

describe('Fake keyup', function () {
it('should fake keyup events for virtual keyboards', function (done) {
if (browser.isIE() || browser.isEdge()) this.skip();
if (browser.isEdge()) this.skip();
let count = 0;
const kbd = new Keyboard(document);
kbd.onkeyevent = (keysym, code, down) => {
Expand All @@ -179,7 +179,7 @@ describe('Key Event Handling', function () {

describe('Track Key State', function () {
beforeEach(function () {
if (browser.isIE() || browser.isEdge()) this.skip();
if (browser.isEdge()) this.skip();
});
it('should send release using the same keysym as the press', function (done) {
const kbd = new Keyboard(document);
Expand Down Expand Up @@ -256,11 +256,6 @@ describe('Key Event Handling', function () {
// environments, so we need to redefine it whilst running these
// tests.
origNavigator = Object.getOwnPropertyDescriptor(window, "navigator");
if (origNavigator === undefined) {
// Object.getOwnPropertyDescriptor() doesn't work
// properly in any version of IE
this.skip();
}

Object.defineProperty(window, "navigator", {value: {}});
if (window.navigator.platform !== undefined) {
Expand Down Expand Up @@ -323,11 +318,6 @@ describe('Key Event Handling', function () {
// environments, so we need to redefine it whilst running these
// tests.
origNavigator = Object.getOwnPropertyDescriptor(window, "navigator");
if (origNavigator === undefined) {
// Object.getOwnPropertyDescriptor() doesn't work
// properly in any version of IE
this.skip();
}

Object.defineProperty(window, "navigator", {value: {}});
if (window.navigator.platform !== undefined) {
Expand Down Expand Up @@ -399,11 +389,6 @@ describe('Key Event Handling', function () {
// environments, so we need to redefine it whilst running these
// tests.
origNavigator = Object.getOwnPropertyDescriptor(window, "navigator");
if (origNavigator === undefined) {
// Object.getOwnPropertyDescriptor() doesn't work
// properly in any version of IE
this.skip();
}

Object.defineProperty(window, "navigator", {value: {}});
if (window.navigator.platform !== undefined) {
Expand Down Expand Up @@ -549,11 +534,6 @@ describe('Key Event Handling', function () {
// environments, so we need to redefine it whilst running these
// tests.
origNavigator = Object.getOwnPropertyDescriptor(window, "navigator");
if (origNavigator === undefined) {
// Object.getOwnPropertyDescriptor() doesn't work
// properly in any version of IE
this.skip();
}

Object.defineProperty(window, "navigator", {value: {}});
if (window.navigator.platform !== undefined) {
Expand Down
5 changes: 0 additions & 5 deletions tests/test.localization.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,6 @@ describe('Localization', function () {
// environments, so we need to redefine it whilst running these
// tests.
origNavigator = Object.getOwnPropertyDescriptor(window, "navigator");
if (origNavigator === undefined) {
// Object.getOwnPropertyDescriptor() doesn't work
// properly in any version of IE
this.skip();
}

Object.defineProperty(window, "navigator", {value: {}});
if (window.navigator.languages !== undefined) {
Expand Down
25 changes: 0 additions & 25 deletions tests/test.rfb.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,9 @@ import { encodings } from '../core/encodings.js';
import { toUnsigned32bit } from '../core/util/int.js';
import { encodeUTF8 } from '../core/util/strings.js';
import KeyTable from '../core/input/keysym.js';
import * as browser from '../core/util/browser.js';

import FakeWebSocket from './fake.websocket.js';

/* UIEvent constructor polyfill for IE */
(() => {
if (typeof window.UIEvent === "function") return;

function UIEvent( event, params ) {
params = params || { bubbles: false, cancelable: false, view: window, detail: undefined };
const evt = document.createEvent( 'UIEvent' );
evt.initUIEvent( event, params.bubbles, params.cancelable, params.view, params.detail );
return evt;
}

UIEvent.prototype = window.UIEvent.prototype;

window.UIEvent = UIEvent;
})();

function push8(arr, num) {
"use strict";
arr.push(num & 0xFF);
Expand Down Expand Up @@ -2938,14 +2921,6 @@ describe('Remote Frame Buffer Protocol Client', function () {
});

describe('Gesture event handlers', function () {
beforeEach(function () {
// Touch events and gestures are not supported on IE
if (browser.isIE()) {
this.skip();
return;
}
});

function gestureStart(gestureType, x, y,
magnitudeX = 0, magnitudeY = 0) {
let pos = elementToClient(x, y);
Expand Down
5 changes: 0 additions & 5 deletions tests/test.webutil.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@ describe('WebUtil', function () {
let origLocalStorage;
beforeEach(function () {
origLocalStorage = Object.getOwnPropertyDescriptor(window, "localStorage");
if (origLocalStorage === undefined) {
// Object.getOwnPropertyDescriptor() doesn't work
// properly in any version of IE
this.skip();
}

Object.defineProperty(window, "localStorage", {value: {}});
if (window.localStorage.setItem !== undefined) {
Expand Down

0 comments on commit c01eb5e

Please sign in to comment.