mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:01:42 +00:00
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:
parent
2b19ab8ff4
commit
5031069f74
|
@ -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]);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue