test_postMessages_window.html (2786B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for postMessages cloning/transferring objects</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 <script src="common_postMessages.js"></script> 8 </head> 9 10 <body> 11 <input id="fileList" type="file"></input> 12 <script type="application/javascript"> 13 14 // PostMessage to the same window. 15 tests.push(function test_windowToWindow() { 16 info("Testing window to window"); 17 var resolve; 18 19 function resolvePromise(data) { 20 if (!resolve) { 21 ok(false, "Unexpected message!"); 22 return; 23 } 24 25 let tmp = resolve; 26 resolve = null; 27 tmp(data); 28 } 29 30 onmessage = function(e) { 31 resolvePromise({ data: e.data, ports: e.ports, error: false }); 32 } 33 34 onmessageerror = function(e) { 35 resolvePromise({ error: true }); 36 } 37 38 runTests({ 39 clonableObjectsEveryWhere: true, 40 clonableObjectsSameProcess: true, 41 transferableObjects: true, 42 send(what, ports) { 43 return new Promise(function(r, rr) { 44 resolve = r; 45 46 try { 47 postMessage(what, '*', ports); 48 } catch(e) { 49 resolve = null; 50 rr(); 51 } 52 }); 53 }, 54 55 finished() { 56 onmessage = null; 57 onmessageerror = null; 58 next(); 59 } 60 }); 61 }); 62 63 // iframe helper class 64 function test_windowToIframeURL(url, clonableObjectsSameProcess) { 65 var resolve; 66 67 onmessage = function(e) { 68 if (!resolve) { 69 ok(false, "Unexpected message!"); 70 return; 71 } 72 73 let tmp = resolve; 74 resolve = null; 75 tmp({ data: e.data, ports: e.ports, error: e.data === "error" }); 76 } 77 78 var ifr = document.createElement('iframe'); 79 ifr.src = url; 80 ifr.onload = function() { 81 runTests({ 82 clonableObjectsEveryWhere: true, 83 clonableObjectsSameProcess, 84 transferableObjects: true, 85 send(what, ports) { 86 return new Promise(function(r, rr) { 87 resolve = r; 88 try { 89 ifr.contentWindow.postMessage(what, '*', ports); 90 } catch(e) { 91 resolve = null; 92 rr(); 93 } 94 }); 95 }, 96 97 finished() { 98 document.body.removeChild(ifr); 99 onmessage = null; 100 next(); 101 } 102 }); 103 } 104 document.body.appendChild(ifr); 105 } 106 107 // PostMessage to iframe 108 tests.push(function test_windowToIframe() { 109 info("Testing window to iframe"); 110 test_windowToIframeURL('iframe_postMessages.html', true); 111 }); 112 113 // PostMessage to cross-origin iframe 114 tests.push(function test_windowToCrossOriginIframe() { 115 info("Testing window to cross-origin iframe"); 116 test_windowToIframeURL('http://example.com/tests/dom/base/test/iframe_postMessages.html', false); 117 }); 118 119 SimpleTest.waitForExplicitFinish(); 120 next(); 121 122 </script> 123 </body> 124 </html>