OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // DO NOT EDIT | |
6 // Auto-generated dart:html library. | |
7 | |
8 #library('html'); | |
9 | |
10 #import('dart:isolate'); | |
11 #import('dart:json'); | |
12 | |
13 $!GENERATED_DART_FILES | |
14 | |
15 #source('../../dom/src/EventListener.dart'); | |
16 #source('../../dom/src/KeyLocation.dart'); | |
17 #source('../../dom/src/KeyName.dart'); | |
18 #source('../../dom/src/ReadyState.dart'); | |
19 #source('../../dom/src/_Collections.dart'); | |
20 #source('../../dom/src/_XMLHttpRequestUtils.dart'); | |
21 #source('../../html/src/IDBOpenDBRequest.dart'); | |
22 #source('../../html/src/Measurement.dart'); | |
23 #source('../../html/src/shared_FactoryProviders.dart'); | |
24 #source('../../html/src/frog_DOMImplementation.dart'); | |
25 #source('../../html/src/frog_FactoryProviders.dart'); | |
26 #source('../../html/src/frog_IDBKeyRangeFactoryProvider.dart'); | |
27 #source('../../html/src/frog_IDBOpenDBRequestImplementation.dart'); | |
28 #source('../../html/src/frog_LocationWrapper.dart'); | |
29 #source('../../dom/src/frog_TypedArrayFactoryProvider.dart'); | |
30 #source('../../html/src/_Testing.dart'); | |
31 #source('../../html/src/Device.dart'); | |
32 #source('../../dom/src/_ListIterators.dart'); | |
33 #source('../../dom/src/_Lists.dart'); | |
34 #source('../../isolate/serialization.dart'); | |
35 | |
36 | |
37 Window get window() native "return window;"; | |
38 _WindowImpl get _window() native "return window;"; | |
39 | |
40 Document get document() native "return document;"; | |
41 | |
42 _DocumentImpl get _document() native "return document;"; | |
43 | |
44 Element query(String selector) => _document.query(selector); | |
45 ElementList queryAll(String selector) => _document.queryAll(selector); | |
46 | |
47 // Workaround for tags like <cite> that lack their own Element subclass -- | |
48 // Dart issue 1990. | |
49 class _HTMLElementImpl extends _ElementImpl native "*HTMLElement" { | |
50 } | |
51 | |
52 // TODO(vsm): Move this to a separate Isolates.dart file. | |
53 _serialize(var message) { | 5 _serialize(var message) { |
54 return new _JsSerializer().traverse(message); | 6 return new _JsSerializer().traverse(message); |
55 } | 7 } |
56 | 8 |
57 class _JsSerializer extends _Serializer { | 9 class _JsSerializer extends _Serializer { |
58 | 10 |
59 visitSendPortSync(SendPortSync x) { | 11 visitSendPortSync(SendPortSync x) { |
60 if (x is _JsSendPortSync) return visitJsSendPortSync(x); | 12 if (x is _JsSendPortSync) return visitJsSendPortSync(x); |
61 if (x is _LocalSendPortSync) return visitLocalSendPortSync(x); | 13 if (x is _LocalSendPortSync) return visitLocalSendPortSync(x); |
62 if (x is _RemoteSendPortSync) return visitRemoteSendPortSync(x); | 14 if (x is _RemoteSendPortSync) return visitRemoteSendPortSync(x); |
63 throw "Illegal underlying port $x"; | 15 throw "Illegal underlying port $x"; |
64 } | 16 } |
65 | 17 |
66 visitJsSendPortSync(_JsSendPortSync x) { | 18 visitJsSendPortSync(_JsSendPortSync x) { |
67 return [ 'sendport', 'nativejs', x._id ]; | 19 return [ 'sendport', 'nativejs', x._id ]; |
68 } | 20 } |
69 | 21 |
70 visitLocalSendPortSync(_LocalSendPortSync x) { | 22 visitLocalSendPortSync(_LocalSendPortSync x) { |
71 return [ 'sendport', 'dart2js', | 23 return [ 'sendport', 'dart', |
72 ReceivePortSync._isolateId, x._receivePort._portId ]; | 24 ReceivePortSync._isolateId, x._receivePort._portId ]; |
73 } | 25 } |
74 | 26 |
75 visitRemoteSendPortSync(_RemoteSendPortSync x) { | 27 visitRemoteSendPortSync(_RemoteSendPortSync x) { |
76 return [ 'sendport', 'dart2js', | 28 return [ 'sendport', 'dart', |
77 x._receivePort._isolateId, x._receivePort._portId ]; | 29 x._receivePort._isolateId, x._receivePort._portId ]; |
78 } | 30 } |
79 } | 31 } |
80 | 32 |
81 _deserialize(var message) { | 33 _deserialize(var message) { |
82 return new _JsDeserializer().deserialize(message); | 34 return new _JsDeserializer().deserialize(message); |
83 } | 35 } |
84 | 36 |
85 class _JsDeserializer extends _Deserializer { | 37 class _JsDeserializer extends _Deserializer { |
86 | 38 |
87 deserializeSendPort(List x) { | 39 deserializeSendPort(List x) { |
88 String tag = x[1]; | 40 String tag = x[1]; |
89 switch (tag) { | 41 switch (tag) { |
90 case 'nativejs': | 42 case 'nativejs': |
91 num id = x[2]; | 43 num id = x[2]; |
92 return new _JsSendPortSync(id); | 44 return new _JsSendPortSync(id); |
93 case 'dart2js': | 45 case 'dart': |
94 num isolateId = x[2]; | 46 num isolateId = x[2]; |
95 num portId = x[3]; | 47 num portId = x[3]; |
96 return ReceivePortSync._lookup(isolateId, portId); | 48 return ReceivePortSync._lookup(isolateId, portId); |
97 default: | 49 default: |
98 throw 'Illegal SendPortSync type: $tag'; | 50 throw 'Illegal SendPortSync type: $tag'; |
99 } | 51 } |
100 } | 52 } |
101 | 53 |
102 } | 54 } |
103 | 55 |
104 // The receiver is JS. | 56 // The receiver is JS. |
105 class _JsSendPortSync implements SendPortSync { | 57 class _JsSendPortSync implements SendPortSync { |
106 | 58 |
107 num _id; | 59 num _id; |
108 _JsSendPortSync(this._id); | 60 _JsSendPortSync(this._id); |
109 | 61 |
110 callSync(var message) { | 62 callSync(var message) { |
111 var serialized = _serialize(message); | 63 var serialized = _serialize(message); |
112 var result = | 64 var result = _callPortSync(_id, serialized); |
113 JS('var', @'ReceivePortSync.dispatchCall(#, #)', _id, serialized); | |
114 return _deserialize(result); | 65 return _deserialize(result); |
115 } | 66 } |
116 | 67 |
117 } | 68 } |
118 | 69 |
119 // TODO(vsm): Handle Dartium isolates. | 70 // TODO(vsm): Differentiate between Dart2Js and Dartium isolates. |
120 // The receiver is a different Dart isolate, compiled to JS. | 71 // The receiver is a different Dart isolate, compiled to JS. |
121 class _RemoteSendPortSync implements SendPortSync { | 72 class _RemoteSendPortSync implements SendPortSync { |
122 | 73 |
123 int _isolateId; | 74 int _isolateId; |
124 int _portId; | 75 int _portId; |
125 _RemoteSendPortSync(this._isolateId, this._portId); | 76 _RemoteSendPortSync(this._isolateId, this._portId); |
126 | 77 |
127 callSync(var message) { | 78 callSync(var message) { |
128 var serialized = _serialize(message); | 79 var serialized = _serialize(message); |
129 var result = _call(_isolateId, _portId, serialized); | 80 var result = _call(_isolateId, _portId, serialized); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 } | 112 } |
162 } | 113 } |
163 | 114 |
164 // TODO(vsm): Move this to dart:isolate. This will take some | 115 // TODO(vsm): Move this to dart:isolate. This will take some |
165 // refactoring as there are dependences here on the DOM. Users | 116 // refactoring as there are dependences here on the DOM. Users |
166 // interact with this class (or interface if we change it) directly - | 117 // interact with this class (or interface if we change it) directly - |
167 // new ReceivePortSync. I think most of the DOM logic could be | 118 // new ReceivePortSync. I think most of the DOM logic could be |
168 // delayed until the corresponding SendPort is registered on the | 119 // delayed until the corresponding SendPort is registered on the |
169 // window. | 120 // window. |
170 | 121 |
171 // A Dart2JS ReceivePortSync (tagged 'dart2js' when serialized) is | 122 // A Dart ReceivePortSync (tagged 'dart' when serialized) is |
172 // identifiable / resolvable by the combination of its isolateid and | 123 // identifiable / resolvable by the combination of its isolateid and |
173 // portid. When a corresponding SendPort is used within the same | 124 // portid. When a corresponding SendPort is used within the same |
174 // isolate, the _portMap below can be used to obtain the | 125 // isolate, the _portMap below can be used to obtain the |
175 // ReceivePortSync directly. Across isolates (or from JS), an | 126 // ReceivePortSync directly. Across isolates (or from JS), an |
176 // EventListener can be used to communicate with the port indirectly. | 127 // EventListener can be used to communicate with the port indirectly. |
177 class ReceivePortSync { | 128 class ReceivePortSync { |
178 | 129 |
179 static Map<int, ReceivePortSync> _portMap; | 130 static Map<int, ReceivePortSync> _portMap; |
180 static int _portIdCount; | 131 static int _portIdCount; |
181 static int _cachedIsolateId; | 132 static int _cachedIsolateId; |
(...skipping 12 matching lines...) Expand all Loading... |
194 } | 145 } |
195 | 146 |
196 static int get _isolateId() { | 147 static int get _isolateId() { |
197 // TODO(vsm): Make this coherent with existing isolate code. | 148 // TODO(vsm): Make this coherent with existing isolate code. |
198 if (_cachedIsolateId == null) { | 149 if (_cachedIsolateId == null) { |
199 _cachedIsolateId = _getNewIsolateId(); | 150 _cachedIsolateId = _getNewIsolateId(); |
200 } | 151 } |
201 return _cachedIsolateId; | 152 return _cachedIsolateId; |
202 } | 153 } |
203 | 154 |
204 static int _getNewIsolateId() native @''' | |
205 if (!window.$dart$isolate$counter) { | |
206 window.$dart$isolate$counter = 1; | |
207 } | |
208 return window.$dart$isolate$counter++; | |
209 '''; | |
210 | |
211 static String _getListenerName(isolateId, portId) => | 155 static String _getListenerName(isolateId, portId) => |
212 'dart-port-$isolateId-$portId'; | 156 'dart-port-$isolateId-$portId'; |
213 String get _listenerName() => _getListenerName(_isolateId, _portId); | 157 String get _listenerName() => _getListenerName(_isolateId, _portId); |
214 | 158 |
215 void receive(callback(var message)) { | 159 void receive(callback(var message)) { |
216 // Clear old listener. | 160 // Clear old listener. |
217 if (_callback != null) { | 161 if (_callback != null) { |
218 window.on[_listenerName].remove(_listener); | 162 window.on[_listenerName].remove(_listener); |
219 } | 163 } |
220 | 164 |
(...skipping 27 matching lines...) Expand all Loading... |
248 return new _RemoteSendPortSync(isolateId, portId); | 192 return new _RemoteSendPortSync(isolateId, portId); |
249 } | 193 } |
250 } | 194 } |
251 } | 195 } |
252 | 196 |
253 void _dispatchEvent(String receiver, var message) { | 197 void _dispatchEvent(String receiver, var message) { |
254 var event = document.$dom_createEvent('TextEvent'); | 198 var event = document.$dom_createEvent('TextEvent'); |
255 event.initTextEvent(receiver, false, false, window, JSON.stringify(message)); | 199 event.initTextEvent(receiver, false, false, window, JSON.stringify(message)); |
256 window.$dom_dispatchEvent(event); | 200 window.$dom_dispatchEvent(event); |
257 } | 201 } |
OLD | NEW |