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 |