| OLD | NEW |
| (Empty) |
| 1 <html> | |
| 2 <body> | |
| 3 | |
| 4 <div id='status'></div> | |
| 5 <iframe src='resources/pong.html'></iframe> | |
| 6 | |
| 7 <script type='application/dart'> | |
| 8 #import('dart:dom'); | |
| 9 | |
| 10 class MessageQueue { | |
| 11 MessageQueue(this._main, this._target, this._messages) : _pos = -1; | |
| 12 | |
| 13 void run() { | |
| 14 scheduleNext(); | |
| 15 } | |
| 16 | |
| 17 void scheduleNext() { | |
| 18 _pos++; | |
| 19 if (_pos == _messages.length) { | |
| 20 _notifyDone(); | |
| 21 return; | |
| 22 } | |
| 23 | |
| 24 if (_pos % 2 == 0) { | |
| 25 _target.postMessage(currentMessage, [], '*'); | |
| 26 } else { | |
| 27 _target.postMessage(currentMessage, '*'); | |
| 28 } | |
| 29 output('message sent: $currentMessage'); | |
| 30 } | |
| 31 | |
| 32 get currentMessage() => _messages[_pos]; | |
| 33 | |
| 34 final Window _main; | |
| 35 final Window _target; | |
| 36 final List<Object> _messages; | |
| 37 int _pos; | |
| 38 | |
| 39 void _notifyDone() { | |
| 40 assert(null !== layoutTestController); | |
| 41 layoutTestController.notifyDone(); | |
| 42 } | |
| 43 } | |
| 44 | |
| 45 void main() { | |
| 46 if (null !== layoutTestController) { | |
| 47 layoutTestController.dumpAsText(); | |
| 48 layoutTestController.waitUntilDone(); | |
| 49 } | |
| 50 | |
| 51 HTMLIFrameElement iframeElement = document.getElementsByTagName('iframe')[0]; | |
| 52 iframeElement.addEventListener('load', test, true); | |
| 53 } | |
| 54 | |
| 55 test(Event e) { | |
| 56 Window other = document.getElementsByTagName('iframe')[0].contentWindow; | |
| 57 | |
| 58 // FIXME: consider support for WebCore objects like File, FileList. | |
| 59 MessageQueue messageQueue = new MessageQueue(window, other, [null, 'I am a str
ing']); | |
| 60 | |
| 61 window.addEventListener( | |
| 62 'message', | |
| 63 (Event event) { | |
| 64 output('response received: ${event.data}'); | |
| 65 output('event.source === other: ' + (event.source === other)); | |
| 66 messageQueue.scheduleNext(); | |
| 67 }, | |
| 68 false); | |
| 69 | |
| 70 try { | |
| 71 other.postMessage(); | |
| 72 } catch (var e) { | |
| 73 output('.postMessage() throws: ${e}'); | |
| 74 } | |
| 75 | |
| 76 try { | |
| 77 other.postMessage(null); | |
| 78 } catch (var e) { | |
| 79 output('.postMessage(null) throws: ${e}'); | |
| 80 } | |
| 81 | |
| 82 messageQueue.run(); | |
| 83 } | |
| 84 | |
| 85 output(var object) { | |
| 86 final status = document.getElementById('status'); | |
| 87 status.innerHTML += '$object<br>'; | |
| 88 } | |
| 89 | |
| 90 </script> | |
| 91 | |
| 92 <script> | |
| 93 // Fake script to trigger Dart execution. | |
| 94 </script> | |
| 95 | |
| 96 </body> | |
| 97 </html> | |
| OLD | NEW |