Skip to content
Permalink
Browse files
http/tests/security/frame-loading-via-document-write-async-delegates.…
…html fails with async delegates

https://bugs.webkit.org/show_bug.cgi?id=183460

Reviewed by Alex Christensen.

The test has 3 frames which all initially load "about:blank". Then using document.write(), it inserts
HTML in each frame.
Frame 1: body has an onload event handler, which calls JS is click an anchor link to navigate the frame.
Frame 2: body has an onload event handler to do some logging
Frame 3: body has an onload event handler and finishes the test (calls testRunner.notifyDone())

The issue is that with asynchronous policy delegates, the first frame may not have navigated yet by the
time the third frame is loaded. Indeed, the onload event of the first frame merely clicks am anchor link
which will trigger a navigation policy check and then later navigate.

To make the test more robust, we now count the number of loads and call testRunner.notifyDone() when
we've reached the expected number of loads.

* http/tests/security/frame-loading-via-document-write-async-delegates-expected.txt: Added.
* http/tests/security/frame-loading-via-document-write-async-delegates.html: Copied from LayoutTests/http/tests/security/frame-loading-via-document-write.html.
* http/tests/security/frame-loading-via-document-write.html:
* http/tests/security/resources/frame-loading-via-document-write.js:


Canonical link: https://commits.webkit.org/199233@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@229539 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
cdumez committed Mar 12, 2018
1 parent 35e4fb1 commit 75f733d4632f9dcc400a65a854b69c623f07b2e2
@@ -1,3 +1,28 @@
2018-03-12 Chris Dumez <cdumez@apple.com>

http/tests/security/frame-loading-via-document-write-async-delegates.html fails with async delegates
https://bugs.webkit.org/show_bug.cgi?id=183460

Reviewed by Alex Christensen.

The test has 3 frames which all initially load "about:blank". Then using document.write(), it inserts
HTML in each frame.
Frame 1: body has an onload event handler, which calls JS is click an anchor link to navigate the frame.
Frame 2: body has an onload event handler to do some logging
Frame 3: body has an onload event handler and finishes the test (calls testRunner.notifyDone())

The issue is that with asynchronous policy delegates, the first frame may not have navigated yet by the
time the third frame is loaded. Indeed, the onload event of the first frame merely clicks am anchor link
which will trigger a navigation policy check and then later navigate.

To make the test more robust, we now count the number of loads and call testRunner.notifyDone() when
we've reached the expected number of loads.

* http/tests/security/frame-loading-via-document-write-async-delegates-expected.txt: Added.
* http/tests/security/frame-loading-via-document-write-async-delegates.html: Copied from LayoutTests/http/tests/security/frame-loading-via-document-write.html.
* http/tests/security/frame-loading-via-document-write.html:
* http/tests/security/resources/frame-loading-via-document-write.js:

2018-03-12 Per Arne Vollan <pvollan@apple.com>

Mark webanimations/css-animations.html and webanimations/css-transitions.html as failures on Windows.
@@ -188,6 +188,10 @@ http/wpt/html/browsers/history/the-location-interface/location-protocol-setter-n
imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html [ DumpJSConsoleLogInStdErr ]
imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html [ DumpJSConsoleLogInStdErr ]

# Line number in the console logging may change so we silence it to avoid flakiness.
http/tests/security/frame-loading-via-document-write.html [ DumpJSConsoleLogInStdErr ]
http/tests/security/frame-loading-via-document-write-async-delegates.html [ DumpJSConsoleLogInStdErr ]

webkit.org/b/181901 imported/w3c/web-platform-tests/service-workers/service-worker/fetch-cors-xhr.https.html [ DumpJSConsoleLogInStdErr ]
webkit.org/b/181897 imported/w3c/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting.https.html [ DumpJSConsoleLogInStdErr ]
webkit.org/b/181900 imported/w3c/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-cache.https.html [ DumpJSConsoleLogInStdErr ]
@@ -0,0 +1,21 @@


--------
Frame: 'topRow'
--------
This page was successfully loaded.
My protocol is http:
My referrer is blank


--------
Frame: 'middleRow'
--------
Image NOT loaded.


--------
Frame: 'bottomRow'
--------
Image loaded.

@@ -0,0 +1,82 @@
<html>
<head>
<title></title>

<script language="JavaScript">

const expectedLoadCount = 7;
let loadCount = 0;
function finishTestIfLastLoad()
{
if (++loadCount == expectedLoadCount && window.testRunner)
testRunner.notifyDone();
}

