gecko-dev/dom/media/test/test_imagecapture.html
Brian Grinstead 0d460e3432 Bug 1544322 - Part 2.2 - Remove the [type] attribute for one-liner <script> tags loading files in /tests/SimpleTest/ in dom/ r=bzbarsky
This is split from the previous changeset since if we include dom/ the file size is too
large for phabricator to handle.

This is an autogenerated commit to handle scripts loading mochitest harness files, in
the simple case where the script src is on the same line as the tag.

This was generated with https://bug1544322.bmoattachments.org/attachment.cgi?id=9058170
using the `--part 2` argument.

Differential Revision: https://phabricator.services.mozilla.com/D27457

--HG--
extra : moz-landing-system : lando
2019-04-16 03:53:28 +00:00

149 lines
4.0 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1041393
-->
<head>
<meta charset="utf-8">
<title>ImageCapture tests</title>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="gUM_support.js"></script>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1041393">ImageCapture tests</a>
<script type="application/javascript">
let repeat = 100;
let count;
// Check if the callback returns even no JS reference on it.
function gcTest(track) {
return new Promise(function(resolve, reject) {
count = 0;
let i;
let imageCapture;
for(i = 0; i < repeat; i++) {
imageCapture = new ImageCapture(track);
imageCapture.onphoto = function(blob) {
count++;
if (count == repeat) {
ok(true, "pass gc testing");
resolve(track);
}
};
imageCapture.onerror = function(error) {
ok(false, "takePhoto failure in gc testing");
reject();
};
imageCapture.takePhoto();
}
info("Call gc ");
SpecialPowers.gc();
});
}
// Continue calling takePhoto() in rapid succession.
function rapidTest(track) {
return new Promise(function(resolve, reject) {
let imageCapture = new ImageCapture(track);
imageCapture.onphoto = function(blob) {
count++;
if (count == repeat) {
ok(true, "pass raipd takePhoto() testing");
resolve(track);
}
};
imageCapture.onerror = function(error) {
ok(false, "takePhoto() failure in rapid testing");
reject();
};
count = 0;
let i;
for(i = 0; i < repeat; i++) {
imageCapture.takePhoto();
}
});
}
// Check if the blob is decodable.
function blobTest(track) {
return new Promise(function(resolve, reject) {
let imageCapture = new ImageCapture(track);
imageCapture.onphoto = function(blob) {
let img = new Image();
img.onerror = function() {
ok(false, "fail to decode blob");
reject();
};
img.onload = function() {
ok(true, "decode blob success");
resolve(track);
};
img.src = URL.createObjectURL(blob.data);
};
imageCapture.onerror = function(error) {
ok(false, "fail to capture image");
};
imageCapture.takePhoto();
});
}
// It should return an error event after disabling video track.
function trackTest(track) {
return new Promise(function(resolve, reject) {
let imageCapture = new ImageCapture(track);
imageCapture.onphoto = function(blob) {
ok(false, "expect error when video track is disable");
reject();
};
imageCapture.onerror = function(error) {
ok(error.imageCaptureError.code == error.imageCaptureError.PHOTO_ERROR, "error code is PHOTO_ERROR")
track.enabled = true;
resolve(track);
};
track.enabled = false;
imageCapture.takePhoto();
});
}
async function init() {
// use loopback camera if available, otherwise fake, MediaStreamGraph will be the backend of ImageCapture.
await setupGetUserMediaTestPrefs();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
return stream.getVideoTracks()[0];
}
async function start() {
try {
let track = await init();
info("ImageCapture track disable test.");
track = await trackTest(track);
info("ImageCapture blob test.");
track = await blobTest(track);
info("ImageCapture rapid takePhoto() test.");
track = await rapidTest(track);
info("ImageCapture multiple instances test.");
await gcTest(track);
} catch (e) {
ok(false, "Unexpected error during test: " + e);
} finally {
SimpleTest.finish();
}
}
SimpleTest.requestCompleteLog();
SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPrefEnv({"set": [["dom.imagecapture.enabled", true],
["media.navigator.permission.disabled", true]
]}, start);
</script>
</pre>
</body>
</html>