| Index: tools/dom/src/native_DOMImplementation.dart
|
| diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
|
| index 2b760a209a8c4ad6216292c059628ad0f63078b3..7b123486440d280197e60513d6faaf667e81d774 100644
|
| --- a/tools/dom/src/native_DOMImplementation.dart
|
| +++ b/tools/dom/src/native_DOMImplementation.dart
|
| @@ -531,6 +531,46 @@ get _pureIsolateTimerFactoryClosure =>
|
| throw new UnimplementedError("Timers on background isolates "
|
| "are not supported in the browser"));
|
|
|
| +class _ScheduleImmediateHelper {
|
| + MutationObserver _observer;
|
| + final DivElement _div = new DivElement();
|
| + Function _callback;
|
| +
|
| + _ScheduleImmediateHelper() {
|
| + // Mutation events get fired as soon as the current event stack is unwound
|
| + // so we just make a dummy event and listen for that.
|
| + _observer = new MutationObserver(_handleMutation);
|
| + _observer.observe(_div, attributes: true);
|
| + }
|
| +
|
| + void _schedule(callback) {
|
| + if (_callback != null) {
|
| + throw new StateError(
|
| + 'Only one immediate callback can be scheduled at once');
|
| + }
|
| + _callback = callback;
|
| + // Toggle it to trigger the mutation event.
|
| + _div.hidden = !_div.hidden;
|
| + }
|
| +
|
| + _handleMutation(List<MutationRecord> mutations, MutationObserver observer) {
|
| + var tmp = _callback;
|
| + _callback = null;
|
| + tmp();
|
| + }
|
| +}
|
| +
|
| +final _ScheduleImmediateHelper _scheduleImmediateHelper =
|
| + new _ScheduleImmediateHelper();
|
| +
|
| +get _scheduleImmediateClosure => (void callback()) {
|
| + _scheduleImmediateHelper._schedule(callback);
|
| +};
|
| +
|
| +get _pureIsolateScheduleImmediateClosure => ((void callback()) =>
|
| + throw new UnimplementedError("scheduleMicrotask in background isolates "
|
| + "are not supported in the browser"));
|
| +
|
| void _initializeCustomElement(Element e) {
|
| _Utils.initializeCustomElement(e);
|
| }
|
|
|