| OLD | NEW | 
|    1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file |    1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
|    2 // for details. All rights reserved. Use of this source code is governed by a |    2 // for details. All rights reserved. Use of this source code is governed by a | 
|    3 // BSD-style license that can be found in the LICENSE file. |    3 // BSD-style license that can be found in the LICENSE file. | 
|    4  |    4  | 
|    5 // Bootstrap support for Dart scripts on the page as this script. |    5 // Bootstrap support for Dart scripts on the page as this script. | 
|    6 if (navigator.webkitStartDart) { |    6 if (navigator.webkitStartDart) { | 
|    7   if (!navigator.webkitStartDart()) { |    7   if (!navigator.webkitStartDart()) { | 
|    8     document.body.innerHTML = 'This build has expired.  Please download a new Da
     rtium at http://www.dartlang.org/dartium/index.html'; |    8     document.body.innerHTML = 'This build has expired.  Please download a new Da
     rtium at http://www.dartlang.org/dartium/index.html'; | 
|    9   } |    9   } | 
|   10 } else { |   10 } else { | 
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  184   ReceivePortSync.prototype.toSendPort = function() { |  184   ReceivePortSync.prototype.toSendPort = function() { | 
|  185     return new LocalSendPortSync(this); |  185     return new LocalSendPortSync(this); | 
|  186   }; |  186   }; | 
|  187  |  187  | 
|  188   ReceivePortSync.prototype.close = function() { |  188   ReceivePortSync.prototype.close = function() { | 
|  189     delete ReceivePortSync.map[this.id]; |  189     delete ReceivePortSync.map[this.id]; | 
|  190   }; |  190   }; | 
|  191  |  191  | 
|  192   if (navigator.webkitStartDart) { |  192   if (navigator.webkitStartDart) { | 
|  193     window.addEventListener('js-sync-message', function(event) { |  193     window.addEventListener('js-sync-message', function(event) { | 
|  194       var data = JSON.parse(event.data); |  194       var data = JSON.parse(getPortSyncEventData(event)); | 
|  195       var deserialized = deserialize(data.message); |  195       var deserialized = deserialize(data.message); | 
|  196       var result = ReceivePortSync.map[data.id].callback(deserialized); |  196       var result = ReceivePortSync.map[data.id].callback(deserialized); | 
|  197       // TODO(vsm): Handle and propagate exceptions. |  197       // TODO(vsm): Handle and propagate exceptions. | 
|  198       dispatchEvent('js-result', serialize(result)); |  198       dispatchEvent('js-result', serialize(result)); | 
|  199     }, false); |  199     }, false); | 
|  200   } |  200   } | 
|  201  |  201  | 
|  202   function LocalSendPortSync(receivePort) { |  202   function LocalSendPortSync(receivePort) { | 
|  203     this.receivePort = receivePort; |  203     this.receivePort = receivePort; | 
|  204   } |  204   } | 
|  205  |  205  | 
|  206   LocalSendPortSync.prototype = new SendPortSync(); |  206   LocalSendPortSync.prototype = new SendPortSync(); | 
|  207  |  207  | 
|  208   LocalSendPortSync.prototype.callSync = function(message) { |  208   LocalSendPortSync.prototype.callSync = function(message) { | 
|  209     // TODO(vsm): Do a direct deepcopy. |  209     // TODO(vsm): Do a direct deepcopy. | 
|  210     message = deserialize(serialize(message)); |  210     message = deserialize(serialize(message)); | 
|  211     return this.receivePort.callback(message); |  211     return this.receivePort.callback(message); | 
|  212   } |  212   } | 
|  213  |  213  | 
|  214   function DartSendPortSync(isolateId, portId) { |  214   function DartSendPortSync(isolateId, portId) { | 
|  215     this.isolateId = isolateId; |  215     this.isolateId = isolateId; | 
|  216     this.portId = portId; |  216     this.portId = portId; | 
|  217   } |  217   } | 
|  218  |  218  | 
|  219   DartSendPortSync.prototype = new SendPortSync(); |  219   DartSendPortSync.prototype = new SendPortSync(); | 
|  220  |  220  | 
|  221   function dispatchEvent(receiver, message) { |  221   function dispatchEvent(receiver, message) { | 
|  222     var string = JSON.stringify(message); |  222     var string = JSON.stringify(message); | 
|  223     var event = document.createEvent('TextEvent'); |  223     var event = document.createEvent('CustomEvent'); | 
|  224     event.initTextEvent(receiver, false, false, window, string); |  224     event.initCustomEvent(receiver, false, false, string); | 
|  225     window.dispatchEvent(event); |  225     window.dispatchEvent(event); | 
|  226   } |  226   } | 
|  227  |  227  | 
 |  228   function getPortSyncEventData(event) { | 
 |  229     return event.detail; | 
 |  230   } | 
 |  231  | 
|  228   DartSendPortSync.prototype.callSync = function(message) { |  232   DartSendPortSync.prototype.callSync = function(message) { | 
|  229     var serialized = serialize(message); |  233     var serialized = serialize(message); | 
|  230     var target = 'dart-port-' + this.isolateId + '-' + this.portId; |  234     var target = 'dart-port-' + this.isolateId + '-' + this.portId; | 
|  231     // TODO(vsm): Make this re-entrant. |  235     // TODO(vsm): Make this re-entrant. | 
|  232     // TODO(vsm): Set this up set once, on the first call. |  236     // TODO(vsm): Set this up set once, on the first call. | 
|  233     var source = target + '-result'; |  237     var source = target + '-result'; | 
|  234     var result = null; |  238     var result = null; | 
|  235     var listener = function (e) { |  239     var listener = function (e) { | 
|  236       result = JSON.parse(e.data); |  240       result = JSON.parse(getPortSyncEventData(e)); | 
|  237     }; |  241     }; | 
|  238     window.addEventListener(source, listener, false); |  242     window.addEventListener(source, listener, false); | 
|  239     dispatchEvent(target, [source, serialized]); |  243     dispatchEvent(target, [source, serialized]); | 
|  240     window.removeEventListener(source, listener, false); |  244     window.removeEventListener(source, listener, false); | 
|  241     return deserialize(result); |  245     return deserialize(result); | 
|  242   } |  246   } | 
|  243 })(); |  247 })(); | 
| OLD | NEW |