| Index: third_party/WebKit/LayoutTests/imported/wpt/custom-elements/resources/custom-elements-helpers.js
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/resources/custom-elements-helpers.js b/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/resources/custom-elements-helpers.js
|
| index 0dfbd6363b22ed36fdf7c9106af3b19c5bf7d503..63fb98b4356cdd716c143030099ad3c2068aa087 100644
|
| --- a/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/resources/custom-elements-helpers.js
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/resources/custom-elements-helpers.js
|
| @@ -20,3 +20,143 @@ function test_with_window(f, name, srcdoc) {
|
| });
|
| }, name);
|
| }
|
| +
|
| +function create_attribute_changed_callback_log(element, name, oldValue, newValue, namespace) {
|
| + return {
|
| + type: 'attributeChanged',
|
| + element: element,
|
| + name: name,
|
| + namespace: namespace,
|
| + oldValue: oldValue,
|
| + newValue: newValue,
|
| + actualValue: element.getAttributeNS(namespace, name)
|
| + };
|
| +}
|
| +
|
| +function assert_attribute_log_entry(log, expected) {
|
| + assert_equals(log.type, 'attributeChanged');
|
| + assert_equals(log.name, expected.name);
|
| + assert_equals(log.oldValue, expected.oldValue);
|
| + assert_equals(log.newValue, expected.newValue);
|
| + assert_equals(log.actualValue, expected.newValue);
|
| + assert_equals(log.namespace, expected.namespace);
|
| +}
|
| +
|
| +
|
| +function define_new_custom_element(observedAttributes) {
|
| + let log = [];
|
| + let name = 'custom-element-' + define_new_custom_element._element_number++;
|
| +
|
| + class CustomElement extends HTMLElement {
|
| + constructor() {
|
| + super();
|
| + log.push({type: 'constructed', element: this});
|
| + }
|
| + attributeChangedCallback(...args) {
|
| + log.push(create_attribute_changed_callback_log(this, ...args));
|
| + }
|
| + connectedCallback() { log.push({type: 'connected', element: this}); }
|
| + disconnectedCallback() { log.push({type: 'disconnected', element: this}); }
|
| + adoptedCallback(oldDocument, newDocument) { log.push({type: 'adopted', element: this, oldDocument: oldDocument, newDocument: newDocument}); }
|
| + }
|
| + CustomElement.observedAttributes = observedAttributes;
|
| +
|
| + customElements.define(name, CustomElement);
|
| +
|
| + return {
|
| + name: name,
|
| + takeLog: function () {
|
| + let currentLog = log; log = [];
|
| + currentLog.types = () => currentLog.map((entry) => entry.type);
|
| + currentLog.last = () => currentLog[currentLog.length - 1];
|
| + return currentLog;
|
| + }
|
| + };
|
| +}
|
| +define_new_custom_element._element_number = 1;
|
| +
|
| +function document_types() {
|
| + return [
|
| + {
|
| + name: 'the document',
|
| + create: function () { return Promise.resolve(document); },
|
| + isOwner: true,
|
| + hasBrowsingContext: true,
|
| + },
|
| + {
|
| + name: 'the document of the template elements',
|
| + create: function () {
|
| + return new Promise(function (resolve) {
|
| + var template = document.createElementNS('http://www.w3.org/1999/xhtml', 'template');
|
| + var doc = template.content.ownerDocument;
|
| + if (!doc.documentElement)
|
| + doc.appendChild(doc.createElement('html'));
|
| + resolve(doc);
|
| + });
|
| + },
|
| + hasBrowsingContext: false,
|
| + },
|
| + {
|
| + name: 'a new document',
|
| + create: function () {
|
| + return new Promise(function (resolve) {
|
| + var doc = new Document();
|
| + doc.appendChild(doc.createElement('html'));
|
| + resolve(doc);
|
| + });
|
| + },
|
| + hasBrowsingContext: false,
|
| + },
|
| + {
|
| + name: 'a cloned document',
|
| + create: function () {
|
| + return new Promise(function (resolve) {
|
| + var doc = document.cloneNode(false);
|
| + doc.appendChild(doc.createElement('html'));
|
| + resolve(doc);
|
| + });
|
| + },
|
| + hasBrowsingContext: false,
|
| + },
|
| + {
|
| + name: 'a document created by createHTMLDocument',
|
| + create: function () {
|
| + return Promise.resolve(document.implementation.createHTMLDocument());
|
| + },
|
| + hasBrowsingContext: false,
|
| + },
|
| + {
|
| + name: 'an HTML document created by createDocument',
|
| + create: function () {
|
| + return Promise.resolve(document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null));
|
| + },
|
| + hasBrowsingContext: false,
|
| + },
|
| + {
|
| + name: 'the document of an iframe',
|
| + create: function () {
|
| + return new Promise(function (resolve, reject) {
|
| + var iframe = document.createElement('iframe');
|
| + iframe.onload = function () { resolve(iframe.contentDocument); }
|
| + iframe.onerror = function () { reject('Failed to load an empty iframe'); }
|
| + document.body.appendChild(iframe);
|
| + });
|
| + },
|
| + hasBrowsingContext: true,
|
| + },
|
| + {
|
| + name: 'an HTML document fetched by XHR',
|
| + create: function () {
|
| + return new Promise(function (resolve, reject) {
|
| + var xhr = new XMLHttpRequest();
|
| + xhr.open('GET', 'resources/empty-html-document.html');
|
| + xhr.overrideMimeType('text/xml');
|
| + xhr.onload = function () { resolve(xhr.responseXML); }
|
| + xhr.onerror = function () { reject('Failed to fetch the document'); }
|
| + xhr.send();
|
| + });
|
| + },
|
| + hasBrowsingContext: false,
|
| + }
|
| + ];
|
| +}
|
|
|