chromium/chrome/test/data/controlled_frame/geolocation.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: "geolocation" }, "granted", window);
});

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

  const testScript = `(async () => {
    const position = await new Promise((resolve, reject) =>
        navigator.geolocation.getCurrentPosition(resolve, reject));
    return position.toJSON();
  })()`;
  const position = await executeAsyncScript(controlledFrame, testScript);

  assert_true(permissionRequestHandled);
  assert_true('coords' in position);
}, "Geolocation permission");