Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Unified Diff: tools/dom/templates/html/dartium/html_dartium.darttemplate

Issue 1391353002: Dartium typed js interop work dart repo side of the change. Also tries to get (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 222865b43a178372775c7fc42d88be8f5e4847e7..4bd7279dea509a1dab4397a3a9d88d2121f87e69 100644
--- a/tools/dom/templates/html/dartium/html_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/html_dartium.darttemplate
@@ -117,7 +117,7 @@ Window get window {
}
$if DARTIUM
$if JSINTEROP
- _window = wrap_jso(js.context['window']);
+ _window = wrap_jso(js.JsNative.getProperty(js.context, 'window'));
$else
_window = _Utils.window();
$endif
@@ -355,7 +355,11 @@ Function _getSvgFunction(String key) {
var _knownCustomeElements = new Map<String, Type>();
Rectangle make_dart_rectangle(r) =>
- r == null ? null : new Rectangle(r['left'], r['top'], r['width'], r['height']);
+ r == null ? null : new Rectangle(
+ js.JsNative.getProperty(r, 'left'),
+ js.JsNative.getProperty(r, 'top'),
+ js.JsNative.getProperty(r, 'width'),
+ js.JsNative.getProperty(r, 'height'));
// Need a default constructor for constructing classes with mixins that are
// also extending NativeFieldWrapperClass2. Defining JsoNativeFieldWrapper
@@ -409,11 +413,12 @@ wrap_jso(jsObject) {
if (!identical(converted, jsObject)) {
return converted;
}
- var constructor = jsObject['constructor'];
+
+ var constructor = js.JsNative.getProperty(jsObject, 'constructor');
if (__interop_checks) {
debug_or_assert("constructor != null", constructor != null);
}
- var jsTypeName = constructor['name'];
+ var jsTypeName = js.JsNative.getProperty(constructor, 'name');
if (__interop_checks) {
debug_or_assert("constructor != null && jsTypeName.length > 0", constructor != null && jsTypeName.length > 0);
}
@@ -444,6 +449,7 @@ wrap_jso(jsObject) {
}
}
}
+ // TODO(jacobr): cache that this is not a dart:html JS class.
return dartClass_instance;
} catch(e, stacktrace){
if (__interop_checks) {
@@ -458,6 +464,61 @@ wrap_jso(jsObject) {
}
/**
+ * 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.
+ */
+wrap_jso_no_SerializedScriptvalue(jsObject) {
+ try {
+ if (jsObject is! js.JsObject || jsObject == null) {
+ // JS Interop converted the object to a Dart class e.g., Uint8ClampedList.
+ // or it's a simple type.
+ return jsObject;
+ }
+
+ // TODO(alanknight): With upgraded custom elements this causes a failure because
+ // we need a new wrapper after the type changes. We could possibly invalidate this
+ // if the constructor name didn't match?
+ var wrapper = js.getDartHtmlWrapperFor(jsObject);
+ if (wrapper != null) {
+ return wrapper;
+ }
+
+ if (jsObject is js.JsArray) {
+ var wrappingList = new _DartHtmlWrappingList(jsObject);
+ js.setDartHtmlWrapperFor(jsObject, wrappingList);
+ return wrappingList;
+ }
+
+ var constructor = js.JsNative.getProperty(jsObject, 'constructor');
+ if (__interop_checks) {
+ debug_or_assert("constructor != null", constructor != null);
+ }
+ var jsTypeName = js.JsNative.getProperty(constructor, 'name');
+ if (__interop_checks) {
+ debug_or_assert("constructor != null && jsTypeName.length > 0", constructor != null && jsTypeName.length > 0);
+ }
+
+ var func = getHtmlCreateFunction(jsTypeName);
+ if (func != null) {
+ var dartClass_instance = func();
+ dartClass_instance.blink_jsObject = jsObject;
+ js.setDartHtmlWrapperFor(jsObject, dartClass_instance);
+ return dartClass_instance;
+ }
+ return jsObject;
+ } catch(e, stacktrace){
+ if (__interop_checks) {
+ if (e is DebugAssertException)
+ window.console.log("${e.message}\n ${stacktrace}");
+ else
+ window.console.log("${stacktrace}");
+ }
+ }
+
+ return null;
+}
+
+/**
* 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.
@@ -549,9 +610,9 @@ js.JsFunction wrap_event_listener(theObject, Function listener) {
Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
var result = new Map();
- var keys = js.context['Object'].callMethod('keys', [jsObject]);
+ var keys = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), 'keys', [jsObject]);
for (var key in keys) {
- result[key] = wrap_jso(jsObject[key]);
+ result[key] = wrap_jso(js.JsNative.getProperty(jsObject, key));
}
return result;
}
@@ -562,7 +623,7 @@ Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
// code in html_common and be more general.
convertDartToNative_Dictionary(Map dict) {
if (dict == null) return null;
- var jsObject = new js.JsObject(js.context['Object']);
+ var jsObject = new js.JsObject(js.JsNative.getProperty(js.context, 'Object'));
dict.forEach((String key, value) {
if (value is List) {
var jsArray = new js.JsArray();
@@ -586,17 +647,17 @@ List convertDartToNative_StringArray(List<String> input) => input;
/**
* Wraps a JsArray and will call wrap_jso on its entries.
*/
-class _DartHtmlWrappingList extends ListBase {
- _DartHtmlWrappingList(this._basicList);
+class _DartHtmlWrappingList extends ListBase implements NativeFieldWrapperClass2 {
+ _DartHtmlWrappingList(this.blink_jsObject);
- final js.JsArray _basicList;
+ final js.JsArray blink_jsObject;
- operator [](int index) => wrap_jso(_basicList[index]);
+ operator [](int index) => wrap_jso(js.JsNative.getArrayIndex(blink_jsObject, index));
- operator []=(int index, value) => _basicList[index] = unwrap_jso(value);
+ operator []=(int index, value) => blink_jsObject[index] = value;
- int get length => _basicList.length;
- int set length(int newLength) => _basicList.length = newLength;
+ int get length => blink_jsObject.length;
+ int set length(int newLength) => blink_jsObject.length = newLength;
}
/**
@@ -612,7 +673,7 @@ createCustomUpgrader(Type customElementClass, $this) {
// Need to remember the Dart class that was created for this custom so
// return it and setup the blink_jsObject to the $this that we'll be working
// with as we talk to blink.
- $this['dart_class'] = dartClass;
+ js.setDartHtmlWrapperFor($this, dartClass);
}
return dartClass;
« no previous file with comments | « tools/dom/src/native_DOMImplementation.dart ('k') | tools/dom/templates/html/impl/impl_Document.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698