| <!DOCTYPE html> | 
 | <html> | 
 | <head> | 
 |     <title>child-src-blocked</title> | 
 |     <script src="/resources/testharness.js"></script> | 
 |     <script src="/resources/testharnessreport.js"></script> | 
 |     <script src='../support/logTest.sub.js?logs=["PASS IFrame %231 generated a load event."]'></script> | 
 |     <script> | 
 |         window.addEventListener("message", function(event) { | 
 |             alert_assert(event.data); | 
 |         }, false); | 
 |  | 
 |         function alert_assert(msg) { | 
 |             t_log.step(function() { | 
 |                 if (msg.match(/^FAIL/i)) { | 
 |                     assert_unreached(msg); | 
 |                     t_log.done(); | 
 |                 } | 
 |                 for (var i = 0; i < expected_alerts.length; i++) { | 
 |                     if (expected_alerts[i] == msg) { | 
 |                         assert_true(expected_alerts[i] == msg); | 
 |                         expected_alerts.splice(i, 1); | 
 |                         if (expected_alerts.length == 0) { | 
 |                             t_log.done(); | 
 |                         } | 
 |                         return; | 
 |                     } | 
 |                 } | 
 |                 assert_unreached('unexpected alert: ' + msg); | 
 |                 t_log.done(); | 
 |             }); | 
 |         } | 
 |  | 
 |     </script> | 
 |     <!-- enforcing policy: | 
 | frame-src 'none'; child-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; | 
 | --> | 
 |     <p> | 
 |         A more permissive child-src should not relax restrictions from a less- | 
 |         permissive frame-src.  Directives still combine for least privilege, even when | 
 |         one obsoletes another. | 
 |     </p> | 
 |     <script> | 
 |         window.wasPostTestScriptParsed = true; | 
 |         var loads = 0; | 
 |  | 
 |         function loadEvent() { | 
 |             loads++; | 
 |             log("PASS " + "IFrame #" + loads + " generated a load event."); | 
 |         } | 
 |  | 
 |     </script> | 
 | </head> | 
 |  | 
 | <body> | 
 |     <iframe src="/content-security-policy/blink-contrib/resources/postmessage-fail.html" onload="loadEvent()" onerror="log('FAIL')"></iframe> | 
 |     <div id="log"></div> | 
 |     <script async defer src="../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=frame-src%20'none'"></script> | 
 | </body> | 
 |  | 
 | </html> |