diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index fcfeafc96e2..9ceaa5bfb8e 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -32931,7 +32931,18 @@ void _registerCustomElement(context, document, String tag, Type type,
if (baseClassName == null) {
throw new ArgumentError(type);
}
- if (baseClassName == 'Element') baseClassName = 'HTMLElement';
+
+ if (extendsTagName == null) {
+ if (baseClassName != 'HTMLElement') {
+ throw new UnsupportedError('Class must provide extendsTag if base '
+ 'native class is not HTMLElement');
+ }
+ } else {
+ if (!JS('bool', '(#.createElement(#) instanceof window[#])',
+ document, extendsTagName, baseClassName)) {
+ throw new UnsupportedError('extendsTag does not match base native class');
+ }
+ }
var baseConstructor = JS('=Object', '#[#]', context, baseClassName);
diff --git a/tests/html/html.status b/tests/html/html.status
index d3d7586755f..50984d8478e 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -411,6 +411,3 @@ async_test: Timeout # Issue 13719: Please triage this failure.
dromaeo_smoke_test: Fail # Issue 13719: Please triage this failure.
element_offset_test/offset: Pass, Fail # Issue 13719, 13296
touchevent_test/supported: Fail # Issue 13719: Please triage this failure.
-
-[ $compiler == dart2js ]
-custom/document_register_type_extensions_test/registration: Fail # Issue 14093
diff --git a/tools/dom/src/dart2js_CustomElementSupport.dart b/tools/dom/src/dart2js_CustomElementSupport.dart
index 6f8aedb2e33..00e17b20569 100644
--- a/tools/dom/src/dart2js_CustomElementSupport.dart
+++ b/tools/dom/src/dart2js_CustomElementSupport.dart
@@ -75,7 +75,18 @@ void _registerCustomElement(context, document, String tag, Type type,
if (baseClassName == null) {
throw new ArgumentError(type);
}
- if (baseClassName == 'Element') baseClassName = 'HTMLElement';
+
+ if (extendsTagName == null) {
+ if (baseClassName != 'HTMLElement') {
+ throw new UnsupportedError('Class must provide extendsTag if base '
+ 'native class is not HTMLElement');
+ }
+ } else {
+ if (!JS('bool', '(#.createElement(#) instanceof window[#])',
+ document, extendsTagName, baseClassName)) {
+ throw new UnsupportedError('extendsTag does not match base native class');
+ }
+ }
var baseConstructor = JS('=Object', '#[#]', context, baseClassName);