<!DOCTYPE html> <title>Test input inside a fenced frame with non-matching COOP.</title> <link rel="help" href="https://crbug.com/1316535"> <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="resources/utils.js"></script> <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-actions.js"></script> <script src="/resources/testdriver-vendor.js"></script> <body> <script> // Navigating a fenced frame to a page with a COOP mismatch (in this case, // unsafe-none -> same-origin-allow-popups) will force the page into a new // browsing context group. // // In Chromium, this forces using a "speculative" frame host which initializes // the new frame using a different path than normal. // // This test is a basic smoke test that sending input through this setup works // and doesn't cause any crashes. See linked bug for more details. // // TODO(https://crbug.com/1411599): COOP is no longer taken into account inside // fenced frames. To test the "speculative" frame host route, we might only need // to do a cross-site navigation. Once figured out, use the new approach to test // that route. promise_test(async () => { const frame = attachFencedFrameContext({ headers: [["Cross-Origin-Opener-Policy", "same-origin-allow-popups"]] }); await frame.execute(async () => { if (document.readyState !== 'complete') { await new Promise((resolve) => { addEventListener('load', resolve); }); } assert_equals(document.readyState, 'complete', 'Fenced frame was loaded'); window.was_clicked = false; addEventListener('click', () => { window.was_clicked = true; }); }); await test_driver.click(frame.element); // Ensure the fenced frame actually saw the click but the real test is that // there isn't a crash. await frame.execute(async () => { assert_equals(window.was_clicked, true, 'Fenced frame received click'); }); }, 'Input in non-matching COOP fenced frame doesn\'t crash.'); </script> </body>