| <!doctype html> | |
| <title>PaymentRequest setting allowpaymentrequest after document creation, before response</title> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <div id="log"></div> | |
| <script> | |
| // Set allowpaymentrequest attribute in a timeout after <iframe> has been inserted to the document. | |
| // The iframe's response is delayed so it happens after the attribute is set. | |
| // The allowpaymentrequest flag is *not* set when the browsing context is created | |
| // (when the <iframe> is inserted), because there's no attribute at that time, | |
| // and the flag stays as not set when the attribute is added because per spec | |
| // the flag is only set when a browsing context is created and when it's navigated. | |
| async_test((t) => { | |
| const iframe = document.createElement('iframe'); | |
| // no allowpaymentrequest attribute | |
| const path = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); | |
| iframe.src = "https://{{domains[www1]}}:{{ports[https][0]}}" + path + "echo-PaymentRequest.html?pipe=trickle(d3)"; | |
| iframe.onload = t.step_func(() => { | |
| iframe.contentWindow.postMessage('What is the result of new PaymentRequest(...)?', '*'); | |
| }); | |
| window.onmessage = t.step_func_done((e) => { | |
| assert_equals(e.data.message, 'Exception'); | |
| assert_array_equals(e.data.details, [true /* ex instanceof DOMException */, DOMException.SECURITY_ERR, 'SecurityError']); | |
| }); | |
| document.body.appendChild(iframe); | |
| setTimeout(() => { | |
| iframe.allowPaymentRequest = true; | |
| }, 10); | |
| }); | |
| </script> |