100 lines
3.8 KiB
HTML
100 lines
3.8 KiB
HTML
<!DOCTYPE html>
|
|
<title>Federated Credential Management API / Storage Access API autogrants tests.</title>
|
|
<link rel="help" href="https://fedidcg.github.io/FedCM">
|
|
<link rel="help" href="https://privacycg.github.io/storage-access/">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="/resources/testdriver.js"></script>
|
|
<script src="/resources/testdriver-vendor.js"></script>
|
|
<script src="/storage-access-api/helpers.js"></script>
|
|
|
|
<script type="module">
|
|
import {request_options_with_mediation_required,
|
|
fedcm_test,
|
|
select_manifest,
|
|
fedcm_get_and_select_first_account} from './support/fedcm-helper.sub.js';
|
|
|
|
const www_alt = "https://{{hosts[alt][www]}}:{{ports[https][0]}}";
|
|
const responder_html_load_ack = "/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js&should_ack_load=true";
|
|
|
|
fedcm_test(async t => {
|
|
await MaybeSetStorageAccess("*", "*", "blocked");
|
|
let test_options = request_options_with_mediation_required();
|
|
await select_manifest(t, test_options);
|
|
|
|
await fedcm_get_and_select_first_account(t, test_options);
|
|
|
|
const frame_loaded = new Promise(r => {
|
|
onmessage = e => {
|
|
if (e.data == "loaded") {
|
|
r(e.data);
|
|
}
|
|
}
|
|
});
|
|
const frame = await CreateFrame(www_alt + responder_html_load_ack, false,
|
|
undefined, `identity-credentials-get ${www_alt};`);
|
|
assert_equals(await frame_loaded, "loaded");
|
|
|
|
assert_true(await RequestStorageAccessInFrame(frame),
|
|
"requestStorageAccess doesn't require a gesture since the FedCM account is already connected.");
|
|
|
|
assert_true(await FrameHasStorageAccess(frame), "frame should have storage access now.");
|
|
assert_equals(await GetPermissionInFrame(frame), "prompt");
|
|
}, "Test that FedCM accounts autogrant storage access.");
|
|
|
|
fedcm_test(async t => {
|
|
await MaybeSetStorageAccess("*", "*", "blocked");
|
|
let test_options = request_options_with_mediation_required();
|
|
await select_manifest(t, test_options);
|
|
|
|
await fedcm_get_and_select_first_account(t, test_options);
|
|
|
|
const frame_loaded = new Promise(r => {
|
|
onmessage = e => {
|
|
if (e.data == "loaded") {
|
|
r(e.data);
|
|
}
|
|
}
|
|
});
|
|
const frame = await CreateFrame(www_alt + responder_html_load_ack, false);
|
|
assert_equals(await frame_loaded, "loaded");
|
|
|
|
assert_false(await RequestStorageAccessInFrame(frame),
|
|
"requestStorageAccess requires a gesture since the 'identity-credentials-get' policy is absent.");
|
|
|
|
assert_false(await FrameHasStorageAccess(frame), "frame should not have storage access.");
|
|
assert_equals(await GetPermissionInFrame(frame), "prompt");
|
|
}, "Test that FedCM accounts do not autogrant storage access without permissions policy.");
|
|
|
|
fedcm_test(async t => {
|
|
await MaybeSetStorageAccess("*", "*", "blocked");
|
|
let test_options = request_options_with_mediation_required();
|
|
await select_manifest(t, test_options);
|
|
|
|
await fedcm_get_and_select_first_account(t, test_options);
|
|
try {
|
|
await navigator.credentials.preventSilentAccess();
|
|
} catch (ex) {
|
|
// In Chrome's content_shell, the promise will be rejected
|
|
// even though the part we care about succeeds.
|
|
}
|
|
|
|
const frame_loaded = new Promise(r => {
|
|
onmessage = e => {
|
|
if (e.data == "loaded") {
|
|
r(e.data);
|
|
}
|
|
}
|
|
});
|
|
const frame = await CreateFrame(www_alt + responder_html_load_ack, false,
|
|
undefined, `identity-credentials-get ${www_alt};`);
|
|
assert_equals(await frame_loaded, "loaded");
|
|
|
|
assert_false(await RequestStorageAccessInFrame(frame),
|
|
"requestStorageAccess requires a gesture since the preventSilentAccess flag is true.");
|
|
|
|
assert_false(await FrameHasStorageAccess(frame), "frame should not have storage access.");
|
|
assert_equals(await GetPermissionInFrame(frame), "prompt");
|
|
}, "Test that FedCM accounts do not autogrant storage access if preventSilentAccess is set.");
|
|
|
|
</script>
|