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 String typeNameInChrome(obj) { | 5 String typeNameInChrome(obj) { |
6 String name = JS('String', "#.constructor.name", obj); | 6 String name = JS('String', "#.constructor.name", obj); |
7 if (name == 'Window') return 'DOMWindow'; | 7 if (name == 'Window') return 'DOMWindow'; |
8 if (name == 'CanvasPixelArray') return 'Uint8ClampedArray'; | 8 if (name == 'CanvasPixelArray') return 'Uint8ClampedArray'; |
9 if (name == 'WebKitMutationObserver') return 'MutationObserver'; | 9 if (name == 'WebKitMutationObserver') return 'MutationObserver'; |
10 if (name == 'FormData') return 'DOMFormData'; | |
11 return name; | 10 return name; |
12 } | 11 } |
13 | 12 |
14 String typeNameInSafari(obj) { | 13 String typeNameInSafari(obj) { |
15 String name = JS('String', '#', constructorNameFallback(obj)); | 14 String name = JS('String', '#', constructorNameFallback(obj)); |
16 // Safari is very similar to Chrome. | 15 // Safari is very similar to Chrome. |
17 if (name == 'Window') return 'DOMWindow'; | 16 if (name == 'Window') return 'DOMWindow'; |
18 if (name == 'CanvasPixelArray') return 'Uint8ClampedArray'; | 17 if (name == 'CanvasPixelArray') return 'Uint8ClampedArray'; |
19 if (name == 'WebKitMutationObserver') return 'MutationObserver'; | 18 if (name == 'WebKitMutationObserver') return 'MutationObserver'; |
20 if (name == 'FormData') return 'DOMFormData'; | |
21 return name; | 19 return name; |
22 } | 20 } |
23 | 21 |
24 String typeNameInOpera(obj) { | 22 String typeNameInOpera(obj) { |
25 String name = JS('String', '#', constructorNameFallback(obj)); | 23 String name = JS('String', '#', constructorNameFallback(obj)); |
26 if (name == 'Window') return 'DOMWindow'; | 24 if (name == 'Window') return 'DOMWindow'; |
27 if (name == 'FormData') return 'DOMFormData'; | |
28 return name; | 25 return name; |
29 } | 26 } |
30 | 27 |
31 String typeNameInFirefox(obj) { | 28 String typeNameInFirefox(obj) { |
32 String name = JS('String', '#', constructorNameFallback(obj)); | 29 String name = JS('String', '#', constructorNameFallback(obj)); |
33 if (name == 'Window') return 'DOMWindow'; | 30 if (name == 'Window') return 'DOMWindow'; |
34 if (name == 'Document') return 'HTMLDocument'; | 31 if (name == 'Document') return 'HTMLDocument'; |
35 if (name == 'XMLDocument') return 'Document'; | 32 if (name == 'XMLDocument') return 'Document'; |
36 if (name == 'WorkerMessageEvent') return 'MessageEvent'; | 33 if (name == 'WorkerMessageEvent') return 'MessageEvent'; |
37 if (name == 'DragEvent') return 'MouseEvent'; | 34 if (name == 'DragEvent') return 'MouseEvent'; |
38 if (name == 'DataTransfer') return 'Clipboard'; | 35 if (name == 'DataTransfer') return 'Clipboard'; |
39 if (name == 'FormData') return 'DOMFormData'; | |
40 return name; | 36 return name; |
41 } | 37 } |
42 | 38 |
43 String typeNameInIE(obj) { | 39 String typeNameInIE(obj) { |
44 String name = JS('String', '#', constructorNameFallback(obj)); | 40 String name = JS('String', '#', constructorNameFallback(obj)); |
45 if (name == 'Window') return 'DOMWindow'; | 41 if (name == 'Window') return 'DOMWindow'; |
46 if (name == 'Document') { | 42 if (name == 'Document') { |
47 // IE calls both HTML and XML documents 'Document', so we check for the | 43 // IE calls both HTML and XML documents 'Document', so we check for the |
48 // xmlVersion property, which is the empty string on HTML documents. | 44 // xmlVersion property, which is the empty string on HTML documents. |
49 if (JS('bool', '!!#.xmlVersion', obj)) return 'Document'; | 45 if (JS('bool', '!!#.xmlVersion', obj)) return 'Document'; |
50 return 'HTMLDocument'; | 46 return 'HTMLDocument'; |
51 } | 47 } |
52 if (name == 'CanvasPixelArray') return 'Uint8ClampedArray'; | 48 if (name == 'CanvasPixelArray') return 'Uint8ClampedArray'; |
53 if (name == 'DataTransfer') return 'Clipboard'; | 49 if (name == 'DataTransfer') return 'Clipboard'; |
54 if (name == 'DragEvent') return 'MouseEvent'; | 50 if (name == 'DragEvent') return 'MouseEvent'; |
55 if (name == 'HTMLDDElement') return 'HTMLElement'; | 51 if (name == 'HTMLDDElement') return 'HTMLElement'; |
56 if (name == 'HTMLDTElement') return 'HTMLElement'; | 52 if (name == 'HTMLDTElement') return 'HTMLElement'; |
57 if (name == 'HTMLTableDataCellElement') return 'HTMLTableCellElement'; | 53 if (name == 'HTMLTableDataCellElement') return 'HTMLTableCellElement'; |
58 if (name == 'HTMLTableHeaderCellElement') return 'HTMLTableCellElement'; | 54 if (name == 'HTMLTableHeaderCellElement') return 'HTMLTableCellElement'; |
59 if (name == 'HTMLPhraseElement') return 'HTMLElement'; | 55 if (name == 'HTMLPhraseElement') return 'HTMLElement'; |
60 if (name == 'MSStyleCSSProperties') return 'CSSStyleDeclaration'; | 56 if (name == 'MSStyleCSSProperties') return 'CSSStyleDeclaration'; |
61 if (name == 'MouseWheelEvent') return 'WheelEvent'; | 57 if (name == 'MouseWheelEvent') return 'WheelEvent'; |
62 if (name == 'FormData') return 'DOMFormData'; | |
63 return name; | 58 return name; |
64 } | 59 } |
65 | 60 |
66 String constructorNameFallback(obj) { | 61 String constructorNameFallback(obj) { |
67 var constructor = JS('var', "#.constructor", obj); | 62 var constructor = JS('var', "#.constructor", obj); |
68 if (JS('String', "typeof(#)", constructor) === 'function') { | 63 if (JS('String', "typeof(#)", constructor) === 'function') { |
69 // The constructor isn't null or undefined at this point. Try | 64 // The constructor isn't null or undefined at this point. Try |
70 // to grab hold of its name. | 65 // to grab hold of its name. |
71 var name = JS('var', '#.name', constructor); | 66 var name = JS('var', '#.name', constructor); |
72 // If the name is a non-empty string, we use that as the type | 67 // If the name is a non-empty string, we use that as the type |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 } | 326 } |
332 return result; | 327 return result; |
333 } | 328 } |
334 | 329 |
335 /** | 330 /** |
336 * Called by the compiler to setup [_dynamicMetadata]. | 331 * Called by the compiler to setup [_dynamicMetadata]. |
337 */ | 332 */ |
338 void dynamicSetMetadata(List<List<String>> inputTable) { | 333 void dynamicSetMetadata(List<List<String>> inputTable) { |
339 _dynamicMetadata = buildDynamicMetadata(inputTable); | 334 _dynamicMetadata = buildDynamicMetadata(inputTable); |
340 } | 335 } |
OLD | NEW |