| Index: tools/dom/src/native_DOMImplementation.dart
|
| diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
|
| index a7c0e97c2ffdbf48d617f9cbf18b78c9ead3b6f1..80676b0d88498117b995158352e96bb5a852adb2 100644
|
| --- a/tools/dom/src/native_DOMImplementation.dart
|
| +++ b/tools/dom/src/native_DOMImplementation.dart
|
| @@ -195,15 +195,20 @@ class _Utils {
|
| // DOM node rather than just a class that extends Node.
|
| static bool isNode(obj) => obj is Node;
|
|
|
| + static bool _isBuiltinType(ClassMirror cls) {
|
| + // TODO(vsm): Find a less hackish way to do this.
|
| + LibraryMirror lib = cls.owner;
|
| + String libName = lib.uri.toString();
|
| + return libName.startsWith('dart:');
|
| + }
|
| +
|
| static void register(String tag, Type type) {
|
| // TODO(vsm): Move these checks into native code.
|
| if (type == null) {
|
| throw new UnsupportedError("Invalid null type.");
|
| }
|
| ClassMirror cls = reflectClass(type);
|
| - LibraryMirror lib = cls.owner;
|
| - String libName = lib.uri.toString();
|
| - if (libName.startsWith('dart:')) {
|
| + if (_isBuiltinType(cls)) {
|
| throw new UnsupportedError("Invalid custom element from $libName.");
|
| }
|
| ClassMirror superClass = cls.superclass;
|
| @@ -216,17 +221,21 @@ class _Utils {
|
| bool isElement(ClassMirror cls) =>
|
| cls != null && cls.qualifiedName == elementName;
|
|
|
| + ClassMirror nativeClass = _isBuiltinType(superClass) ? superClass : null;
|
| while(!isRoot(superClass) && !isElement(superClass)) {
|
| superClass = superClass.superclass;
|
| + if (nativeClass == null && _isBuiltinType(superClass)) {
|
| + nativeClass = superClass;
|
| + }
|
| }
|
|
|
| if (isRoot(superClass)) {
|
| throw new UnsupportedError("Invalid custom element doesn't inherit from HtmlElement.");
|
| }
|
| - _register(tag, type);
|
| + _register(tag, type, nativeClass.reflectedType);
|
| }
|
|
|
| - static void _register(String tag, Type type) native "Utils_register";
|
| + static void _register(String tag, Type customType, Type nativeType) native "Utils_register";
|
| }
|
|
|
| class _NPObject extends NativeFieldWrapperClass1 {
|
|
|