<!DOCTYPE html>
<meta charset="utf-8"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js?feature=bidi"></script>
<script src="/resources/testdriver-vendor.js"></script>

<script>
    const latitude = 51.478;
    const longitude = -0.166;
    const accuracy = 100;

    promise_setup(async () => {
        // Ensure permission is granted before proceeding.
        await test_driver.bidi.permissions.set_permission({
            descriptor: {name: "geolocation"},
            state: "granted",
        });
    });

    promise_test(async (t) => {
        t.add_cleanup(async () => {
            await test_driver.bidi.emulation.set_geolocation_override(
                {coordinates: null});
        });

        await test_driver.bidi.emulation.set_geolocation_override({
            coordinates: {latitude, longitude, accuracy}
        });

        const position = await new Promise((resolve, reject) => {
            let calledAsync = false;
            window.navigator.geolocation.getCurrentPosition(
                t.step_func((position) => {
                    assert_true(
                        calledAsync,
                        "Expected callback to be called asynchronously"
                    );
                    resolve(position.coords.toJSON());
                }),
                reject,
                {timeout: 200}
            );
            calledAsync = true;
        });

        assert_equals(position.latitude, latitude);
        assert_equals(position.longitude, longitude);
        assert_equals(position.accuracy, accuracy);
    }, "getCurrentPosition called with success and error callbacks");

    promise_test(async (t) => {
        t.add_cleanup(async () => {
            await test_driver.bidi.emulation.set_geolocation_override(
                {coordinates: null});
        });

        await test_driver.bidi.emulation.set_geolocation_override({
            coordinates: {latitude, longitude, accuracy}
        });

        const position = await new Promise((resolve, reject) => {
            let calledAsync = false;
            try {
                navigator.geolocation.getCurrentPosition(
                    t.step_func((position) => {
                        assert_true(
                            calledAsync,
                            "Expected callback to be called asynchronously"
                        );
                        resolve(position);
                    }),
                    null
                );
                calledAsync = true;
            } catch (err) {
                reject(err);
            }
        });
        assert_true(
            position instanceof GeolocationPosition,
            "Expected GeolocationPosition"
        );
        assert_equals(position.coords.latitude, latitude);
        assert_equals(position.coords.longitude, longitude);
        assert_equals(position.coords.accuracy, accuracy);
    }, "Error callback is nullable for getCurrentPosition().");
</script>
