| <!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> |