| <!DOCTYPE html> |
| <title>window.fence.getNestedConfigs() test</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/utils.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/get-host-info.sub.js"></script> |
| |
| <body> |
| <script> |
| promise_test(async (t) => { |
| const key = token(); |
| const urn = await generateURNFromFledge( |
| "resources/get-nested-configs-inner.html", [key]); |
| attachFencedFrame(urn); |
| |
| const response = await nextValueFromServer(key); |
| const [length] = response.split(","); |
| |
| assert_equals(length, '40', 'There should be 40 nested configurations.'); |
| }, 'getNestedConfigs() created by FLEDGE should return configurations'); |
| |
| for (const resolve_to_config of [true, false]) { |
| promise_test(async (t) => { |
| const key = token(); |
| const select_url_result = await runSelectURL( |
| generateURL("resources/get-nested-configs-inner.html", [key]), |
| [], resolve_to_config); |
| attachFencedFrame(select_url_result); |
| |
| const response = await nextValueFromServer(key); |
| const [length, first_url] = response.split(","); |
| |
| assert_equals(length, '0', 'There should be 0 nested configurations.'); |
| }, 'getNestedConfigs() from a fenced frame with the ' + |
| (resolve_to_config ? 'config' : 'urn:uuid') + |
| ' from sharedStroage.selectURL() should be empty'); |
| } |
| |
| promise_test(async (t) => { |
| const key = token(); |
| const url = generateURL("resources/get-nested-configs-inner.html", [key]); |
| attachFencedFrame(url, mode='default'); |
| |
| const response = await nextValueFromServer(key); |
| const [length, first_url] = response.split(","); |
| |
| assert_equals(length, '0', 'There should be 0 nested configurations.'); |
| }, 'getNestedConfigs() from a default mode frame should be empty'); |
| |
| promise_test(async (t) => { |
| const key = token(); |
| const urn = await generateURNFromFledge( |
| "resources/get-nested-configs-nested-iframe.html", [key]); |
| attachFencedFrame(urn); |
| |
| const response = await nextValueFromServer(key); |
| const [length, first_url] = response.split(","); |
| |
| assert_equals(length, '40', 'There should be 40 nested configurations.'); |
| }, 'getNestedConfigs() should work in a same-origin nested iframe'); |
| |
| promise_test(async (t) => { |
| const key = token(); |
| |
| const nested_url = generateURL("resources/embeddee.html", [key]); |
| |
| // Navigate a fenced frame to `navigate-nested-config.html`. That page will |
| // in turn create a nested fenced frame which will be navigated to the URN of |
| // the first item in the nested configs list, `nested_url`. |
| const urn = await generateURNFromFledge( |
| "resources/navigate-nested-config.html", [key], |
| [nested_url]); |
| attachFencedFrame(urn); |
| |
| const response = await nextValueFromServer(key); |
| assert_equals(response, 'PASS', 'The nested URL should load.'); |
| }, 'Nested configs created by FLEDGE should be navigable by fenced frame'); |
| |
| promise_test(async (t) => { |
| const key = token(); |
| |
| const nested_url = generateURL("resources/embeddee.html", [key]); |
| |
| // Navigate a fenced frame to `navigate-nested-config.html`. That page will |
| // in turn create a nested fenced frame which will be navigated to the URN of |
| // the first item in the nested configs list, `nested_url`. |
| const urn = await generateURNFromFledge( |
| "resources/navigate-nested-config.html", [key], |
| [nested_url]); |
| attachIFrame(urn); |
| |
| const response = await nextValueFromServer(key); |
| assert_equals(response, 'PASS', 'The nested URL should load.'); |
| }, 'Nested configs created by FLEDGE should be navigable by URN iframe'); |
| |
| promise_test(async (t) => { |
| const key = token(); |
| |
| const nested_url = generateURL("resources/embeddee.html", [key]); |
| |
| // Navigate a fenced frame to `navigate-nested-config.html`. That page will |
| // in turn create a nested fenced frame which will be navigated to the URN of |
| // the first item in the nested configs list, `nested_url`. Since this URN |
| // is invalid, the navigation should gracefully fail. |
| const urn = await generateURNFromFledge( |
| "resources/navigate-nested-config.html", [key], |
| []); |
| attachFencedFrame(urn); |
| |
| // There is no API to observe whether the document in the FencedFrame loaded |
| // or not. Instead, set up a timeout. If the document loads, "PASS" will be |
| // sent to the server. Otherwise "BLOCKED" will be sent after 1 second. |
| step_timeout(() => { |
| writeValueToServer(key, "BLOCKED"); |
| }, 1000); |
| |
| const response = await nextValueFromServer(key); |
| assert_equals(response, 'BLOCKED', 'The nested URL should not load.'); |
| }, 'Navigating an invalid config should be handled gracefully'); |
| |
| </script> |
| </body> |
| </html> |