| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/dispatcher/dispatcher.js"></script> |
| <script src="/common/get-host-info.sub.js"></script> |
| <script src="resources/utils.js"></script> |
| <title>Test fenced frame null config installation triggers about:blank navigation.</title> |
| |
| <body> |
| |
| <script> |
| promise_test(async (t) => { |
| var frame_context = attachFencedFrameContext(); |
| |
| // Ensure remote context responds. |
| let alive_indicator = await Promise.race([ |
| frame_context.execute(() => 'alive'), |
| new Promise((resolve, reject) => t.step_timeout( |
| () => reject('timed_out'), 3000)) |
| ]); |
| assert_equals(alive_indicator, 'alive'); |
| |
| assert_not_equals(frame_context.element.config, null); |
| // Navigates to about:blank. Because this navigates away from the page |
| // that the frame_context.element.config is currently pointing to, the |
| // FencedFrame's portion of the remote context handling code will be |
| // removed. |
| frame_context.element.config = null; |
| |
| // This call should not succeed, because we should have navigated to |
| // about:blank. Note that because the code has been deleted as described |
| // above, we can't actually inspect the URL to determine it is |
| // about:blank; we have to use our timeout as a proxy. |
| let timeout_indicator = await Promise.any([ |
| frame_context.execute(() => 'alive'), |
| new Promise(resolve => t.step_timeout( |
| () => resolve('timed_out'), 3000)) |
| ]); |
| assert_equals(timeout_indicator, 'timed_out'); |
| }, "Test that a fenced frame with a config explicitly set to null navigates to about:blank"); |
| </script> |
| |
| </body> |