// 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");