Index: lib/html/dartium/html_dartium.dart |
diff --git a/lib/html/dartium/html_dartium.dart b/lib/html/dartium/html_dartium.dart |
index 1b54e82164675deb88eb58fb009a748d781aa4a6..9e08b0a94a159b1e241188f26c8c5c73938208c7 100644 |
--- a/lib/html/dartium/html_dartium.dart |
+++ b/lib/html/dartium/html_dartium.dart |
@@ -49,10 +49,7 @@ class _Null { |
final _null = const _Null(); |
-int _getNewIsolateId() { |
- // TODO(vsm): We need a Dartium native for this. |
- return 1; |
-} |
+int _getNewIsolateId() => _Utils._getNewIsolateId(); |
bool _callPortInitialized = false; |
var _callPortLastResult = null; |
@@ -64,11 +61,8 @@ _callPortSync(num id, var message) { |
}, false); |
_callPortInitialized = true; |
} |
- var data = JSON.stringify({ 'id': id, 'message': message }); |
- var event = document.$dom_createEvent('TextEvent'); |
- event.initTextEvent('js-sync-message', false, false, window, data); |
assert(_callPortLastResult == null); |
- window.$dom_dispatchEvent(event); |
+ _dispatchEvent('js-sync-message', {'id': id, 'message': message}); |
var result = _callPortLastResult; |
_callPortLastResult = null; |
return result; |
@@ -41080,28 +41074,22 @@ class ReceivePortSync { |
String get _listenerName() => _getListenerName(_isolateId, _portId); |
void receive(callback(var message)) { |
- // Clear old listener. |
- if (_callback != null) { |
- window.on[_listenerName].remove(_listener); |
- } |
- |
_callback = callback; |
- |
- // Install new listener. |
- var sendport = toSendPort(); |
- _listener = (TextEvent e) { |
- var data = JSON.parse(e.data); |
- var replyTo = data[0]; |
- var message = _deserialize(data[1]); |
- var result = sendport.callSync(message); |
- _dispatchEvent(replyTo, _serialize(result)); |
- }; |
- window.on[_listenerName].add(_listener); |
+ if (_listener === null) { |
+ _listener = (TextEvent e) { |
+ var data = JSON.parse(e.data); |
+ var replyTo = data[0]; |
+ var message = _deserialize(data[1]); |
+ var result = _callback(message); |
+ _dispatchEvent(replyTo, _serialize(result)); |
+ }; |
+ window.on[_listenerName].add(_listener); |
+ } |
} |
void close() { |
_portMap.remove(_portId); |
- window.on[_listenerName].remove(_listener); |
+ if (_listener !== null) window.on[_listenerName].remove(_listener); |
} |
SendPortSync toSendPort() { |
@@ -41651,6 +41639,7 @@ class _Utils { |
static window() native "Utils_window"; |
static SendPort spawnDomIsolateImpl(Window window, String entryPoint) native "Utils_spawnDomIsolate"; |
+ static int _getNewIsolateId() native "Utils_getNewIsolateId"; |
} |
Utils_print(String message) native "Utils_print"; |