function buildFrameset()
{
if (window.testRunner) {
testRunner.waitUntilDone();
testRunner.dumpAsText();
testRunner.dumpChildFramesAsText();
if (testRunner.setShouldDecideNavigationPolicyAfterDelay)
testRunner.setShouldDecideNavigationPolicyAfterDelay(true);
}

var outHTML="<frameset rows=\"33%, 33%, 33%\">"+
"<frame src=\"\" onload=\"finishTestIfLastLoad()\" name=\"topRow\">"+
"<frame src=\"\" onload=\"finishTestIfLastLoad()\" name=\"middleRow\">"+
"<frame src=\"\" onload=\"finishTestIfLastLoad()\" name=\"bottomRow\">"+
"</frameset>";

document.open("text/html","replace");
document.write(outHTML);
document.close();

outHTML = "<html><head><scr" + "ipt language=\"JavaScript\" src=\"resources/frame-loading-via-document-write.js\">"+
"</scr" + "ipt></head><body onLoad=\"clickAnchor()\"><table><tr><td>"+
"<a href=\"resources/success.html\" target=\"topRow\" id=\"anchorLink\">Click me. If nothing loads above we have a problem.</a>"+
"</td></tr></table></body></html>";

frames['topRow'].document.open("text/html","replace");
frames['topRow'].document.charset=document.charset;
frames['topRow'].document.write(outHTML);
frames['topRow'].document.close();

var localImageLocation = "file:///tmp/LayoutTests/fast/dom/resources/abe.png";
if (window.testRunner)
localImageLocation = testRunner.pathToLocalResource(localImageLocation);

outHTML = "<html><head><scr" + "ipt language=\"JavaScript\" src=\"resources/frame-loading-via-document-write.js\">"+
"</scr" + "ipt></head><body onLoad=\"didImageLoad()\"><table><tr><td>"+
"<div id=\"result\"></div>"+
"<img src=\"" + localImageLocation + "\" id=\"myImg\">"+
"</td></tr></table></body></html>";

frames['middleRow'].document.open("text/html","replace");
frames['middleRow'].document.charset=document.charset;
frames['middleRow'].document.write(outHTML);
frames['middleRow'].document.close();

outHTML = "<html><head><scr" + "ipt language=\"JavaScript\" src=\"resources/frame-loading-via-document-write.js\">"+
"</scr" + "ipt></head><body onLoad=\"didImageLoad()\"><table><tr><td>"+
"<div id=\"result\"></div>"+
"<img src=\"/resources/abe.png\" id=\"myImg\">"+
"</td></tr></table></body></html>";

frames['bottomRow'].document.open("text/html","replace");
frames['bottomRow'].document.charset=document.charset;
frames['bottomRow'].document.write(outHTML);
frames['bottomRow'].document.close();
}

buildFrameset();

</script>
</head>

<body>
<p>JavaScript FAILED! you should not see this.</p>
</body>

</html>

@@ -1,4 +1,3 @@
CONSOLE MESSAGE: line 1: Not allowed to load local resource: abe.png


--------
@@ -4,6 +4,14 @@

<script language="JavaScript">

const expectedLoadCount = 7;
let loadCount = 0;
function finishTestIfLastLoad()
{
if (++loadCount == expectedLoadCount && window.testRunner)
testRunner.notifyDone();
}

function buildFrameset()
{
if (window.testRunner) {
@@ -13,9 +21,9 @@
}

var outHTML="<frameset rows=\"33%, 33%, 33%\">"+
"<frame src=\"\" name=\"topRow\">"+
"<frame src=\"\" name=\"middleRow\">"+
"<frame src=\"\" name=\"bottomRow\">"+
"<frame src=\"\" onload=\"finishTestIfLastLoad()\" name=\"topRow\">"+
"<frame src=\"\" onload=\"finishTestIfLastLoad()\" name=\"middleRow\">"+
"<frame src=\"\" onload=\"finishTestIfLastLoad()\" name=\"bottomRow\">"+
"</frameset>";

document.open("text/html","replace");
@@ -48,7 +56,7 @@
frames['middleRow'].document.close();

outHTML = "<html><head><scr" + "ipt language=\"JavaScript\" src=\"resources/frame-loading-via-document-write.js\">"+
"</scr" + "ipt></head><body onLoad=\"lastTest()\"><table><tr><td>"+
"</scr" + "ipt></head><body onLoad=\"didImageLoad()\"><table><tr><td>"+
"<div id=\"result\"></div>"+
"<img src=\"/resources/abe.png\" id=\"myImg\">"+
"</td></tr></table></body></html>";
@@ -17,11 +17,3 @@ function didImageLoad()
}
}

function lastTest()
{
didImageLoad();

if (window.testRunner)
testRunner.notifyDone();
}

0 comments on commit 75f733d

Please sign in to comment.