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

Unified Diff: third_party/WebKit/LayoutTests/custom-elements/constructor-may-poach-upgrading-element.html

Issue 2035623002: Implement the script parts of custom element upgrade steps. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ce-upgrade-in-document-dom-merge2
Patch Set: Do not assign in conditional to unbreak windows builder. Created 4 years, 6 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:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/custom-elements/constructor-may-poach-upgrading-element.html
diff --git a/third_party/WebKit/LayoutTests/custom-elements/constructor-may-poach-upgrading-element.html b/third_party/WebKit/LayoutTests/custom-elements/constructor-may-poach-upgrading-element.html
new file mode 100644
index 0000000000000000000000000000000000000000..d69e429ff447f054da4868a789f4a3a2eb9d3a2c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/custom-elements/constructor-may-poach-upgrading-element.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharness-helpers.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="spec/resources/custom-elements-helpers.js"></script>
+<body>
+<script>
+'use strict';
+
+test_with_window((w) => {
+ let doc = w.document;
+ let e = doc.createElement('a-a');
+ doc.body.appendChild(e);
+ var misbehave = true;
+ var invocations = [];
+ class X extends w.HTMLElement {
+ constructor() {
+ if (misbehave) {
+ misbehave = false;
+ invocations.push('misbehaving');
+ return new X();
+ }
+ super();
+ invocations.push(this);
+ }
+ }
+ w.customElements.define('a-a', X);
+ assert_array_equals(invocations, ['misbehaving', e],
+ 'returning the existing element should have succeeded');
+}, 'HTMLElement constructor: poach but return upgrade candidate');
+
+test_with_window((w) => {
+ let doc = w.document;
+ let e = doc.createElement('a-a');
+ doc.body.appendChild(e);
+ var misbehave = true;
+ var invocations = [];
+ var poacher;
+ class X extends w.HTMLElement {
+ constructor() {
+ if (misbehave) {
+ misbehave = false;
+ poacher = new X();
+ }
+ try {
+ super();
+ invocations.push(this);
+ } catch (e) {
+ invocations.push(e);
+ }
+ }
+ }
+ w.customElements.define('a-a', X);
+ assert_equals(invocations.length, 2,
+ 'the constructor should have been invoked once for upgrade ' +
+ 'and once for the recursive call to "new"');
+ assert_equals(poacher, e,
+ 'the recursive "new" should steal the upgrade candidate');
+ assert_equals(poacher, invocations[0],
+ 'the recursize "new" should happen first');
+ assert_true(invocations[1] instanceof w.DOMException,
+ 'the super call should have thrown a DOMException');
+ assert_equals(invocations[1].name, 'InvalidStateError',
+ 'the exception should be an InvalidStateError');
+}, 'HTMLElement constructor: poach upgrade candidate');
+</script>

Powered by Google App Engine
This is Rietveld 408576698