| Index: LayoutTests/dart/Window-postMessage.html
 | 
| diff --git a/LayoutTests/dart/Window-postMessage.html b/LayoutTests/dart/Window-postMessage.html
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..b2df36d07de96f608f10d40eff96cab799313c4b
 | 
| --- /dev/null
 | 
| +++ b/LayoutTests/dart/Window-postMessage.html
 | 
| @@ -0,0 +1,99 @@
 | 
| +<html>
 | 
| +<body>
 | 
| +
 | 
| +<div id='status'></div>
 | 
| +<iframe src='resources/pong.html'></iframe>
 | 
| +
 | 
| +<script type='application/dart'>
 | 
| +import 'dart:html';
 | 
| +
 | 
| +class MessageQueue {
 | 
| +  final WindowBase _main;
 | 
| +  final WindowBase _target;
 | 
| +  final List _messages;
 | 
| +  int _pos = -1;
 | 
| +
 | 
| +  MessageQueue(this._main, this._target, this._messages);
 | 
| +
 | 
| +  void run() {
 | 
| +    scheduleNext();
 | 
| +  }
 | 
| +
 | 
| +  void scheduleNext() {
 | 
| +    _pos++;
 | 
| +    if (_pos == _messages.length) {
 | 
| +      _notifyDone();
 | 
| +      return;
 | 
| +    }
 | 
| +
 | 
| +    if (_pos % 2 == 0) {
 | 
| +      _target.postMessage(currentMessage, '*', []);
 | 
| +    } else {
 | 
| +      _target.postMessage(currentMessage, '*');
 | 
| +    }
 | 
| +    output('message sent: $currentMessage');
 | 
| +  }
 | 
| +
 | 
| +  get currentMessage => _messages[_pos];
 | 
| +
 | 
| +  void _notifyDone() {
 | 
| +    window.postMessage('test-done', '*');
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +void main() {
 | 
| +  IFrameElement iframeElement = document.queryAll('iframe')[0];
 | 
| +  iframeElement.onLoad.listen(test);
 | 
| +}
 | 
| +
 | 
| +test(Event e) {
 | 
| +  WindowBase other = document.queryAll('iframe')[0].contentWindow;
 | 
| +
 | 
| +  // FIXME: consider support for WebCore objects like File, FileList.
 | 
| +  MessageQueue messageQueue = new MessageQueue(window, other, [null, 'I am a string']);
 | 
| +
 | 
| +  window.onMessage.listen(
 | 
| +      (Event event) {
 | 
| +        output('response received: ${event.data}');
 | 
| +        output('event.source === other: ${event.source == other}');
 | 
| +        messageQueue.scheduleNext();
 | 
| +      });
 | 
| +
 | 
| +  try {
 | 
| +    other.postMessage();
 | 
| +  } catch(_) {
 | 
| +    output('.postMessage() throws');
 | 
| +  }
 | 
| +
 | 
| +  try {
 | 
| +    other.postMessage(null);
 | 
| +  } catch (_) {
 | 
| +    output('.postMessage(null) throws');
 | 
| +  }
 | 
| +
 | 
| +  messageQueue.run();
 | 
| +}
 | 
| +
 | 
| +output(var object) {
 | 
| +  final status = document.query('#status');
 | 
| +  status.innerHtml = '${status.innerHtml}$object<br>';
 | 
| +}
 | 
| +
 | 
| +</script>
 | 
| +
 | 
| +<script>
 | 
| +  if (window.testRunner) {
 | 
| +    window.testRunner.dumpAsText();
 | 
| +    window.testRunner.waitUntilDone();
 | 
| +  }
 | 
| +
 | 
| +  window.addEventListener('message', function (e) {
 | 
| +    if (e.data == 'test-done') {
 | 
| +      window.testRunner.notifyDone();
 | 
| +    }
 | 
| +  });
 | 
| +
 | 
| +</script>
 | 
| +
 | 
| +</body>
 | 
| +</html>
 | 
| 
 |