| <!DOCTYPE html> | |
| <title>Federated Credential Management API network request tests.</title> | |
| <link rel="help" href="https://fedidcg.github.io/FedCM"> | |
| <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 type="module"> | |
| import {request_options_with_mediation_required, | |
| fedcm_test, | |
| fedcm_get_and_select_first_account} from './support/fedcm-helper.sub.js'; | |
| fedcm_test(async t => { | |
| // Reset the client_metadata fetch count. | |
| const clear_metadata_count_path = `/fedcm/support/client_metadata_clear_count.py`; | |
| await fetch(clear_metadata_count_path); | |
| // FedCM flow causes the counter of client metadata to increase by 1. | |
| const cred = await fedcm_get_and_select_first_account(t, request_options_with_mediation_required()); | |
| assert_equals(cred.token, "token"); | |
| await new Promise(resolve => { | |
| // Fetch the client metadata from a popup window. | |
| let popup_window = window.open('/fedcm/support/client_metadata.py?skip_checks=1'); | |
| const popup_window_load_handler = (event) => { | |
| popup_window.removeEventListener('load', popup_window_load_handler); | |
| popup_window.close(); | |
| resolve(); | |
| }; | |
| popup_window.addEventListener('load', popup_window_load_handler); | |
| }); | |
| const client_metadata_counter = await fetch(clear_metadata_count_path); | |
| const client_metadata_counter_text = await client_metadata_counter.text(); | |
| // Check that the client metadata response is not cached. If the client metadata response was | |
| // cached, when the user visits the IDP as a first party, the IDP would be able to determine the | |
| // last RP the user visited regardless of whether the user granted consent via the FedCM prompt. | |
| assert_equals(client_metadata_counter_text, "2"); | |
| }, 'Test client_metadata request is not cached'); | |
| </script> |