diff --git a/public/pay/camera_test.html b/public/pay/camera_test.html
index 57feaf4..c5f7ace 100644
--- a/public/pay/camera_test.html
+++ b/public/pay/camera_test.html
@@ -60,10 +60,12 @@
Camera Access Test
} else if (state === 'prompt') {
statusElem.className = 'alert alert-warning';
statusElem.innerHTML = 'Camera permission: not granted (prompt required)';
+ if (inDialogLink) inDialogLink.style.display = 'inline-block';
if (popupLink) popupLink.style.display = 'inline-block';
} else if (state === 'denied') {
statusElem.className = 'alert alert-danger';
statusElem.innerHTML = 'Camera permission: denied';
+ if (inDialogLink) inDialogLink.style.display = 'inline-block';
if (popupLink) popupLink.style.display = 'inline-block';
} else {
statusElem.className = 'alert alert-info';
@@ -104,6 +106,22 @@ Camera Access Test
}
}
+ async function requestCameraInDialog(evt) {
+ if (evt) evt.preventDefault();
+ logElem.style.display = 'none';
+ try {
+ const stream = await navigator.mediaDevices.getUserMedia({ video: true });
+ stream.getTracks().forEach(track => track.stop());
+ await checkCameraPermission();
+ } catch (err) {
+ console.error('getUserMedia error:', err);
+ logElem.className = 'alert alert-danger';
+ logElem.innerHTML = `Camera error (${err.name}): ${err.message || 'Access failed.'}`;
+ logElem.style.display = 'block';
+ await checkCameraPermission();
+ }
+ }
+
function openCameraAccessPopup(evt) {
if (evt) evt.preventDefault();
const popup = window.open('/pay/camera_access.html', 'camera_access_popup', 'width=500,height=400');