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

Side by Side Diff: sdk/lib/_internal/compiler/js_lib/async_patch.dart

Issue 1212513002: sdk files reorganization to make dart2js a proper package (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: renamed Created 5 years, 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 // Patch file for the dart:async library.
6
7 import 'dart:_js_helper' show
8 patch,
9 Primitives,
10 convertDartClosureToJS,
11 requiresPreamble;
12 import 'dart:_isolate_helper' show
13 IsolateNatives,
14 TimerImpl,
15 leaveJsAsync,
16 enterJsAsync,
17 isWorker;
18
19 import 'dart:_foreign_helper' show JS;
20
21 @patch
22 class _AsyncRun {
23 @patch
24 static void _scheduleImmediate(void callback()) {
25 scheduleImmediateClosure(callback);
26 }
27
28 // Lazily initialized.
29 static final Function scheduleImmediateClosure =
30 _initializeScheduleImmediate();
31
32 static Function _initializeScheduleImmediate() {
33 requiresPreamble();
34 if (JS('', 'self.scheduleImmediate') != null) {
35 return _scheduleImmediateJsOverride;
36 }
37 if (JS('', 'self.MutationObserver') != null &&
38 JS('', 'self.document') != null) {
39 // Use mutationObservers.
40 var div = JS('', 'self.document.createElement("div")');
41 var span = JS('', 'self.document.createElement("span")');
42 var storedCallback;
43
44 internalCallback(_) {
45 leaveJsAsync();
46 var f = storedCallback;
47 storedCallback = null;
48 f();
49 };
50
51 var observer = JS('', 'new self.MutationObserver(#)',
52 convertDartClosureToJS(internalCallback, 1));
53 JS('', '#.observe(#, { childList: true })',
54 observer, div);
55
56 return (void callback()) {
57 assert(storedCallback == null);
58 enterJsAsync();
59 storedCallback = callback;
60 // Because of a broken shadow-dom polyfill we have to change the
61 // children instead a cheap property.
62 // See https://github.com/Polymer/ShadowDOM/issues/468
63 JS('', '#.firstChild ? #.removeChild(#): #.appendChild(#)',
64 div, div, span, div, span);
65 };
66 } else if (JS('', 'self.setImmediate') != null) {
67 return _scheduleImmediateWithSetImmediate;
68 }
69 // TODO(20055): We should use DOM promises when available.
70 return _scheduleImmediateWithTimer;
71 }
72
73 static void _scheduleImmediateJsOverride(void callback()) {
74 internalCallback() {
75 leaveJsAsync();
76 callback();
77 };
78 enterJsAsync();
79 JS('void', 'self.scheduleImmediate(#)',
80 convertDartClosureToJS(internalCallback, 0));
81 }
82
83 static void _scheduleImmediateWithSetImmediate(void callback()) {
84 internalCallback() {
85 leaveJsAsync();
86 callback();
87 };
88 enterJsAsync();
89 JS('void', 'self.setImmediate(#)',
90 convertDartClosureToJS(internalCallback, 0));
91 }
92
93 static void _scheduleImmediateWithTimer(void callback()) {
94 Timer._createTimer(Duration.ZERO, callback);
95 }
96 }
97
98 @patch
99 class DeferredLibrary {
100 @patch
101 Future<Null> load() {
102 throw 'DeferredLibrary not supported. '
103 'please use the `import "lib.dart" deferred as lib` syntax.';
104 }
105 }
106
107 @patch
108 class Timer {
109 @patch
110 static Timer _createTimer(Duration duration, void callback()) {
111 int milliseconds = duration.inMilliseconds;
112 if (milliseconds < 0) milliseconds = 0;
113 return new TimerImpl(milliseconds, callback);
114 }
115
116 @patch
117 static Timer _createPeriodicTimer(Duration duration,
118 void callback(Timer timer)) {
119 int milliseconds = duration.inMilliseconds;
120 if (milliseconds < 0) milliseconds = 0;
121 return new TimerImpl.periodic(milliseconds, callback);
122 }
123 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698