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

Unified Diff: sdk/lib/html/dartium/html_dartium.dart

Issue 1391273002: Fixed few more issues with upgrader and custom event identitiy (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:
Download patch
Index: sdk/lib/html/dartium/html_dartium.dart
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 14fc413c973617e5c6b3cf992fb8f7e13e3e1fb8..d1e5073aacc3d9377b7112ba83cc3c4d47f16e0f 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -1175,8 +1175,9 @@ wrap_jso(jsObject) {
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'];
+ // Got a dart_class (it's a custom element) use it it's already set up
+ // make sure it's upgraded.
+ dartClass_instance = _upgradeHtmlElement(jsObject['dart_class']);
} else {
var localName = jsObject['localName'];
var customElementClass = _knownCustomeElements[localName];
@@ -1250,6 +1251,29 @@ wrap_jso_custom_element(jsObject) {
}
}
+// Upgrade a Dart HtmlElement to the user's Dart custom element class.
+_upgradeHtmlElement(dartInstance) {
+ var dartInstanceMirror = reflect(dartInstance);
+ if (dartInstanceMirror.type.qualifiedName == #dart.dom.html.HtmlElement) {
+ // Must be exactly HtmlElement not something derived from it.
+ var jsObject = dartInstance.blink_jsObject;
+ var localName = dartInstance.localName;
+ var customElementClass = _knownCustomeElements[localName];
+ // Custom Element to upgrade.
+ if (customElementClass != null) {
+ try {
+ dartInstance = _blink.Blink_Utils.constructElement(customElementClass, jsObject);
+ } finally {
+ dartInstance.blink_jsObject = jsObject;
+ jsObject['dart_class'] = dartInstance;
+ js.setDartHtmlWrapperFor(jsObject, dartInstance);
+ }
+ }
+ }
+
+ return dartInstance;
+}
+
class DebugAssertException implements Exception {
String message;
DebugAssertException(this.message);
@@ -9169,6 +9193,9 @@ class CustomEvent extends Event {
e._initCustomEvent(type, canBubble, cancelable, null);
}
+ // Need for identity.
+ e.blink_jsObject['dart_class'] = e;
+
return e;
}
@@ -47285,6 +47312,10 @@ class _VMElementUpgrader implements ElementUpgrader {
throw new UnsupportedError('Element is incorrect type');
}
+ // Remember Dart class to tagName for any upgrading done in wrap_jso.
+ var tag = element['localName'];
+ _knownCustomeElements[tag] = _type;
+
return createCustomUpgrader(_nativeType, element);
}
}

Powered by Google App Engine
This is Rietveld 408576698