| Index: tools/dom/templates/html/dartium/html_dartium.darttemplate
|
| diff --git a/tools/dom/templates/html/dartium/html_dartium.darttemplate b/tools/dom/templates/html/dartium/html_dartium.darttemplate
|
| index d49408b9553f1b74845986735f92b7be2f6fb2f1..c6a200f94757e4538f55445d043f9a6f5b71ce8f 100644
|
| --- a/tools/dom/templates/html/dartium/html_dartium.darttemplate
|
| +++ b/tools/dom/templates/html/dartium/html_dartium.darttemplate
|
| @@ -250,6 +250,7 @@ Type _getSvgType(String key) {
|
| return null;
|
| }
|
|
|
| +
|
| $if JSINTEROP
|
| // FIXME: Can we make this private?
|
| final htmlBlinkFunctionMap = {
|
| @@ -302,42 +303,42 @@ getHtmlCreateFunction(String key) {
|
| return null;
|
| }
|
|
|
| -Function _getHtmlFunction(String key) {
|
| +Type _getHtmlFunction(String key) {
|
| if (htmlBlinkFunctionMap.containsKey(key)) {
|
| return htmlBlinkFunctionMap[key]();
|
| }
|
| return null;
|
| }
|
|
|
| -Function _getWebGlFunction(String key) {
|
| +Type _getWebGlFunction(String key) {
|
| if (web_glBlinkFunctionMap.containsKey(key)) {
|
| return web_glBlinkFunctionMap[key]();
|
| }
|
| return null;
|
| }
|
|
|
| -Function _getIndexDbFunction(String key) {
|
| +Type _getIndexDbFunction(String key) {
|
| if (indexed_dbBlinkFunctionMap.containsKey(key)) {
|
| return indexed_dbBlinkFunctionMap[key]();
|
| }
|
| return null;
|
| }
|
|
|
| -Function _getWebAudioFunction(String key) {
|
| +Type _getWebAudioFunction(String key) {
|
| if (web_audioBlinkFunctionMap.containsKey(key)) {
|
| return web_audioBlinkFunctionMap[key]();
|
| }
|
| return null;
|
| }
|
|
|
| -Function _getWebSqlFunction(String key) {
|
| +Type _getWebSqlFunction(String key) {
|
| if (web_sqlBlinkFunctionMap.containsKey(key)) {
|
| return web_sqlBlinkFunctionMap[key]();
|
| }
|
| return null;
|
| }
|
|
|
| -Function _getSvgFunction(String key) {
|
| +Type _getSvgFunction(String key) {
|
| if (svgBlinkFunctionMap.containsKey(key)) {
|
| return svgBlinkFunctionMap[key]();
|
| }
|
| @@ -351,17 +352,8 @@ Function _getSvgFunction(String key) {
|
| ********** **********
|
| ******************************************************************************/
|
|
|
| -Rectangle make_dart_rectangle(r) =>
|
| - r == null ? null : new Rectangle(r['left'], r['top'], r['width'], r['height']);
|
| -
|
| -// Need a default constructor for constructing classes with mixins that are
|
| -// also extending NativeFieldWrapperClass2. Defining JsoNativeFieldWrapper
|
| -// extending NativeFieldWrapperClass2 creates a default constructor.
|
| -class JsoNativeFieldWrapper extends NativeFieldWrapperClass2 {}
|
| +Rectangle make_dart_rectangle(r) => new Rectangle(r['top'], r['left'], r['width'], r['height']);
|
|
|
| -// Flag to disable JS interop asserts. Setting to false will speed up the
|
| -// wrap_jso calls.
|
| -bool __interop_checks = true;
|
|
|
| /** Expando for JsObject, used by every Dart class associated with a Javascript
|
| * class (e.g., DOM, WebAudio, etc.).
|
| @@ -370,110 +362,47 @@ bool __interop_checks = true;
|
| /**
|
| * Return the JsObject associated with a Dart class [dartClass_instance].
|
| */
|
| -unwrap_jso(dartClass_instance) {
|
| +js.JsObject unwrap_jso(dartClass_instance) {
|
| try {
|
| - if (dartClass_instance != null)
|
| - return dartClass_instance is NativeFieldWrapperClass2 ?
|
| - dartClass_instance.blink_jsObject : dartClass_instance;
|
| - else
|
| - return null;
|
| + if (dartClass_instance != null)
|
| + return dartClass_instance is! Function ? dartClass_instance.blink_jsObject : dartClass_instance;
|
| + else
|
| + return null;
|
| +// return dartClass_instance.dartium_expando[dartClass_instance.expandoJsObject];
|
| } catch(NoSuchMethodException) {
|
| - // No blink_jsObject then return the dartClass_instance is probably an
|
| - // array that was already converted to a Dart class e.g., Uint8ClampedList.
|
| - return dartClass_instance;
|
| + // No blink_jsObject then return the dartClass_instance is probably an
|
| + // array that was already converted to a Dart class e.g., Uint8ClampedList.
|
| + return dartClass_instance;
|
| }
|
| }
|
|
|
| /**
|
| * Create Dart class that maps to the JS Type, add the JsObject as an expando
|
| - * on the Dart class and return the created Dart class.
|
| + * on the Dart class and return the created Dart class.
|
| */
|
| wrap_jso(jsObject) {
|
| - try {
|
| - if (jsObject is! js.JsObject) {
|
| +try {
|
| +// debug_or_assert("jsObject != null", jsObject != null);
|
| + if (jsObject is! js.JsObject) {
|
| // JS Interop converted the object to a Dart class e.g., Uint8ClampedList.
|
| return jsObject;
|
| - }
|
| - var constructor = jsObject['constructor'];
|
| - if (__interop_checks) {
|
| - if (jsObject is js.JsArray) {
|
| - return jsObject;
|
| - }
|
| -
|
| - debug_or_assert("constructor != null", constructor != null);
|
| - }
|
| - if (constructor == js.context['Object']) {
|
| - return convertNativeObjectToDartMap(jsObject);
|
| - }
|
| - if (constructor == js.context['Promise']) {
|
| - return convertNativePromiseToDartFuture(jsObject);
|
| - }
|
| - var jsTypeName = constructor['name'];
|
| - if (__interop_checks) {
|
| - debug_or_assert("constructor != null && jsTypeName.length > 0", constructor != null && jsTypeName.length > 0);
|
| - }
|
| -
|
| - var dartClass_instance;
|
| - if (jsObject.hasProperty('dart_class')) {
|
| - // Got a dart_class (it's a custom element) use it it's already set up.
|
| - dartClass_instance = jsObject['dart_class'];
|
| - } else {
|
| - var func = getHtmlCreateFunction(jsTypeName);
|
| - if (func != null) {
|
| - dartClass_instance = func();
|
| - dartClass_instance.blink_jsObject = jsObject;
|
| - }
|
| - }
|
| - return dartClass_instance;
|
| - } catch(e, stacktrace){
|
| - if (__interop_checks) {
|
| - if (e is DebugAssertException)
|
| - window.console.log("${e.message}\n ${stacktrace}");
|
| - else
|
| - window.console.log("${stacktrace}");
|
| - }
|
| }
|
| -
|
| - return null;
|
| + var constructor = jsObject['constructor'];
|
| + debug_or_assert("constructor != null", constructor != null);
|
| + var jsTypeName = constructor['name'];
|
| + debug_or_assert("constructor != null && jsTypeName.length > 0", constructor != null && jsTypeName.length > 0);
|
| + var func = getHtmlCreateFunction(jsTypeName);
|
| + debug_or_assert("func != null name = ${jsTypeName}", func != null);
|
| + var dartClass_instance = func();
|
| + dartClass_instance.blink_jsObject = jsObject;
|
| +// dartClass_instance.dartium_expando[dartClass_instance.expandoJsObject] = jsObject;
|
| + return dartClass_instance;
|
| +} catch(e, stacktrace){
|
| + if (e is DebugAssertException)
|
| + window.console.log("${e.message}\n ${stacktrace}");
|
| + else
|
| + window.console.log("${stacktrace}");
|
| }
|
| -
|
| -/**
|
| - * Create Dart class that maps to the JS Type that is the JS type being
|
| - * extended using JS interop createCallback (we need the base type of the
|
| - * custom element) not the Dart created constructor.
|
| - */
|
| -wrap_jso_custom_element(jsObject) {
|
| - try {
|
| - if (jsObject is! js.JsObject) {
|
| - // JS Interop converted the object to a Dart class e.g., Uint8ClampedList.
|
| - return jsObject;
|
| - }
|
| -
|
| - // Find out what object we're extending.
|
| - var objectName = jsObject.toString();
|
| - // Expect to see something like '[object HTMLElement]'.
|
| - if (!objectName.startsWith('[object ')) {
|
| - return jsObject;
|
| - }
|
| -
|
| - var extendsClass = objectName.substring(8, objectName.length - 1);
|
| - var func = getHtmlCreateFunction(extendsClass);
|
| - if (__interop_checks)
|
| - debug_or_assert("func != null name = ${extendsClass}", func != null);
|
| - var dartClass_instance = func();
|
| - dartClass_instance.blink_jsObject = jsObject;
|
| - return dartClass_instance;
|
| - } catch(e, stacktrace){
|
| - if (__interop_checks) {
|
| - if (e is DebugAssertException)
|
| - window.console.log("${e.message}\n ${stacktrace}");
|
| - else
|
| - window.console.log("${stacktrace}");
|
| - }
|
| -
|
| - // Problem?
|
| - return null;
|
| - }
|
| }
|
|
|
| class DebugAssertException implements Exception {
|
| @@ -487,73 +416,20 @@ debug_or_assert(message, expression) {
|
| }
|
| }
|
|
|
| -// TODO(terry): Manage JS interop JsFunctions for each listener used for add/
|
| -// removeEventListener. These JsFunctions will leak look at
|
| -// fixing with weak-refs in C++. The key are the hashcodes of the
|
| -// user's this (this is needed for futures) and listener function.
|
| -Map<int, Map<int, js.JsFunction>> _knownListeners = {};
|
| -
|
| -js.JsFunction wrap_event_listener(theObject, Function listener) {
|
| - var thisHashCode = theObject.hashCode;
|
| - var listenerHashCode = identityHashCode(listener);
|
| -
|
| - _knownListeners.putIfAbsent(thisHashCode, () => new Map<int, js.JsFunction>());
|
| - _knownListeners[thisHashCode].putIfAbsent(listenerHashCode, () =>
|
| - new js.JsFunction.withThis((theObject, event) => listener(wrap_jso(event))));
|
| -
|
| - return _knownListeners[thisHashCode][listenerHashCode];
|
| -}
|
| -
|
| -Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
|
| - var result = new Map();
|
| - var keys = js.context['Object'].callMethod('keys', [jsObject]);
|
| - for (var key in keys) {
|
| - result[key] = wrap_jso(jsObject[key]);
|
| +// Wrap JsObject node list to return a List<node>.
|
| +List<Node> wrap_jso_list(jso_nodes) {
|
| + List<Node> nodes = new List<Node>();
|
| + var collectionLen = jso_nodes['length'];
|
| + for (var i = 0; i < collectionLen; i++) {
|
| + nodes.add(wrap_jso(jso_nodes.callMethod('item', [i])));
|
| }
|
| - return result;
|
| -}
|
| -
|
| -// Converts a flat Dart map into a JavaScript object with properties this is
|
| -// is the Dartium only version it uses dart:js.
|
| -convertDartToNative_Dictionary(Map dict) {
|
| - if (dict == null) return null;
|
| - var jsObject = new js.JsObject(js.context['Object']);
|
| - dict.forEach((String key, value) {
|
| - if (value is List) {
|
| - var jsArray = new js.JsArray();
|
| - value.forEach((elem) {
|
| - jsArray.add(elem is Map ? convertDartToNative_Dictionary(elem): elem);
|
| - });
|
| - jsObject[key] = jsArray;
|
| - } else {
|
| - jsObject[key] = value;
|
| - }
|
| - });
|
| - return jsObject;
|
| -}
|
| -
|
| -// Converts a Dart list into a JsArray. For the Dartium version only.
|
| -convertDartToNative_List(List input) => new js.JsArray()..addAll(input);
|
| -
|
| -// Conversion function place holder (currently not used in dart2js or dartium).
|
| -List convertDartToNative_StringArray(List<String> input) => input;
|
| -
|
| -Future convertNativePromiseToDartFuture(js.JsObject promise) {
|
| - var completer = new Completer();
|
| - var newPromise = promise
|
| - .callMethod("then", [(result) => completer.complete(result)])
|
| - .callMethod("catch", [(result) => completer.completeError(result)]);
|
| - return completer.future;
|
| + var frozen_nodes = new _FrozenElementList._wrap(nodes);
|
| + frozen_nodes.dartClass_instance = jso_nodes;
|
| + return frozen_nodes;
|
| }
|
| -
|
| $else
|
| -class JsoNativeFieldWrapper extends NativeFieldWrapperClass2 {}
|
| -
|
| unwrap_jso(dartClass_instance) => dartClass_instance;
|
| wrap_jso(jsObject) => jsObject;
|
| +wrap_jso_list(jso_nodes) => jso_nodes;
|
| make_dart_rectangle(r) => r;
|
| -convertDartToNative_Dictionary(Map dict) => dict;
|
| -List convertDartToNative_StringArray(List<String> input) => input;
|
| -convertDartToNative_List(List input) => input;
|
| -
|
| $endif
|
|
|