// META: script=/common/get-host-info.sub.js // META: script=/common/utils.js // META: script=/common/dispatcher/dispatcher.js const testBaseUriAboutBlankFromGrandParent = (description, child_origin) => { promise_test(async test => { // Create a child in an iframe. const child_token = token(); const child_url = child_origin + '/common/dispatcher/executor.html' + `?uuid=${child_token}`; const iframe = document.createElement("iframe"); iframe.src = child_url; document.body.appendChild(iframe); // The child creates a grand child in an iframe. const reply_token = token(); send(child_token, ` const iframe = document.createElement("iframe"); location.hash = "interesting-fragment"; iframe.src = "/common/blank.html"; iframe.onload = () => { send("${reply_token}", "grand child loaded"); }; document.body.appendChild(iframe); `); assert_equals(await receive(reply_token), "grand child loaded"); const child = iframe.contentWindow; const grandchild = child[0]; // Navigate the grand-child toward about:blank. // Navigation are always asynchronous. It doesn't exist a ways to know the // about:blank document committed. A timer is used instead: grandchild.location = "about:blank"; await new Promise(r => test.step_timeout(r, /*ms=*/500)); // The grandchild baseURI must correspond to its grand parent. // // Note: `child_token` is removed, to get a stable failure, in case the // about:blank's document.baseURI reports the parent's URL instead of its // grand-parent. assert_equals( grandchild.document.baseURI.replace(child_token, "child_token"), self.document.baseURI); }, description); } onload = () => { testBaseUriAboutBlankFromGrandParent( "Check the baseURL of an about:blank document same-origin with its parent", get_host_info().HTTPS_ORIGIN, ); testBaseUriAboutBlankFromGrandParent( "Check the baseURL of an about:blank document cross-origin with its parent", get_host_info().HTTPS_REMOTE_ORIGIN, ); testBaseUriAboutBlankFromGrandParent( "Check the baseURL of an about:blank document cross-site with its parent", get_host_info().HTTPS_NOTSAMESITE_ORIGIN, ); }