mirror of
https://github.com/dart-lang/sdk
synced 2024-09-21 07:41:39 +00:00
Fixed upgrade failures to only throw once not on each wrap_jso
R=alanknight@google.com TBR=alanknight@google.com Review URL: https://codereview.chromium.org/1395723002 .
This commit is contained in:
parent
97c643a5f4
commit
c9b553aad1
|
@ -1324,8 +1324,9 @@ 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) {
|
||||
// Only try upgrading HtmlElement (Dart class) if there is a failure then
|
||||
// don't try it again - one failure is enough.
|
||||
if (dartInstance.runtimeType == HtmlElement && !dartInstance.isBadUpgrade) {
|
||||
// Must be exactly HtmlElement not something derived from it.
|
||||
var jsObject = dartInstance.blink_jsObject;
|
||||
var localName = dartInstance.localName;
|
||||
|
@ -1334,6 +1335,8 @@ _upgradeHtmlElement(dartInstance) {
|
|||
if (customElementClass != null) {
|
||||
try {
|
||||
dartInstance = _blink.Blink_Utils.constructElement(customElementClass, jsObject);
|
||||
} catch (e) {
|
||||
dartInstance.badUpgrade();
|
||||
} finally {
|
||||
dartInstance.blink_jsObject = jsObject;
|
||||
jsObject['dart_class'] = dartInstance;
|
||||
|
@ -1433,6 +1436,7 @@ createCustomUpgrader(Type customElementClass, $this) {
|
|||
try {
|
||||
dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
|
||||
} catch (e) {
|
||||
dartClass.badUpgrade();
|
||||
throw e;
|
||||
} finally {
|
||||
// Need to remember the Dart class that was created for this custom so
|
||||
|
@ -20512,6 +20516,7 @@ class HtmlDocument extends Document {
|
|||
dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
|
||||
} catch (e) {
|
||||
dartClass = HtmlElement.internalCreateHtmlElement();
|
||||
dartClass.badUpgrade();
|
||||
throw e;
|
||||
} finally {
|
||||
// Need to remember the Dart class that was created for this custom so
|
||||
|
@ -20588,8 +20593,6 @@ class HtmlDocument extends Document {
|
|||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
// WARNING: Do not edit - generated code.
|
||||
|
||||
|
||||
@DocsEditable()
|
||||
@DomName('HTMLElement')
|
||||
|
@ -21250,6 +21253,11 @@ class HtmlElement extends Element implements GlobalEventHandlers {
|
|||
@Experimental() // untriaged
|
||||
ElementStream<Event> get onWaiting => waitingEvent.forElement(this);
|
||||
|
||||
// Flags to only try upgrading once if there's a failure don't try upgrading
|
||||
// anymore.
|
||||
bool _badUpgrade = false;
|
||||
bool get isBadUpgrade => _badUpgrade;
|
||||
void badUpgrade() { _badUpgrade = true; }
|
||||
}
|
||||
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
|
|
|
@ -14,7 +14,7 @@ vars.update({
|
|||
"dartium_chromium_commit": "62a7524d4f71c9e0858d24b0aa1bbff3a2d09bff",
|
||||
"chromium_base_revision": "297060",
|
||||
"dartium_webkit_branch": "/blink/branches/dart/dartium",
|
||||
"dartium_webkit_revision": "202678",
|
||||
"dartium_webkit_revision": "202679",
|
||||
|
||||
# We use mirrors of all github repos to guarantee reproducibility and
|
||||
# consistency between what users see and what the bots see.
|
||||
|
|
|
@ -569,8 +569,9 @@ 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) {
|
||||
// Only try upgrading HtmlElement (Dart class) if there is a failure then
|
||||
// don't try it again - one failure is enough.
|
||||
if (dartInstance.runtimeType == HtmlElement && !dartInstance.isBadUpgrade) {
|
||||
// Must be exactly HtmlElement not something derived from it.
|
||||
var jsObject = dartInstance.blink_jsObject;
|
||||
var localName = dartInstance.localName;
|
||||
|
@ -579,6 +580,8 @@ _upgradeHtmlElement(dartInstance) {
|
|||
if (customElementClass != null) {
|
||||
try {
|
||||
dartInstance = _blink.Blink_Utils.constructElement(customElementClass, jsObject);
|
||||
} catch (e) {
|
||||
dartInstance.badUpgrade();
|
||||
} finally {
|
||||
dartInstance.blink_jsObject = jsObject;
|
||||
jsObject['dart_class'] = dartInstance;
|
||||
|
@ -678,6 +681,7 @@ createCustomUpgrader(Type customElementClass, $this) {
|
|||
try {
|
||||
dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
|
||||
} catch (e) {
|
||||
dartClass.badUpgrade();
|
||||
throw e;
|
||||
} finally {
|
||||
// Need to remember the Dart class that was created for this custom so
|
||||
|
|
|
@ -402,6 +402,7 @@ $else
|
|||
dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
|
||||
} catch (e) {
|
||||
dartClass = HtmlElement.internalCreateHtmlElement();
|
||||
dartClass.badUpgrade();
|
||||
throw e;
|
||||
} finally {
|
||||
// Need to remember the Dart class that was created for this custom so
|
||||
|
|
17
tools/dom/templates/html/impl/impl_HTMLElement.darttemplate
Normal file
17
tools/dom/templates/html/impl/impl_HTMLElement.darttemplate
Normal file
|
@ -0,0 +1,17 @@
|
|||
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
part of $LIBRARYNAME;
|
||||
|
||||
@DocsEditable()
|
||||
$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
|
||||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Flags to only try upgrading once if there's a failure don't try upgrading
|
||||
// anymore.
|
||||
bool _badUpgrade = false;
|
||||
bool get isBadUpgrade => _badUpgrade;
|
||||
void badUpgrade() { _badUpgrade = true; }
|
||||
$endif
|
||||
}
|
Loading…
Reference in a new issue