diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /dom/presentation/tests/xpcshell/test_presentation_device_manager.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'dom/presentation/tests/xpcshell/test_presentation_device_manager.js')
-rw-r--r-- | dom/presentation/tests/xpcshell/test_presentation_device_manager.js | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/dom/presentation/tests/xpcshell/test_presentation_device_manager.js b/dom/presentation/tests/xpcshell/test_presentation_device_manager.js new file mode 100644 index 000000000..68f07df65 --- /dev/null +++ b/dom/presentation/tests/xpcshell/test_presentation_device_manager.js @@ -0,0 +1,244 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +'use strict'; + +const { classes: Cc, interfaces: Ci, utils: Cu } = Components; + +Cu.import('resource://gre/modules/XPCOMUtils.jsm'); +Cu.import('resource://gre/modules/Services.jsm'); + +const manager = Cc['@mozilla.org/presentation-device/manager;1'] + .getService(Ci.nsIPresentationDeviceManager); + +function TestPresentationDevice() {} + + +function TestPresentationControlChannel() {} + +TestPresentationControlChannel.prototype = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsIPresentationControlChannel]), + sendOffer: function(offer) {}, + sendAnswer: function(answer) {}, + disconnect: function() {}, + launch: function() {}, + terminate: function() {}, + reconnect: function() {}, + set listener(listener) {}, + get listener() {}, +}; + +var testProvider = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsIPresentationDeviceProvider]), + + forceDiscovery: function() { + }, + set listener(listener) { + }, + get listener() { + }, +}; + +const forbiddenRequestedUrl = 'http://example.com'; +var testDevice = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsIPresentationDevice]), + id: 'id', + name: 'name', + type: 'type', + establishControlChannel: function(url, presentationId) { + return null; + }, + disconnect: function() {}, + isRequestedUrlSupported: function(requestedUrl) { + return forbiddenRequestedUrl !== requestedUrl; + }, +}; + +function addProvider() { + Object.defineProperty(testProvider, 'listener', { + configurable: true, + set: function(listener) { + Assert.strictEqual(listener, manager, 'listener setter is invoked by PresentationDeviceManager'); + delete testProvider.listener; + run_next_test(); + }, + }); + manager.addDeviceProvider(testProvider); +} + +function forceDiscovery() { + testProvider.forceDiscovery = function() { + testProvider.forceDiscovery = function() {}; + Assert.ok(true, 'forceDiscovery is invoked by PresentationDeviceManager'); + run_next_test(); + }; + manager.forceDiscovery(); +} + +function addDevice() { + Services.obs.addObserver(function observer(subject, topic, data) { + Services.obs.removeObserver(observer, topic); + + let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice); + Assert.equal(updatedDevice.id, testDevice.id, 'expected device id'); + Assert.equal(updatedDevice.name, testDevice.name, 'expected device name'); + Assert.equal(updatedDevice.type, testDevice.type, 'expected device type'); + Assert.equal(data, 'add', 'expected update type'); + + Assert.ok(manager.deviceAvailable, 'device is available'); + + let devices = manager.getAvailableDevices(); + Assert.equal(devices.length, 1, 'expect 1 available device'); + + let device = devices.queryElementAt(0, Ci.nsIPresentationDevice); + Assert.equal(device.id, testDevice.id, 'expected device id'); + Assert.equal(device.name, testDevice.name, 'expected device name'); + Assert.equal(device.type, testDevice.type, 'expected device type'); + + run_next_test(); + }, 'presentation-device-change', false); + manager.QueryInterface(Ci.nsIPresentationDeviceListener).addDevice(testDevice); +} + +function updateDevice() { + Services.obs.addObserver(function observer(subject, topic, data) { + Services.obs.removeObserver(observer, topic); + + let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice); + Assert.equal(updatedDevice.id, testDevice.id, 'expected device id'); + Assert.equal(updatedDevice.name, testDevice.name, 'expected device name'); + Assert.equal(updatedDevice.type, testDevice.type, 'expected device type'); + Assert.equal(data, 'update', 'expected update type'); + + Assert.ok(manager.deviceAvailable, 'device is available'); + + let devices = manager.getAvailableDevices(); + Assert.equal(devices.length, 1, 'expect 1 available device'); + + let device = devices.queryElementAt(0, Ci.nsIPresentationDevice); + Assert.equal(device.id, testDevice.id, 'expected device id'); + Assert.equal(device.name, testDevice.name, 'expected name after device update'); + Assert.equal(device.type, testDevice.type, 'expected device type'); + + run_next_test(); + }, 'presentation-device-change', false); + testDevice.name = 'updated-name'; + manager.QueryInterface(Ci.nsIPresentationDeviceListener).updateDevice(testDevice); +} + +function filterDevice() { + let presentationUrls = Cc['@mozilla.org/array;1'].createInstance(Ci.nsIMutableArray); + let url = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); + url.data = forbiddenRequestedUrl; + presentationUrls.appendElement(url, false); + let devices = manager.getAvailableDevices(presentationUrls); + Assert.equal(devices.length, 0, 'expect 0 available device for example.com'); + run_next_test(); +} + +function sessionRequest() { + let testUrl = 'http://www.example.org/'; + let testPresentationId = 'test-presentation-id'; + let testControlChannel = new TestPresentationControlChannel(); + Services.obs.addObserver(function observer(subject, topic, data) { + Services.obs.removeObserver(observer, topic); + + let request = subject.QueryInterface(Ci.nsIPresentationSessionRequest); + + Assert.equal(request.device.id, testDevice.id, 'expected device'); + Assert.equal(request.url, testUrl, 'expected requesting URL'); + Assert.equal(request.presentationId, testPresentationId, 'expected presentation Id'); + + run_next_test(); + }, 'presentation-session-request', false); + manager.QueryInterface(Ci.nsIPresentationDeviceListener) + .onSessionRequest(testDevice, testUrl, testPresentationId, testControlChannel); +} + +function terminateRequest() { + let testUrl = 'http://www.example.org/'; + let testPresentationId = 'test-presentation-id'; + let testControlChannel = new TestPresentationControlChannel(); + let testIsFromReceiver = true; + Services.obs.addObserver(function observer(subject, topic, data) { + Services.obs.removeObserver(observer, topic); + + let request = subject.QueryInterface(Ci.nsIPresentationTerminateRequest); + + Assert.equal(request.device.id, testDevice.id, 'expected device'); + Assert.equal(request.presentationId, testPresentationId, 'expected presentation Id'); + Assert.equal(request.isFromReceiver, testIsFromReceiver, 'expected isFromReceiver'); + + run_next_test(); + }, 'presentation-terminate-request', false); + manager.QueryInterface(Ci.nsIPresentationDeviceListener) + .onTerminateRequest(testDevice, testPresentationId, + testControlChannel, testIsFromReceiver); +} + +function reconnectRequest() { + let testUrl = 'http://www.example.org/'; + let testPresentationId = 'test-presentation-id'; + let testControlChannel = new TestPresentationControlChannel(); + Services.obs.addObserver(function observer(subject, topic, data) { + Services.obs.removeObserver(observer, topic); + + let request = subject.QueryInterface(Ci.nsIPresentationSessionRequest); + + Assert.equal(request.device.id, testDevice.id, 'expected device'); + Assert.equal(request.url, testUrl, 'expected requesting URL'); + Assert.equal(request.presentationId, testPresentationId, 'expected presentation Id'); + + run_next_test(); + }, 'presentation-reconnect-request', false); + manager.QueryInterface(Ci.nsIPresentationDeviceListener) + .onReconnectRequest(testDevice, testUrl, testPresentationId, testControlChannel); +} + +function removeDevice() { + Services.obs.addObserver(function observer(subject, topic, data) { + Services.obs.removeObserver(observer, topic); + + let updatedDevice = subject.QueryInterface(Ci.nsIPresentationDevice); + Assert.equal(updatedDevice.id, testDevice.id, 'expected device id'); + Assert.equal(updatedDevice.name, testDevice.name, 'expected device name'); + Assert.equal(updatedDevice.type, testDevice.type, 'expected device type'); + Assert.equal(data, 'remove', 'expected update type'); + + Assert.ok(!manager.deviceAvailable, 'device is not available'); + + let devices = manager.getAvailableDevices(); + Assert.equal(devices.length, 0, 'expect 0 available device'); + + run_next_test(); + }, 'presentation-device-change', false); + manager.QueryInterface(Ci.nsIPresentationDeviceListener).removeDevice(testDevice); +} + +function removeProvider() { + Object.defineProperty(testProvider, 'listener', { + configurable: true, + set: function(listener) { + Assert.strictEqual(listener, null, 'unsetListener is invoked by PresentationDeviceManager'); + delete testProvider.listener; + run_next_test(); + }, + }); + manager.removeDeviceProvider(testProvider); +} + +add_test(addProvider); +add_test(forceDiscovery); +add_test(addDevice); +add_test(updateDevice); +add_test(filterDevice); +add_test(sessionRequest); +add_test(terminateRequest); +add_test(reconnectRequest); +add_test(removeDevice); +add_test(removeProvider); + +function run_test() { + run_next_test(); +} |