chromium/chrome/test/data/controlled_frame/camera.window.js

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// META script=resources/controlled_frame_helpers.js

promise_setup(async () => {
  await test_driver.set_permission({ name: "camera" }, "granted");
});

promise_test(async (test) => {
  const controlledFrame = await createControlledFrame('/simple.html');
  let permissionRequestHandled = false;
  controlledFrame.addEventListener('permissionrequest', (e) => {
    if (e.permission === 'media') {
      permissionRequestHandled = true;
      e.request.allow();
    } else {
      e.request.deny();
    }
  });

  const testScript = `(async () => {
    const mediaStream =
        await navigator.mediaDevices.getUserMedia({video: true});
    return mediaStream.getVideoTracks().length > 0;
  })()`;
  const hasVideo = await executeAsyncScript(controlledFrame, testScript);

  assert_true(permissionRequestHandled);
  assert_true(hasVideo);
}, 'Camera permission');