| 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 |