<!DOCTYPE HTML><html><head><title>Test for Recursive Loads</title><metacharset="utf-8"><scriptsrc="/tests/SimpleTest/SimpleTest.js"></script><linkrel="stylesheet"type="text/css"href="/tests/SimpleTest/test.css"/></head><body><atarget="_blank"href="https://bugzilla.mozilla.org/show_bug.cgi?id=1597427">Mozilla Bug 1597427</a><pid="display"></p><divid="content"style="display: none"></div><preid="test"><scripttype="application/javascript">constTEST_CASES=[{// too many recursive iframesframeId:"recursiveFrame",expectedLocations:[// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_recursive.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_recursive.html","about:blank",],},{// too many recursive iframesframeId:"twoRecursiveIframes",expectedLocations:[// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_load_as_example_com.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.org/tests/docshell/test/navigation/frame_load_as_example_org.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_load_as_example_com.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.org/tests/docshell/test/navigation/frame_load_as_example_org.html","about:blank",],},{// too many recursive iframesframeId:"threeRecursiveIframes",expectedLocations:[// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://sub1.test1.mochi.test:8888/tests/docshell/test/navigation/frame_load_as_host1.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_load_as_host2.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://test1.mochi.test:8888/tests/docshell/test/navigation/frame_load_as_host3.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://sub1.test1.mochi.test:8888/tests/docshell/test/navigation/frame_load_as_host1.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_load_as_host2.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://test1.mochi.test:8888/tests/docshell/test/navigation/frame_load_as_host3.html","about:blank",],},{// too many nested iframesframeId:"sixRecursiveIframes",expectedLocations:[// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_1_out_of_6.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://test1.mochi.test:8888/tests/docshell/test/navigation/frame_2_out_of_6.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://sub1.test1.mochi.test:8888/tests/docshell/test/navigation/frame_3_out_of_6.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://sub2.xn--lt-uia.mochi.test:8888/tests/docshell/test/navigation/frame_4_out_of_6.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://test2.mochi.test:8888/tests/docshell/test/navigation/frame_5_out_of_6.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.org/tests/docshell/test/navigation/frame_6_out_of_6.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_1_out_of_6.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://test1.mochi.test:8888/tests/docshell/test/navigation/frame_2_out_of_6.html",],},{// too many recursive objectsframeId:"recursiveObject",expectedLocations:[// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://sub2.xn--lt-uia.mochi.test:8888/tests/docshell/test/navigation/object_recursive_load.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://sub2.xn--lt-uia.mochi.test:8888/tests/docshell/test/navigation/object_recursive_load.html",],},{// 3 nested srcdocs, should show all of themframeId:"nestedSrcdoc",expectedLocations:["about:srcdoc",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/file_nested_srcdoc.html","about:srcdoc","about:srcdoc",],},{// too many recursive dynamically created iframesframeId:"dynamicrecursive",expectedLocations:[// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_recursive_dynamic.html",// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_recursive_dynamic.html","about:blank"],},{// navigating shouldn't be blocked by recursion checkframeId:"navigationIsNotRecursive",expectedLocations:[// eslint-disable-next-line @microsoft/sdl/no-insecure-url"http://example.com/tests/docshell/test/navigation/frame_recursive_target.html","http://example.com/tests/docshell/test/navigation/frame_recursive_target.html","http://example.com/tests/docshell/test/navigation/frame_recursive_target.html","about:blank"],},];asyncfunctioncheckRecursiveLoad(level){letel=content.document.getElementById("static")||content.document.getElementById("dynamic");letdocumentURI=awaitSpecialPowers.spawn(el,[],()=>this.content.document.documentURI);if(documentURI=="about:blank"){// If we had too many recursive frames, the most inner iframe's uri will be about:blankreturn[documentURI];}if(documentURI=="about:srcdoc"&&level==3){// Check that we have the correct most inner srcdoc iframeletinnerText=awaitSpecialPowers.spawn(el,[],()=>this.content.document.body.innerText);is(innerText,"Third nested srcdoc","correct most inner srcdoc iframe");}letnestedIfrOrObjectURI=[];try{// Throws an error when we have too many nested frames/objects, because we// claim to have no content window for the inner most frame/object.nestedIfrOrObjectURI=awaitSpecialPowers.spawn(el,[level+1],checkRecursiveLoad);}catch(err){info(`Tried to spawn another task in the iframe/object, but got err: ${err}, must have had too many nested iframes/objects\n`);}return[documentURI,...nestedIfrOrObjectURI];}add_task(async()=>{for(consttestCaseofTEST_CASES){letel=document.getElementById(testCase.frameId);letloc=awaitSpecialPowers.spawn(el,[],()=>this.content.location.href);letlocations=awaitSpecialPowers.spawn(el,[1],checkRecursiveLoad);isDeeply([loc,...locations],testCase.expectedLocations,"iframes/object loaded in correct order");}});</script></pre><div><iframestyle="height: 100vh; width:25%;"id="recursiveFrame"src="http://example.com/tests/docshell/test/navigation/frame_recursive.html"></iframe><iframestyle="height: 100vh; width:25%;"id="twoRecursiveIframes"src="http://example.com/tests/docshell/test/navigation/frame_load_as_example_com.html"></iframe><iframestyle="height: 100vh; width:25%;"id="threeRecursiveIframes"src="http://sub1.test1.mochi.test:8888/tests/docshell/test/navigation/frame_load_as_host1.html"></iframe><iframestyle="height: 100vh; width:25%;"id="sixRecursiveIframes"src="http://example.com/tests/docshell/test/navigation/frame_1_out_of_6.html"></iframe><objectwidth="400"height="300"id="recursiveObject"data="http://sub2.xn--lt-uia.mochi.test:8888/tests/docshell/test/navigation/object_recursive_load.html"></object><iframeid="nestedSrcdoc"srcdoc="Srcdoc that will embed an iframe <iframe id="static" src="http://example.com/tests/docshell/test/navigation/file_nested_srcdoc.html"></iframe>"></iframe><iframestyle="height: 100vh; width:25%;"id="dynamicrecursive"src="http://example.com/tests/docshell/test/navigation/frame_recursive_dynamic.html"></iframe><iframestyle="height: 100vh; width:25%;"id="navigationIsNotRecursive"src="http://example.com/tests/docshell/test/navigation/frame_recursive_target.html"></iframe></div></body></html>