| Index: sdk/lib/html/html_common/conversions_dartium.dart
|
| diff --git a/sdk/lib/html/html_common/conversions_dartium.dart b/sdk/lib/html/html_common/conversions_dartium.dart
|
| index 2403387b4e608e457e43e88cf080c08d76d2b535..3e3e5c10529b126d8d37063ab1ca17b996117080 100644
|
| --- a/sdk/lib/html/html_common/conversions_dartium.dart
|
| +++ b/sdk/lib/html/html_common/conversions_dartium.dart
|
| @@ -126,9 +126,14 @@ wrap_jso(jsObject) {
|
| }
|
|
|
| if (jsObject is js.JsArray) {
|
| - var wrappingList = new DartHtmlWrappingList(jsObject);
|
| - js.setDartHtmlWrapperFor(jsObject, wrappingList);
|
| - return wrappingList;
|
| + wrapper = new js.JSArray.create(jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, wrapper);
|
| + return wrapper;
|
| + }
|
| + if (jsObject is js.JsFunction) {
|
| + wrapper = new js.JSFunction.create(jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, wrapper);
|
| + return wrapper;
|
| }
|
|
|
| // Try the most general type conversions on it.
|
| @@ -144,14 +149,15 @@ wrap_jso(jsObject) {
|
| if (constructor == null) {
|
| // Perfectly valid case for JavaScript objects where __proto__ has
|
| // intentionally been set to null.
|
| - js.setDartHtmlWrapperFor(jsObject, jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, new js.JSObject.create(jsObject));
|
| return jsObject;
|
| }
|
| var jsTypeName = js.JsNative.getProperty(constructor, 'name');
|
| if (jsTypeName is! String || jsTypeName.length == 0) {
|
| // Not an html type.
|
| - js.setDartHtmlWrapperFor(jsObject, jsObject);
|
| - return jsObject;
|
| + wrapper = new js.JSObject.create(jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, wrapper);
|
| + return wrapper;
|
| }
|
|
|
| var dartClass_instance;
|
| @@ -204,12 +210,11 @@ wrap_jso(jsObject) {
|
|
|
| // TODO(jacobr): cache that this is not a dart:html JS class.
|
| return dartClass_instance;
|
| - } catch(e, stacktrace){
|
| + } catch (e, stacktrace) {
|
| if (interop_checks) {
|
| - if (e is DebugAssertException)
|
| - window.console.log("${e.message}\n ${stacktrace}");
|
| - else
|
| - window.console.log("${stacktrace}");
|
| + if (e is DebugAssertException) window.console
|
| + .log("${e.message}\n ${stacktrace}");
|
| + else window.console.log("${stacktrace}");
|
| }
|
| }
|
|
|
| @@ -236,31 +241,30 @@ wrap_jso_no_SerializedScriptvalue(jsObject) {
|
| return wrapper;
|
| }
|
|
|
| - // TODO(jacobr): auomatically wrapping JsArray here is fundamentally broken
|
| - // as it hijacks adding custom methods on JS Array classes as part of the
|
| - // new typed DartJsInterop.
|
| - // To make this work we really need to make DartHtmlWrappingList extend
|
| - // JsArrayImpl. Fixing this issue needs to be part of a broader refactor
|
| - // that allows calling custom typed JS interop methods on all dart:html
|
| - // classes.
|
| if (jsObject is js.JsArray) {
|
| - var wrappingList = new DartHtmlWrappingList(jsObject);
|
| - js.setDartHtmlWrapperFor(jsObject, wrappingList);
|
| - return wrappingList;
|
| + wrapper = new js.JSArray.create(jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, wrapper);
|
| + return wrapper;
|
| + }
|
| + if (jsObject is js.JsFunction) {
|
| + wrapper = new js.JSFunction.create(jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, wrapper);
|
| + return wrapper;
|
| }
|
|
|
| var constructor = js.JsNative.getProperty(jsObject, 'constructor');
|
| if (constructor == null) {
|
| // Perfectly valid case for JavaScript objects where __proto__ has
|
| // intentionally been set to null.
|
| - js.setDartHtmlWrapperFor(jsObject, jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, new js.JSObject.create(jsObject));
|
| return jsObject;
|
| }
|
| var jsTypeName = js.JsNative.getProperty(constructor, 'name');
|
| if (jsTypeName is! String || jsTypeName.length == 0) {
|
| // Not an html type.
|
| - js.setDartHtmlWrapperFor(jsObject, jsObject);
|
| - return jsObject;
|
| + wrapper = new js.JSObject.create(jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, wrapper);
|
| + return wrapper;
|
| }
|
|
|
| var func = getHtmlCreateFunction(jsTypeName);
|
| @@ -270,13 +274,14 @@ wrap_jso_no_SerializedScriptvalue(jsObject) {
|
| js.setDartHtmlWrapperFor(jsObject, dartClass_instance);
|
| return dartClass_instance;
|
| }
|
| - return jsObject;
|
| - } catch(e, stacktrace){
|
| + wrapper = new js.JSObject.create(jsObject);
|
| + js.setDartHtmlWrapperFor(jsObject, wrapper);
|
| + return wrapper;
|
| + } catch (e, stacktrace) {
|
| if (interop_checks) {
|
| - if (e is DebugAssertException)
|
| - window.console.log("${e.message}\n ${stacktrace}");
|
| - else
|
| - window.console.log("${stacktrace}");
|
| + if (e is DebugAssertException) window.console
|
| + .log("${e.message}\n ${stacktrace}");
|
| + else window.console.log("${stacktrace}");
|
| }
|
| }
|
|
|
| @@ -333,7 +338,7 @@ getCustomElementEntry(element) {
|
| } else if (runtimeType == TemplateElement) {
|
| // Data binding with a Dart class.
|
| tag = element.attributes['is'];
|
| - } else if (runtimeType == js.JsObjectImpl) {
|
| + } else if (runtimeType == js.JsObject) {
|
| // It's a Polymer core element (written in JS).
|
| // Make sure it's an element anything else we can ignore.
|
| if (element.hasProperty('nodeType') && element['nodeType'] == 1) {
|
| @@ -347,7 +352,8 @@ getCustomElementEntry(element) {
|
| }
|
| }
|
| } else {
|
| - throw new UnsupportedError('Element is incorrect type. Got ${runtimeType}, expected HtmlElement/HtmlTemplate/JsObjectImpl.');
|
| + throw new UnsupportedError(
|
| + 'Element is incorrect type. Got ${runtimeType}, expected HtmlElement/HtmlTemplate/JsObject.');
|
| }
|
|
|
| var entry = _knownCustomElements[tag];
|
| @@ -378,19 +384,3 @@ Type getCustomElementType(object) {
|
| }
|
| return null;
|
| }
|
| -
|
| -/**
|
| - * Wraps a JsArray and will call wrap_jso on its entries.
|
| - */
|
| -class DartHtmlWrappingList extends ListBase implements NativeFieldWrapperClass2 {
|
| - DartHtmlWrappingList(this.blink_jsObject);
|
| -
|
| - final js.JsArray blink_jsObject;
|
| -
|
| - operator [](int index) => wrap_jso_no_SerializedScriptvalue(js.JsNative.getArrayIndex(blink_jsObject, index));
|
| -
|
| - operator []=(int index, value) => blink_jsObject[index] = value;
|
| -
|
| - int get length => blink_jsObject.length;
|
| - int set length(int newLength) => blink_jsObject.length = newLength;
|
| -}
|
|
|