| 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 part of html; | 5 part of html; |
| 6 | 6 |
| 7 class _Property { | 7 class _Property { |
| 8 _Property(this.name) : | 8 _Property(this.name) : |
| 9 _hasValue = false, | 9 _hasValue = false, |
| 10 writable = false, | 10 writable = false, |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 static DateTime doubleToDateTime(double dateTime) { | 117 static DateTime doubleToDateTime(double dateTime) { |
| 118 try { | 118 try { |
| 119 return new DateTime.fromMillisecondsSinceEpoch(dateTime.toInt()); | 119 return new DateTime.fromMillisecondsSinceEpoch(dateTime.toInt()); |
| 120 } catch(_) { | 120 } catch(_) { |
| 121 // TODO(antonnm): treat exceptions properly in bindings and | 121 // TODO(antonnm): treat exceptions properly in bindings and |
| 122 // find out how to treat NaNs. | 122 // find out how to treat NaNs. |
| 123 return null; | 123 return null; |
| 124 } | 124 } |
| 125 } | 125 } |
| 126 | 126 |
| 127 static maybeUnwrapJso(obj) => unwrap_jso(obj); | |
| 128 | |
| 129 static List convertToList(List list) { | 127 static List convertToList(List list) { |
| 130 // FIXME: [possible optimization]: do not copy the array if Dart_IsArray is
fine w/ it. | 128 // FIXME: [possible optimization]: do not copy the array if Dart_IsArray is
fine w/ it. |
| 131 final length = list.length; | 129 final length = list.length; |
| 132 List result = new List(length); | 130 List result = new List(length); |
| 133 result.setRange(0, length, list); | 131 result.setRange(0, length, list); |
| 134 return result; | 132 return result; |
| 135 } | 133 } |
| 136 | 134 |
| 137 static List convertMapToList(Map map) { | 135 static List convertMapToList(Map map) { |
| 138 List result = []; | 136 List result = []; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 } | 180 } |
| 183 | 181 |
| 184 static Element getAndValidateNativeType(Type type, String tagName) { | 182 static Element getAndValidateNativeType(Type type, String tagName) { |
| 185 var element = new Element.tag(tagName); | 183 var element = new Element.tag(tagName); |
| 186 if (!isTypeSubclassOf(type, element.runtimeType)) { | 184 if (!isTypeSubclassOf(type, element.runtimeType)) { |
| 187 return null; | 185 return null; |
| 188 } | 186 } |
| 189 return element; | 187 return element; |
| 190 } | 188 } |
| 191 | 189 |
| 192 static window() => wrap_jso(js.context['window']); | |
| 193 | |
| 194 static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(m
essage); | 190 static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(m
essage); |
| 195 static void spawnDomHelper(Function f, int replyTo) => | 191 static void spawnDomHelper(Function f, int replyTo) => |
| 196 _blink.Blink_Utils.spawnDomHelper(f, replyTo); | 192 _blink.Blink_Utils.spawnDomHelper(f, replyTo); |
| 197 | 193 |
| 198 // TODO(vsm): Make this API compatible with spawnUri. It should also | 194 // TODO(vsm): Make this API compatible with spawnUri. It should also |
| 199 // return a Future<Isolate>. | 195 // return a Future<Isolate>. |
| 200 static spawnDomUri(String uri) => wrap_jso(_blink.Blink_Utils.spawnDomUri(uri)
); | 196 // TODO(jacobr): IS THIS RIGHT? I worry we have broken conversion from Promise
to Future. |
| 197 static spawnDomUri(String uri) => _blink.Blink_Utils.spawnDomUri(uri); |
| 201 | 198 |
| 202 // The following methods were added for debugger integration to make working | 199 // The following methods were added for debugger integration to make working |
| 203 // with the Dart C mirrors API simpler. | 200 // with the Dart C mirrors API simpler. |
| 204 // TODO(jacobr): consider moving them to a separate library. | 201 // TODO(jacobr): consider moving them to a separate library. |
| 205 // If Dart supported dynamic code injection, we would only inject this code | 202 // If Dart supported dynamic code injection, we would only inject this code |
| 206 // when the debugger is invoked. | 203 // when the debugger is invoked. |
| 207 | 204 |
| 208 /** | 205 /** |
| 209 * Strips the private secret prefix from member names of the form | 206 * Strips the private secret prefix from member names of the form |
| 210 * someName@hash. | 207 * someName@hash. |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 767 } | 764 } |
| 768 | 765 |
| 769 /** | 766 /** |
| 770 * Helper to wrap the inspect method on InjectedScriptHost to provide the | 767 * Helper to wrap the inspect method on InjectedScriptHost to provide the |
| 771 * inspect method required for the | 768 * inspect method required for the |
| 772 */ | 769 */ |
| 773 static List consoleApi(host) { | 770 static List consoleApi(host) { |
| 774 return [ | 771 return [ |
| 775 "inspect", | 772 "inspect", |
| 776 (o) { | 773 (o) { |
| 777 host.callMethod("_inspect", [unwrap_jso(o)]); | 774 js.JsNative.callMethod(host, "_inspect", [o]); |
| 778 return o; | 775 return o; |
| 779 }, | 776 }, |
| 780 "dir", | 777 "dir", |
| 781 window().console.dir, | 778 window.console.dir, |
| 782 "dirxml", | 779 "dirxml", |
| 783 window().console.dirxml | 780 window.console.dirxml |
| 784 // FIXME: add copy method. | 781 // FIXME: add copy method. |
| 785 ]; | 782 ]; |
| 786 } | 783 } |
| 787 | 784 |
| 788 static List getMapKeyList(Map map) => map.keys.toList(); | 785 static List getMapKeyList(Map map) => map.keys.toList(); |
| 789 | 786 |
| 790 static bool isNoSuchMethodError(obj) => obj is NoSuchMethodError; | 787 static bool isNoSuchMethodError(obj) => obj is NoSuchMethodError; |
| 791 | 788 |
| 792 static void register(Document document, String tag, Type type, | 789 static void register(Document document, String tag, Type type, |
| 793 String extendsTagName) { | 790 String extendsTagName) { |
| 794 var nativeClass = _validateCustomType(type); | 791 var nativeClass = _validateCustomType(type); |
| 795 | 792 |
| 796 if (extendsTagName == null) { | 793 if (extendsTagName == null) { |
| 797 if (nativeClass.reflectedType != HtmlElement) { | 794 if (nativeClass.reflectedType != HtmlElement) { |
| 798 throw new UnsupportedError('Class must provide extendsTag if base ' | 795 throw new UnsupportedError('Class must provide extendsTag if base ' |
| 799 'native class is not HTMLElement'); | 796 'native class is not HTMLElement'); |
| 800 } | 797 } |
| 801 } | 798 } |
| 802 | 799 |
| 803 _register(document, tag, type, extendsTagName); | 800 _register(document, tag, type, extendsTagName); |
| 804 } | 801 } |
| 805 | 802 |
| 806 static void _register(Document document, String tag, Type customType, | 803 static void _register(Document document, String tag, Type customType, |
| 807 String extendsTagName) => _blink.Blink_Utils.register(unwrap_jso(document),
tag, customType, extendsTagName); | 804 String extendsTagName) => _blink.Blink_Utils.register(document, tag, customT
ype, extendsTagName); |
| 808 | 805 |
| 809 static Element createElement(Document document, String tagName) => | 806 static Element createElement(Document document, String tagName) => |
| 810 wrap_jso(_blink.Blink_Utils.createElement(unwrap_jso(document), tagName)); | 807 _blink.Blink_Utils.createElement(document, tagName); |
| 811 | |
| 812 static Element changeElementWrapper(HtmlElement element, Type type) => | |
| 813 wrap_jso(_blink.Blink_Utils.changeElementWrapper(unwrap_jso(element), type
)); | |
| 814 } | 808 } |
| 815 | 809 |
| 810 // TODO(jacobr): this seems busted. I believe we are actually |
| 811 // giving users real windows for opener, parent, top, etc. |
| 812 // Or worse, we are probaly returning a raw JSObject. |
| 816 class _DOMWindowCrossFrame extends DartHtmlDomObject implements | 813 class _DOMWindowCrossFrame extends DartHtmlDomObject implements |
| 817 WindowBase { | 814 WindowBase { |
| 818 /** Needed because KeyboardEvent is implements. | |
| 819 * TODO(terry): Consider making blink_jsObject private (add underscore) for | |
| 820 * all blink_jsObject. Then needed private wrap/unwrap_jso | |
| 821 * functions that delegate to a public wrap/unwrap_jso. | |
| 822 */ | |
| 823 js.JsObject blink_jsObject; | |
| 824 | 815 |
| 825 _DOMWindowCrossFrame.internal(); | 816 _DOMWindowCrossFrame.internal(); |
| 817 |
| 818 static _createSafe(win) => _blink.Blink_Utils.setInstanceInterceptor(win, _DOM
WindowCrossFrame); |
| 826 | 819 |
| 827 // Fields. | 820 // Fields. |
| 828 HistoryBase get history => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_histo
ry(unwrap_jso(this))); | 821 HistoryBase get history => _blink.Blink_DOMWindowCrossFrame.get_history(this); |
| 829 LocationBase get location => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_loc
ation(unwrap_jso(this))); | 822 LocationBase get location => _blink.Blink_DOMWindowCrossFrame.get_location(thi
s); |
| 830 bool get closed => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_closed(unwrap
_jso(this))); | 823 bool get closed => _blink.Blink_DOMWindowCrossFrame.get_closed(this); |
| 831 WindowBase get opener => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_opener(
unwrap_jso(this))); | 824 WindowBase get opener => _blink.Blink_DOMWindowCrossFrame.get_opener(this); |
| 832 WindowBase get parent => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_parent(
unwrap_jso(this))); | 825 WindowBase get parent => _blink.Blink_DOMWindowCrossFrame.get_parent(this); |
| 833 WindowBase get top => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_top(unwrap
_jso(this))); | 826 WindowBase get top => _blink.Blink_DOMWindowCrossFrame.get_top(this); |
| 834 | 827 |
| 835 // Methods. | 828 // Methods. |
| 836 void close() => _blink.Blink_DOMWindowCrossFrame.close(unwrap_jso(this)); | 829 void close() => _blink.Blink_DOMWindowCrossFrame.close(this); |
| 837 void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List
messagePorts]) => | 830 void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List
messagePorts]) => |
| 838 _blink.Blink_DOMWindowCrossFrame.postMessage(unwrap_jso(this), | 831 _blink.Blink_DOMWindowCrossFrame.postMessage(this, |
| 839 convertDartToNative_SerializedScriptValue(message), targetOrigin, messa
gePorts); | 832 convertDartToNative_SerializedScriptValue(message), targetOrigin, messa
gePorts); |
| 840 | 833 |
| 841 // Implementation support. | 834 // Implementation support. |
| 842 String get typeName => "Window"; | 835 String get typeName => "Window"; |
| 843 | 836 |
| 844 // TODO(efortuna): Remove this method. dartbug.com/16814 | 837 // TODO(efortuna): Remove this method. dartbug.com/16814 |
| 845 Events get on => throw new UnsupportedError( | 838 Events get on => throw new UnsupportedError( |
| 846 'You can only attach EventListeners to your own window.'); | 839 'You can only attach EventListeners to your own window.'); |
| 847 // TODO(efortuna): Remove this method. dartbug.com/16814 | 840 // TODO(efortuna): Remove this method. dartbug.com/16814 |
| 848 void _addEventListener([String type, EventListener listener, bool useCapture]) | 841 void _addEventListener([String type, EventListener listener, bool useCapture]) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 862 // TODO(efortuna): Remove this method. dartbug.com/16814 | 855 // TODO(efortuna): Remove this method. dartbug.com/16814 |
| 863 void removeEventListener(String type, EventListener listener, | 856 void removeEventListener(String type, EventListener listener, |
| 864 [bool useCapture]) => throw new UnsupportedError( | 857 [bool useCapture]) => throw new UnsupportedError( |
| 865 'You can only attach EventListeners to your own window.'); | 858 'You can only attach EventListeners to your own window.'); |
| 866 } | 859 } |
| 867 | 860 |
| 868 class _HistoryCrossFrame extends DartHtmlDomObject implements HistoryBase { | 861 class _HistoryCrossFrame extends DartHtmlDomObject implements HistoryBase { |
| 869 _HistoryCrossFrame.internal(); | 862 _HistoryCrossFrame.internal(); |
| 870 | 863 |
| 871 // Methods. | 864 // Methods. |
| 872 void back() => _blink.Blink_HistoryCrossFrame.back(unwrap_jso(this)); | 865 void back() => _blink.Blink_HistoryCrossFrame.back(this); |
| 873 void forward() => _blink.Blink_HistoryCrossFrame.forward(unwrap_jso(this)); | 866 void forward() => _blink.Blink_HistoryCrossFrame.forward(this); |
| 874 void go(int distance) => _blink.Blink_HistoryCrossFrame.go(unwrap_jso(this), d
istance); | 867 void go(int distance) => _blink.Blink_HistoryCrossFrame.go(this, distance); |
| 875 | 868 |
| 876 // Implementation support. | 869 // Implementation support. |
| 877 String get typeName => "History"; | 870 String get typeName => "History"; |
| 878 } | 871 } |
| 879 | 872 |
| 880 class _LocationCrossFrame extends DartHtmlDomObject implements LocationBase { | 873 class _LocationCrossFrame extends DartHtmlDomObject implements LocationBase { |
| 881 _LocationCrossFrame.internal(); | 874 _LocationCrossFrame.internal(); |
| 882 | 875 |
| 883 // Fields. | 876 // Fields. |
| 884 set href(String h) => _blink.Blink_LocationCrossFrame.set_href(unwrap_jso(this
), h); | 877 set href(String h) => _blink.Blink_LocationCrossFrame.set_href(this, h); |
| 885 | 878 |
| 886 // Implementation support. | 879 // Implementation support. |
| 887 String get typeName => "Location"; | 880 String get typeName => "Location"; |
| 888 } | 881 } |
| 889 | 882 |
| 890 // TODO(vsm): Remove DOM isolate code once we have Dartium isolates | 883 // TODO(vsm): Remove DOM isolate code once we have Dartium isolates |
| 891 // as workers. This is only used to support | 884 // as workers. This is only used to support |
| 892 // printing and timers in background isolates. As workers they should | 885 // printing and timers in background isolates. As workers they should |
| 893 // be able to just do those things natively. | 886 // be able to just do those things natively. |
| 894 | 887 |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1092 _scheduleImmediateHelper._schedule(callback); | 1085 _scheduleImmediateHelper._schedule(callback); |
| 1093 }; | 1086 }; |
| 1094 | 1087 |
| 1095 get _pureIsolateScheduleImmediateClosure => ((void callback()) => | 1088 get _pureIsolateScheduleImmediateClosure => ((void callback()) => |
| 1096 throw new UnimplementedError("scheduleMicrotask in background isolates " | 1089 throw new UnimplementedError("scheduleMicrotask in background isolates " |
| 1097 "are not supported in the browser")); | 1090 "are not supported in the browser")); |
| 1098 | 1091 |
| 1099 // Class for unsupported native browser 'DOM' objects. | 1092 // Class for unsupported native browser 'DOM' objects. |
| 1100 class _UnsupportedBrowserObject extends DartHtmlDomObject { | 1093 class _UnsupportedBrowserObject extends DartHtmlDomObject { |
| 1101 } | 1094 } |
| OLD | NEW |