mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-18 13:17:29 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
|
|
@ -0,0 +1,236 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
- http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for PresentationAvailability</title>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1228508">Test PresentationAvailability</a>
|
||||
<script type="application/javascript;version=1.8">
|
||||
|
||||
"use strict";
|
||||
|
||||
var testDevice = {
|
||||
id: 'id',
|
||||
name: 'name',
|
||||
type: 'type',
|
||||
};
|
||||
|
||||
var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationDeviceInfoChromeScript.js'));
|
||||
var request;
|
||||
var availability;
|
||||
|
||||
function testSetup() {
|
||||
return new Promise(function(aResolve, aReject) {
|
||||
gScript.addMessageListener('setup-complete', function() {
|
||||
aResolve();
|
||||
});
|
||||
gScript.sendAsyncMessage('setup');
|
||||
});
|
||||
}
|
||||
|
||||
function testInitialUnavailable() {
|
||||
request = new PresentationRequest("https://example.com");
|
||||
|
||||
return request.getAvailability().then(function(aAvailability) {
|
||||
is(aAvailability.value, false, "Should have no available device after setup");
|
||||
aAvailability.onchange = function() {
|
||||
aAvailability.onchange = null;
|
||||
ok(aAvailability.value, "Device should be available.");
|
||||
}
|
||||
availability = aAvailability;
|
||||
gScript.sendAsyncMessage('trigger-device-add', testDevice);
|
||||
}).catch(function(aError) {
|
||||
ok(false, "Error occurred when getting availability: " + aError);
|
||||
teardown();
|
||||
});
|
||||
}
|
||||
|
||||
function testInitialAvailable() {
|
||||
let anotherRequest = new PresentationRequest("https://example.net");
|
||||
return anotherRequest.getAvailability().then(function(aAvailability) {
|
||||
is(aAvailability.value, true, "Should have available device initially");
|
||||
isnot(aAvailability, availability, "Should get different availability object for different request URL");
|
||||
}).catch(function(aError) {
|
||||
ok(false, "Error occurred when getting availability: " + aError);
|
||||
teardown();
|
||||
});
|
||||
}
|
||||
|
||||
function testSameObject() {
|
||||
let sameUrlRequest = new PresentationRequest("https://example.com");
|
||||
return sameUrlRequest.getAvailability().then(function(aAvailability) {
|
||||
is(aAvailability, availability, "Should get same availability object for same request URL");
|
||||
}).catch(function(aError) {
|
||||
ok(false, "Error occurred when getting availability: " + aError);
|
||||
teardown();
|
||||
});
|
||||
}
|
||||
|
||||
function testOnChangeEvent() {
|
||||
return new Promise(function(aResolve, aReject) {
|
||||
availability.onchange = function() {
|
||||
availability.onchange = null;
|
||||
is(availability.value, false, "Should have no available device after device removed");
|
||||
aResolve();
|
||||
}
|
||||
gScript.sendAsyncMessage('trigger-device-remove');
|
||||
});
|
||||
}
|
||||
|
||||
function testConsecutiveGetAvailability() {
|
||||
let request = new PresentationRequest("https://example.org");
|
||||
let firstAvailabilityResolved = false;
|
||||
return Promise.all([
|
||||
request.getAvailability().then(function() {
|
||||
firstAvailabilityResolved = true;
|
||||
}),
|
||||
request.getAvailability().then(function() {
|
||||
ok(firstAvailabilityResolved, "getAvailability() should be resolved in sequence");
|
||||
})
|
||||
]).catch(function(aError) {
|
||||
ok(false, "Error occurred when getting availability: " + aError);
|
||||
teardown();
|
||||
});
|
||||
}
|
||||
|
||||
function testUnsupportedDeviceAvailability() {
|
||||
return Promise.race([
|
||||
new Promise(function(aResolve, aReject) {
|
||||
let request = new PresentationRequest("https://test.com");
|
||||
request.getAvailability().then(function(aAvailability) {
|
||||
availability = aAvailability;
|
||||
aAvailability.onchange = function() {
|
||||
availability.onchange = null;
|
||||
ok(false, "Should not get onchange event.");
|
||||
teardown();
|
||||
}
|
||||
});
|
||||
gScript.sendAsyncMessage('trigger-add-unsupport-url-device');
|
||||
}),
|
||||
new Promise(function(aResolve, aReject) {
|
||||
setTimeout(function() {
|
||||
ok(true, "Should not get onchange event.");
|
||||
availability.onchange = null;
|
||||
gScript.sendAsyncMessage('trigger-remove-unsupported-device');
|
||||
aResolve();
|
||||
}, 3000);
|
||||
}),
|
||||
]);
|
||||
}
|
||||
|
||||
function testMultipleAvailabilityURLs() {
|
||||
let request1 = new PresentationRequest(["https://example.com",
|
||||
"https://example1.com"]);
|
||||
let request2 = new PresentationRequest(["https://example1.com",
|
||||
"https://example2.com"]);
|
||||
return Promise.all([
|
||||
request1.getAvailability().then(function(aAvailability) {
|
||||
return new Promise(function(aResolve) {
|
||||
aAvailability.onchange = function() {
|
||||
aAvailability.onchange = null;
|
||||
ok(true, "Should get onchange event.");
|
||||
aResolve();
|
||||
};
|
||||
});
|
||||
}),
|
||||
request2.getAvailability().then(function(aAvailability) {
|
||||
return new Promise(function(aResolve) {
|
||||
aAvailability.onchange = function() {
|
||||
aAvailability.onchange = null;
|
||||
ok(true, "Should get onchange event.");
|
||||
aResolve();
|
||||
};
|
||||
});
|
||||
}),
|
||||
new Promise(function(aResolve) {
|
||||
gScript.sendAsyncMessage('trigger-add-multiple-devices');
|
||||
aResolve();
|
||||
}),
|
||||
]).then(new Promise(function(aResolve) {
|
||||
gScript.sendAsyncMessage('trigger-remove-multiple-devices');
|
||||
aResolve();
|
||||
}));
|
||||
}
|
||||
|
||||
function testPartialSupportedDeviceAvailability() {
|
||||
let request1 = new PresentationRequest(["https://supportedUrl.com"]);
|
||||
let request2 = new PresentationRequest(["http://notSupportedUrl.com"]);
|
||||
|
||||
return Promise.all([
|
||||
request1.getAvailability().then(function(aAvailability) {
|
||||
return new Promise(function(aResolve) {
|
||||
aAvailability.onchange = function() {
|
||||
aAvailability.onchange = null;
|
||||
ok(true, "Should get onchange event.");
|
||||
aResolve();
|
||||
};
|
||||
});
|
||||
}),
|
||||
Promise.race([
|
||||
request2.getAvailability().then(function(aAvailability) {
|
||||
return new Promise(function(aResolve) {
|
||||
aAvailability.onchange = function() {
|
||||
aAvailability.onchange = null;
|
||||
ok(false, "Should get onchange event.");
|
||||
aResolve();
|
||||
};
|
||||
});
|
||||
}),
|
||||
new Promise(function(aResolve) {
|
||||
setTimeout(function() {
|
||||
ok(true, "Should not get onchange event.");
|
||||
availability.onchange = null;
|
||||
aResolve();
|
||||
}, 3000);
|
||||
}),
|
||||
]),
|
||||
new Promise(function(aResolve) {
|
||||
gScript.sendAsyncMessage('trigger-add-https-devices');
|
||||
aResolve();
|
||||
}),
|
||||
]).then(new Promise(function(aResolve) {
|
||||
gScript.sendAsyncMessage('trigger-remove-https-devices');
|
||||
aResolve();
|
||||
}));
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
request = null;
|
||||
availability = null;
|
||||
gScript.sendAsyncMessage('teardown');
|
||||
gScript.destroy();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function runTests() {
|
||||
ok(navigator.presentation, "navigator.presentation should be available.");
|
||||
testSetup().then(testInitialUnavailable)
|
||||
.then(testInitialAvailable)
|
||||
.then(testSameObject)
|
||||
.then(testOnChangeEvent)
|
||||
.then(testConsecutiveGetAvailability)
|
||||
.then(testMultipleAvailabilityURLs)
|
||||
.then(testUnsupportedDeviceAvailability)
|
||||
.then(testPartialSupportedDeviceAvailability)
|
||||
.then(teardown);
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.requestFlakyTimeout('Test for guarantee not firing async event');
|
||||
SpecialPowers.pushPermissions([
|
||||
{type: "presentation-device-manage", allow: false, context: document},
|
||||
], function() {
|
||||
SpecialPowers.pushPrefEnv({ "set": [["dom.presentation.enabled", true],
|
||||
["dom.presentation.controller.enabled", true],
|
||||
["dom.presentation.session_transport.data_channel.enable", false]]},
|
||||
runTests);
|
||||
});
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue