| <!DOCTYPE html> | |
| <title>Test fenced frame navigations (by a parent frame setting its src). </title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/common/utils.js"></script> | |
| <script src="/common/get-host-info.sub.js"></script> | |
| <script src="resources/utils.js"></script> | |
| <body> | |
| <script> | |
| promise_test(async () => { | |
| // This test checks that fenced frames can be navigated (given a new src). | |
| // The access pattern is as follows, to exercise same- and cross-origin | |
| // navigations in root and nested fenced frames. | |
| // [root] [nested] | |
| // simple (origin 1) | |
| // create-nested (origin 2) | |
| // simple (origin 1) | |
| // simple (origin 2) | |
| // simple (origin 2) | |
| // simple (origin 2) | |
| const navigation_key = token(); | |
| const navigation_ack_key = token(); | |
| // Create URL prefixes to simulate different origins. | |
| // (www1 and www2 are different origins) | |
| const simple_url = generateURL( | |
| "resources/frame-navigation-inner-simple.https.html", | |
| [navigation_key, navigation_ack_key]); | |
| const nested_url = generateURL( | |
| "resources/frame-navigation-inner-create-nested.https.html", | |
| [navigation_key, navigation_ack_key]); | |
| const origin1_simple_url = getRemoteOriginURL(simple_url); | |
| const origin2_nested_url = getRemoteOriginURL(nested_url) | |
| .toString().replace("www1", "www2"); | |
| const origin2_simple_url = getRemoteOriginURL(simple_url) | |
| .toString().replace("www1", "www2"); | |
| // Create a root fenced frame. | |
| root_frame = attachFencedFrame(origin1_simple_url); | |
| const root_load1_actual = await nextValueFromServer(navigation_key); | |
| const root_load1_expected = "pass"; | |
| assert_equals(root_load1_actual, root_load1_expected, | |
| "The 1st root fenced frame navigation succeeded"); | |
| // Navigate the root fenced frame to a second site (which will nest). | |
| root_frame.config = new FencedFrameConfig(origin2_nested_url); | |
| const root_load2_actual = await nextValueFromServer(navigation_key); | |
| const root_load2_expected = "create-nested"; | |
| assert_equals(root_load2_actual, root_load2_expected, | |
| "The 2nd root fenced frame navigation (cross-origin) succeeded"); | |
| writeValueToServer(navigation_ack_key, "ACK"); | |
| // Check that all of the nested navigations succeed. | |
| const nested_load1_actual = await nextValueFromServer(navigation_key); | |
| const nested_load1_expected = "pass"; | |
| assert_equals(nested_load1_actual, nested_load1_expected, | |
| "The 1st nested fenced frame navigation succeeded"); | |
| writeValueToServer(navigation_ack_key, "ACK"); | |
| const nested_load2_actual = await nextValueFromServer(navigation_key); | |
| const nested_load2_expected = "pass"; | |
| assert_equals(nested_load2_actual, nested_load2_expected, | |
| "The 2nd nested fenced frame navigation (cross-origin) succeeded"); | |
| writeValueToServer(navigation_ack_key, "ACK"); | |
| const nested_load3_actual = await nextValueFromServer(navigation_key); | |
| const nested_load3_expected = "pass"; | |
| assert_equals(nested_load3_actual, nested_load3_expected, | |
| "The 3rd nested fenced frame navigation (same-origin) succeeded"); | |
| writeValueToServer(navigation_ack_key, "ACK"); | |
| // Navigate the root fenced frame. | |
| root_frame.config = root_frame.config = new FencedFrameConfig(origin2_simple_url); | |
| const root_load3_actual = await nextValueFromServer(navigation_key); | |
| const root_load3_expected = "pass"; | |
| assert_equals(root_load3_actual, root_load3_expected, | |
| "The 3rd root fenced frame navigation (same-origin) succeeded"); | |
| }, "Fenced frame navigation should succeed"); | |
| </script> | |
| </body> |