Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: client/dom/generated/wrapping_dom.js

Issue 8370031: Fix for events fired on different isolates. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove Isolate.bind. Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: client/dom/generated/wrapping_dom.js
diff --git a/client/dom/generated/wrapping_dom.js b/client/dom/generated/wrapping_dom.js
index 53674ebed9d6e0a3db0218a0d26e2358a46d6bf7..e3ad06816c57ad736836f1db0cb47680e4f15287 100644
--- a/client/dom/generated/wrapping_dom.js
+++ b/client/dom/generated/wrapping_dom.js
@@ -26757,16 +26757,8 @@ function __dom_wrap_primitive(ptr) {
return (ptr === null) ? (void 0) : ptr;
}
-
-function __dom_finish_unwrap_function(fn, unwrapped) {
- fn.$dom = unwrapped;
- var isolatetoken = __dom_isolate_token();
- __dom_set_cached('dart_wrapper', unwrapped, isolatetoken, fn);
- return unwrapped;
-}
-
/** @suppress {duplicate} */
-function __dom_unwrap(obj) {
+function __dom_unwrap(obj, dropargs) {
if (obj == null) {
return (void 0);
}
@@ -26774,12 +26766,31 @@ function __dom_unwrap(obj) {
return obj.$dom;
}
if (obj instanceof Function) { // BUGBUG: function from other IFrame
- var unwrapped = function () {
- var args = Array.prototype.slice.call(arguments);
- return $dartcall(obj, args.map(__dom_wrap));
+ var isolatetoken = __dom_isolate_token();
+ var unwrapped = __dom_get_cached('dart_unwrapped', obj, isolatetoken);
+ if (unwrapped) {
+ return unwrapped;
+ }
+ var isolate = isolate$current;
+ unwrapped = function () {
+ var old = isolate$current;
+ isolate$current = isolate;
+ try {
+ if (dropargs) {
+ return $dartcall(obj, []);
+ } else {
+ var args = Array.prototype.slice.call(arguments);
+ return $dartcall(obj, args.map(__dom_wrap));
+ }
+ } finally {
+ isolate$current = old;
+ // TODO(vsm): This really needs to go elsewhere.
+ isolate$runEventLoop();
+ }
// BUGBUG? Should the result be unwrapped? Or is it always void/bool ?
};
- return __dom_finish_unwrap_function(obj, unwrapped);
+ __dom_set_cached('dart_unwrapped', obj, isolatetoken, unwrapped);
+ return unwrapped;
}
return obj;
}
@@ -26788,9 +26799,7 @@ function __dom_unwrap_TimeoutHandler_function(fn) {
// Some browsers (e.g. FF) pass data to the timeout function, others do not.
// Dart's TimeoutHandler takes no arguments, so drop any arguments passed to
// the unwrapped callback.
- return __dom_finish_unwrap_function(
- fn,
- function() { return $dartcall(fn, []); });
+ return __dom_unwrap(fn, true);
}
// Declared in src/GlobalProperties.dart
« no previous file with comments | « no previous file | client/dom/scripts/template_wrapping_dom.js » ('j') | client/testing/unittest/unittestsuite.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698