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:
Terry L. Lucas 2015-10-07 14:37:24 -07:00
parent 97c643a5f4
commit c9b553aad1
5 changed files with 37 additions and 7 deletions

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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

View 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
}