Commit a46c52a5 authored by Francois Beaufort's avatar Francois Beaufort Committed by Commit Bot

Clean ImageCapture web platform tests

This CL moves some image capture web platform tests to secure contexts
as getUserMedia is required to get access to photo-related settings and
capabilities.

It also removes a test in MediaStreamTrack-applyConstraints-fast.html
as applyConstraints handles properly non-ImageCapture constraints.

Bug: 1134569
Change-Id: I0b9e3e824bccc8f056c68735f8c04a94d0fc0c7f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2445209
Commit-Queue: François Beaufort <beaufort.francois@gmail.com>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#816101}
parent d52d82dc
......@@ -3031,12 +3031,12 @@ crbug.com/1050754 external/wpt/mediacapture-fromelement/historical.html [ Failur
crbug.com/1050754 external/wpt/mediacapture-fromelement/idlharness.window.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getCapabilities.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getConstraints-fast.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-reject.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getCapabilities.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getSettings.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/getPhotoCapabilities.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/getPhotoSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/setOptions-reject.html [ Failure ]
......
......@@ -2934,12 +2934,12 @@ crbug.com/1050754 external/wpt/mediacapture-fromelement/historical.html [ Failur
crbug.com/1050754 external/wpt/mediacapture-fromelement/idlharness.window.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getCapabilities.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getConstraints-fast.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-reject.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getCapabilities.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getSettings.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/getPhotoCapabilities.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/getPhotoSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/setOptions-reject.html [ Failure ]
......
......@@ -3142,12 +3142,12 @@ crbug.com/1050754 external/wpt/mediacapture-fromelement/historical.html [ Failur
crbug.com/1050754 external/wpt/mediacapture-fromelement/idlharness.window.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getCapabilities.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getConstraints-fast.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-reject.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getCapabilities.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getConstraints.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getSettings.https.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/getPhotoCapabilities.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/getPhotoSettings.html [ Failure ]
crbug.com/1050754 external/wpt/mediacapture-image/setOptions-reject.html [ Failure ]
......
......@@ -265,10 +265,10 @@ GENERATE_TESTS: dom/traversal/TreeWalker.html
GENERATE_TESTS: domparsing/createContextualFragment.html
GENERATE_TESTS: domxpath/001.html
GENERATE_TESTS: domxpath/002.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-applyConstraints-reject.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getCapabilities.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getConstraints-fast.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getSettings.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-applyConstraints-reject.https.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getCapabilities.https.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getConstraints.https.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getSettings.https.html
GENERATE_TESTS: mediacapture-image/setOptions-reject.html
GENERATE_TESTS: html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html
GENERATE_TESTS: html/syntax/parsing/Document.getElementsByTagName-foreign-01.html
......
This is a testharness.js-based test.
PASS MediaStreamTrack.applyConstraints()
PASS MediaStreamTrack.applyConstraints({advanced: []})
PASS MediaStreamTrack.applyConstraints() with unsupported constraint
FAIL MediaStreamTrack.applyConstraints() with non Image-Capture constraint promise_rejects_js: function "function OverconstrainedError() { [native code] }" is not an Error subtype
Harness: the test ran to completion.
......@@ -59,21 +59,4 @@ promise_test(function(t) {
videoTrack.applyConstraints({advanced : [ {torch : true} ]}));
}, 'MediaStreamTrack.applyConstraints() with unsupported constraint');
// This test verifies that applyConstraints() rejects the returned Promise if
// passed mixed ImageCapture and non-ImageCapture constraints.
// TODO(mcasas): remove entirely after https://crbug.com/338503.
promise_test(function(t) {
var canvas = document.getElementById('canvas');
var context = canvas.getContext("2d");
context.fillStyle = "red";
context.fillRect(0, 0, 10, 10);
var stream = canvas.captureStream();
var videoTrack = stream.getVideoTracks()[0];
return promise_rejects_js(
t, OverconstrainedError,
videoTrack.applyConstraints({advanced : [ {width : 640, torch: true} ]}));
}, 'MediaStreamTrack.applyConstraints() with non Image-Capture constraint');
</script>
......@@ -4,9 +4,6 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
// This test verifies that the |constraints| configured in the mock Mojo
......@@ -16,11 +13,6 @@ image_capture_test(async t => {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
'granted', false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
const constraints = { advanced : [{ whiteBalanceMode : 'single-shot',
exposureMode : 'manual',
focusMode : 'single-shot',
......@@ -47,16 +39,9 @@ image_capture_test(async t => {
torch : true
}]};
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|'s capabilities gathering, just like the actual capture, is
// a process kicked off right after creation, we introduce a small delay
// to allow for those to be collected, since they are needed to understand
// which constraints are supported in applyConstraints().
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
try {
await videoTrack.applyConstraints(constraints);
} catch (error) {
......@@ -113,21 +98,9 @@ image_capture_test(async t => {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
'denied', false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|'s capabilities gathering, just like the actual capture, is
// a process kicked off right after creation, we introduce a small delay
// to allow for those to be collected, since they are needed to understand
// which constraints are supported in applyConstraints().
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
const constraints = [{ pan: 8 }, { tilt: 9 }];
await Promise.all(constraints.map(async constraint =>
promise_rejects_dom(
......
......@@ -4,16 +4,8 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
// This test verifies that MediaStreamTrack.applyConstraints() rejects if any
// passed constraint is unsupported or outside its allowed range.
var makePromiseTest = function(getConstraint) {
......@@ -23,16 +15,9 @@ var makePromiseTest = function(getConstraint) {
imageCaptureTest.mockImageCapture().state().supportsTorch = false;
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|'s capabilities gathering, just like the actual capture,
// is a process kicked off right after creation, we introduce a small
// delay to allow for those to be collected, since they are needed to
// understand which constraints are supported in applyConstraints().
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
try {
const constraints = {
advanced : [ getConstraint(imageCaptureTest.mockImageCapture().state()) ]
......
......@@ -4,9 +4,6 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
......@@ -18,11 +15,6 @@ image_capture_test(async (t, imageCaptureTest) => {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
'granted', false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
const constraints = { advanced : [{ whiteBalanceMode : 'single-shot',
exposureMode : 'manual',
focusMode : 'single-shot',
......@@ -48,16 +40,9 @@ image_capture_test(async (t, imageCaptureTest) => {
torch : true
}]};
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|'s capabilities gathering, just like the actual capture, is
// a process kicked off right after creation, we introduce a small delay
// to allow for those to be collected, since they are needed to understand
// which constraints are supported in applyConstraints().
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
try {
await videoTrack.applyConstraints(constraints);
} catch (error) {
......
......@@ -4,9 +4,6 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
......@@ -21,28 +18,17 @@ function makeImageCaptureTest(hasPanTiltZoomPermissionGranted) {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
ptzPermission, false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
let mockCapabilities = imageCaptureTest.mockImageCapture().state();
// |stream| must be created _after_ |mock| is constructed to give the
// latter time to override the bindings.
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
assert_equals(stream.getAudioTracks().length, 0);
assert_equals(stream.getVideoTracks().length, 1);
let videoTrack = stream.getVideoTracks()[0];
assert_equals(typeof videoTrack.getCapabilities, 'function');
// |videoTrack|'s capabilities gathering, just like the actual capture, is
// a process kicked off right after creation, we introduce a small delay
// to allow for those to be collected.
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
let capabilities = videoTrack.getCapabilities();
assert_equals(typeof capabilities, 'object');
......
This is a testharness.js-based test.
PASS MediaStreamTrack.getConstraints(), key: whiteBalanceMode
FAIL MediaStreamTrack-getConstraints-fast assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: exposureMode
FAIL MediaStreamTrack-getConstraints-fast 1 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: focusMode
FAIL MediaStreamTrack-getConstraints-fast 2 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: exposureCompensation
FAIL MediaStreamTrack-getConstraints-fast 3 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: exposureTime
FAIL MediaStreamTrack-getConstraints-fast 4 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: colorTemperature
FAIL MediaStreamTrack-getConstraints-fast 5 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: iso
FAIL MediaStreamTrack-getConstraints-fast 6 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: brightness
FAIL MediaStreamTrack-getConstraints-fast 7 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: contrast
FAIL MediaStreamTrack-getConstraints-fast 8 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: saturation
FAIL MediaStreamTrack-getConstraints-fast 9 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: sharpness
FAIL MediaStreamTrack-getConstraints-fast 10 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: focusDistance
FAIL MediaStreamTrack-getConstraints-fast 11 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: pan
FAIL MediaStreamTrack-getConstraints-fast 12 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: tilt
FAIL MediaStreamTrack-getConstraints-fast 13 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), key: zoom
FAIL MediaStreamTrack-getConstraints-fast 14 assert_object_equals: constraints expected property "advanced" missing
PASS MediaStreamTrack.getConstraints(), complete
FAIL MediaStreamTrack-getConstraints-fast 15 assert_object_equals: constraints expected property "advanced" missing
Harness: the test ran to completion.
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<script>
const constraints = { whiteBalanceMode : "manual",
const constraints = { whiteBalanceMode : "single-shot",
exposureMode : "manual",
focusMode : "single-shot",
......@@ -23,55 +23,41 @@ const constraints = { whiteBalanceMode : "manual",
pan : 8,
tilt : 9,
zoom : 3.141592
// TODO: torch https://crbug.com/700607.
};
var canvas = document.getElementById('canvas');
var context = canvas.getContext("2d");
context.fillStyle = "red";
context.fillRect(0, 0, 10, 10);
// These tests verify that MediaStreamTrack.getConstraints() exists and that,
// returns the constraints passed beforehand with applyConstraints.
var makeAsyncTest = function(c) {
async_test(function(t) {
var stream = canvas.captureStream();
var videoTrack = stream.getVideoTracks()[0];
function makePromiseTest(constraint) {
image_capture_test(async function(t) {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
'granted', false);
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
const constraintsIn = { advanced : [ c ]};
let constraintsIn = {advanced : [ constraint ]};
await videoTrack.applyConstraints(constraintsIn);
assert_object_equals(videoTrack.getConstraints(), constraintsIn, "constraints");
// Method applyConstraints() will fail since there is no Image Capture
// service in this Layout Test, but |constraintsIn| should be cached.
videoTrack.applyConstraints(constraintsIn)
.then(() => { /* ignore */ })
.catch((e) => { /* ignore */ })
.then(t.step_func(() => {
const constraintsOut = videoTrack.getConstraints();
assert_object_equals(constraintsOut, constraintsIn, "constraints");
// Clear constraints by sending an empty constraint set.
return videoTrack.applyConstraints({})
}))
.then(t.step_func(() => {
const constraintsOut = videoTrack.getConstraints();
assert_object_equals(constraintsOut, {}, "constraints");
t.done();
}));
// Clear constraints by sending an empty constraint set.
await videoTrack.applyConstraints({});
assert_object_equals(videoTrack.getConstraints(), {}, "constraints");
});
};
// Send each line of |constraints| in turn and then the whole dictionary.
for (key in constraints) {
var one_constraint = {};
let one_constraint = {};
one_constraint[key] = constraints[key];
generate_tests(
makeAsyncTest,
makePromiseTest,
[[ 'MediaStreamTrack.getConstraints(), key: ' + key, one_constraint ]]);
}
generate_tests(makeAsyncTest, [[
'MediaStreamTrack.getConstraints(), complete ', constraints
]]);
generate_tests(makePromiseTest, [
["MediaStreamTrack.getConstraints(), complete ", constraints],
]);
</script>
......@@ -4,9 +4,6 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
......@@ -22,16 +19,11 @@ function makeImageCaptureTest(hasPanTiltZoomPermissionGranted) {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
ptzPermission, false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
let mockSettings = imageCaptureTest.mockImageCapture().state();
// |stream| must be created _after_ |mock| is constructed to give the
// latter time to override the bindings.
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|s settings retrieval, just like the actual capture, is a
......
......@@ -133,6 +133,7 @@ var ImageCaptureTest = (() => {
],
}
};
this.panTiltZoomPermissionStatus_ = null;
this.settings_ = null;
this.bindingSet_ = new mojo.BindingSet(media.mojom.ImageCapture);
}
......@@ -142,11 +143,24 @@ var ImageCaptureTest = (() => {
this.interceptor_.stop();
}
getPhotoState(source_id) {
return Promise.resolve(this.state_);
async getPhotoState(source_id) {
const shouldKeepPanTiltZoom = await this.isPanTiltZoomPermissionGranted();
if (shouldKeepPanTiltZoom)
return Promise.resolve(this.state_);
const newState = {...this.state_};
newState.state.pan = {};
newState.state.tilt = {};
newState.state.zoom = {};
return Promise.resolve(newState);
}
setOptions(source_id, settings) {
async setOptions(source_id, settings) {
const isAllowedToControlPanTiltZoom = await this.isPanTiltZoomPermissionGranted();
if (!isAllowedToControlPanTiltZoom &&
(settings.hasPan || settings.hasTilt || settings.hasZoom)) {
return Promise.resolve({ success: false });
}
this.settings_ = settings;
if (settings.hasIso)
this.state_.state.iso.current = settings.iso;
......@@ -219,6 +233,17 @@ var ImageCaptureTest = (() => {
});
}
async isPanTiltZoomPermissionGranted() {
if (this.panTiltZoomPermissionStatus_) {
return (this.panTiltZoomPermissionStatus_.state == "granted");
}
this.panTiltZoomPermissionStatus_ = await navigator.permissions.query({
name: "camera",
panTiltZoom: true
});
return (this.panTiltZoomPermissionStatus_.state == "granted");
}
state() {
return this.state_.state;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment