Fix SendPortSync dispatch for FF

TextEvent (used previously) does not work on FireFox

Review URL: https://codereview.chromium.org//10960062

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@12857 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
vsm@google.com 2012-09-25 17:33:34 +00:00
parent 2b19ab8ff4
commit 5031069f74
6 changed files with 29 additions and 25 deletions

View file

@ -191,7 +191,7 @@ function ReceivePortSync() {
if (navigator.webkitStartDart) {
window.addEventListener('js-sync-message', function(event) {
var data = JSON.parse(event.data);
var data = JSON.parse(getPortSyncEventData(event));
var deserialized = deserialize(data.message);
var result = ReceivePortSync.map[data.id].callback(deserialized);
// TODO(vsm): Handle and propagate exceptions.
@ -220,11 +220,15 @@ function ReceivePortSync() {
function dispatchEvent(receiver, message) {
var string = JSON.stringify(message);
var event = document.createEvent('TextEvent');
event.initTextEvent(receiver, false, false, window, string);
var event = document.createEvent('CustomEvent');
event.initCustomEvent(receiver, false, false, string);
window.dispatchEvent(event);
}
function getPortSyncEventData(event) {
return event.detail;
}
DartSendPortSync.prototype.callSync = function(message) {
var serialized = serialize(message);
var target = 'dart-port-' + this.isolateId + '-' + this.portId;
@ -233,7 +237,7 @@ function ReceivePortSync() {
var source = target + '-result';
var result = null;
var listener = function (e) {
result = JSON.parse(e.data);
result = JSON.parse(getPortSyncEventData(e));
};
window.addEventListener(source, listener, false);
dispatchEvent(target, [source, serialized]);

View file

@ -40531,8 +40531,8 @@ class _RemoteSendPortSync implements SendPortSync {
// TODO(vsm): Set this up set once, on the first call.
var source = '$target-result';
var result = null;
var listener = (TextEvent e) {
result = JSON.parse(e.data);
var listener = (Event e) {
result = JSON.parse(e.detail);
};
window.on[source].add(listener);
_dispatchEvent(target, [source, message]);
@ -40603,8 +40603,8 @@ class ReceivePortSync {
void receive(callback(var message)) {
_callback = callback;
if (_listener === null) {
_listener = (TextEvent e) {
var data = JSON.parse(e.data);
_listener = (Event e) {
var data = JSON.parse(e.detail);
var replyTo = data[0];
var message = _deserialize(data[1]);
var result = _callback(message);
@ -40635,8 +40635,8 @@ class ReceivePortSync {
get _isolateId => ReceivePortSync._isolateId;
void _dispatchEvent(String receiver, var message) {
var event = document.$dom_createEvent('TextEvent');
event.initTextEvent(receiver, false, false, window, JSON.stringify(message));
var event = document.$dom_createEvent('CustomEvent');
event.initCustomEvent(receiver, false, false, JSON.stringify(message));
window.$dom_dispatchEvent(event);
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file

View file

@ -43552,8 +43552,8 @@ class _RemoteSendPortSync implements SendPortSync {
// TODO(vsm): Set this up set once, on the first call.
var source = '$target-result';
var result = null;
var listener = (TextEvent e) {
result = JSON.parse(e.data);
var listener = (Event e) {
result = JSON.parse(e.detail);
};
window.on[source].add(listener);
_dispatchEvent(target, [source, message]);
@ -43624,8 +43624,8 @@ class ReceivePortSync {
void receive(callback(var message)) {
_callback = callback;
if (_listener === null) {
_listener = (TextEvent e) {
var data = JSON.parse(e.data);
_listener = (Event e) {
var data = JSON.parse(e.detail);
var replyTo = data[0];
var message = _deserialize(data[1]);
var result = _callback(message);
@ -43656,8 +43656,8 @@ class ReceivePortSync {
get _isolateId => ReceivePortSync._isolateId;
void _dispatchEvent(String receiver, var message) {
var event = document.$dom_createEvent('TextEvent');
event.initTextEvent(receiver, false, false, window, JSON.stringify(message));
var event = document.$dom_createEvent('CustomEvent');
event.initCustomEvent(receiver, false, false, JSON.stringify(message));
window.$dom_dispatchEvent(event);
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file

View file

@ -89,8 +89,8 @@ class _RemoteSendPortSync implements SendPortSync {
// TODO(vsm): Set this up set once, on the first call.
var source = '$target-result';
var result = null;
var listener = (TextEvent e) {
result = JSON.parse(e.data);
var listener = (Event e) {
result = JSON.parse(_getPortSyncEventData(e));
};
window.on[source].add(listener);
_dispatchEvent(target, [source, message]);
@ -161,8 +161,8 @@ class ReceivePortSync {
void receive(callback(var message)) {
_callback = callback;
if (_listener === null) {
_listener = (TextEvent e) {
var data = JSON.parse(e.data);
_listener = (Event e) {
var data = JSON.parse(_getPortSyncEventData(e));
var replyTo = data[0];
var message = _deserialize(data[1]);
var result = _callback(message);
@ -193,7 +193,9 @@ class ReceivePortSync {
get _isolateId => ReceivePortSync._isolateId;
void _dispatchEvent(String receiver, var message) {
var event = document.$dom_createEvent('TextEvent');
event.initTextEvent(receiver, false, false, window, JSON.stringify(message));
var event = document.$dom_createEvent('CustomEvent');
event.initCustomEvent(receiver, false, false, JSON.stringify(message));
window.$dom_dispatchEvent(event);
}
String _getPortSyncEventData(CustomEvent event) => event.detail;

View file

@ -69,7 +69,7 @@ var _callPortLastResult = null;
_callPortSync(num id, var message) {
if (!_callPortInitialized) {
window.on['js-result'].add((event) {
_callPortLastResult = JSON.parse(event.data);
_callPortLastResult = JSON.parse(_getPortSyncEventData(event));
}, false);
_callPortInitialized = true;
}

View file

@ -128,8 +128,6 @@ indexeddb_3_test: Fail # Need window.mozIndexedDB instead of window.webkitIn
indexeddb_4_test: Fail # Need window.mozIndexedDB instead of window.webkitIndexedDB
# setup code fails. prepare. (DOM callback has errors) Caught [object Event]
inner_frame_test: Skip
js_interop_3_test: Fail
js_interop_4_test: Fail
# Interfaces not implemented: SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable
svg_3_test: Fail
svgelement_test: Fail