blob: 490d355004eb4ff08e44bf02e87ee15dddca6536 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/mojo-helpers.js"></script>
<script src="resources/mock-imagecapture.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
const meteringModeNames = ["none", "manual", "single-shot", "continuous"];
// This test verifies that MediaTrackCapabilities are returned upon
// MediaStreamTrack.getCapabilities(), with a mock Mojo service implementation.
async_test(function(t) {
var canvas = document.getElementById('canvas');
var context = canvas.getContext("2d");
context.fillStyle = "red";
context.fillRect(0, 0, 10, 10);
var mock_capabilities;
mockImageCaptureReady
.then(mock => {
mock_capabilities = mock.capabilities();
// |stream| must be created _after_ |mock| is constructed to give the
// latter time to override the bindings.
var stream = canvas.captureStream();
assert_equals(stream.getAudioTracks().length, 0);
assert_equals(stream.getVideoTracks().length, 1);
var videoTrack = stream.getVideoTracks()[0];
assert_equals(typeof videoTrack.getCapabilities, 'function');
// |videoTrack|s capabilities, just like the actual capture, is a process
// kicked right after creation, we introduce a small delay to allow for
// those to be collected.
setTimeout(() => {
capabilities = videoTrack.getCapabilities();
assert_equals(typeof capabilities, 'object');
assert_equals(capabilities.whiteBalanceMode.length,
mock_capabilities.supported_white_balance_modes.length,
'whiteBalanceMode');
for (i = 0; i < capabilities.whiteBalanceMode.length; ++i) {
assert_equals(
capabilities.whiteBalanceMode[i],
meteringModeNames[mock_capabilities
.supported_white_balance_modes[i]],
'whiteBalanceMode');
}
assert_equals(capabilities.exposureMode.length,
mock_capabilities.supported_exposure_modes.length,
'exposureMode');
for (i = 0; i < capabilities.exposureMode.length; ++i) {
assert_equals(
capabilities.exposureMode[i],
meteringModeNames[mock_capabilities.supported_exposure_modes[i]],
'exposureMode');
}
assert_equals(capabilities.focusMode.length,
mock_capabilities.supported_focus_modes.length,
'focusMode');
for (i = 0; i < capabilities.focusMode.length; ++i) {
assert_equals(
capabilities.focusMode[i],
meteringModeNames[mock_capabilities.supported_focus_modes[i]],
'focusMode');
}
assert_true(capabilities.exposureCompensation instanceof
MediaSettingsRange);
assert_equals(capabilities.exposureCompensation.max,
mock_capabilities.exposure_compensation.max);
assert_equals(capabilities.exposureCompensation.min,
mock_capabilities.exposure_compensation.min);
assert_equals(capabilities.exposureCompensation.step,
mock_capabilities.exposure_compensation.step);
assert_true(capabilities.colorTemperature instanceof
MediaSettingsRange);
assert_equals(capabilities.colorTemperature.max,
mock_capabilities.color_temperature.max);
assert_equals(capabilities.colorTemperature.min,
mock_capabilities.color_temperature.min);
assert_equals(capabilities.colorTemperature.step,
mock_capabilities.color_temperature.step);
assert_true(capabilities.iso instanceof MediaSettingsRange);
assert_equals(capabilities.iso.max, mock_capabilities.iso.max);
assert_equals(capabilities.iso.min, mock_capabilities.iso.min);
assert_equals(capabilities.iso.step, mock_capabilities.iso.step);
assert_true(capabilities.brightness instanceof MediaSettingsRange);
assert_equals(capabilities.brightness.max,
mock_capabilities.brightness.max);
assert_equals(capabilities.brightness.min,
mock_capabilities.brightness.min);
assert_equals(capabilities.brightness.step,
mock_capabilities.brightness.step);
assert_true(capabilities.contrast instanceof MediaSettingsRange);
assert_equals(capabilities.contrast.max,
mock_capabilities.contrast.max);
assert_equals(capabilities.contrast.min,
mock_capabilities.contrast.min);
assert_equals(capabilities.contrast.step,
mock_capabilities.contrast.step);
assert_true(capabilities.saturation instanceof MediaSettingsRange);
assert_equals(capabilities.saturation.max,
mock_capabilities.saturation.max);
assert_equals(capabilities.saturation.min,
mock_capabilities.saturation.min);
assert_equals(capabilities.saturation.step,
mock_capabilities.saturation.step);
assert_true(capabilities.sharpness instanceof MediaSettingsRange);
assert_equals(capabilities.sharpness.max,
mock_capabilities.sharpness.max);
assert_equals(capabilities.sharpness.min,
mock_capabilities.sharpness.min);
assert_equals(capabilities.sharpness.step,
mock_capabilities.sharpness.step);
assert_true(capabilities.zoom instanceof MediaSettingsRange);
assert_equals(capabilities.zoom.max, mock_capabilities.zoom.max);
assert_equals(capabilities.zoom.min, mock_capabilities.zoom.min);
assert_equals(capabilities.zoom.step, mock_capabilities.zoom.step);
assert_equals(capabilities.torch, mock_capabilities.supports_torch,
'torch');
t.done();
}, 100);
},
error => {
assert_unreached("Error creating MockImageCapture: " + error);
})
}, 'exercises MediaStreamTrack.getCapabilities()');
</script>