From e09776ad845f1cd81aff043a1106c0a639b569c1 Mon Sep 17 00:00:00 2001 From: Ryosuke Niwa Date: Thu, 29 Sep 2016 00:14:40 -0700 Subject: [PATCH] Import tests for custom element reactions from WebKit. (#3835) --- custom-elements/adopted-callback.html | 135 ++++++++++++ .../attribute-changed-callback.html | 192 ++++++++++++++++++ custom-elements/connected-callbacks.html | 88 ++++++++ custom-elements/disconnected-callbacks.html | 93 +++++++++ custom-elements/reaction-timing.html | 88 ++++++++ custom-elements/resources/document-types.js | 83 ++++++++ .../resources/empty-html-document.html | 5 + 7 files changed, 684 insertions(+) create mode 100644 custom-elements/adopted-callback.html create mode 100644 custom-elements/attribute-changed-callback.html create mode 100644 custom-elements/connected-callbacks.html create mode 100644 custom-elements/disconnected-callbacks.html create mode 100644 custom-elements/reaction-timing.html create mode 100644 custom-elements/resources/document-types.js create mode 100644 custom-elements/resources/empty-html-document.html diff --git a/custom-elements/adopted-callback.html b/custom-elements/adopted-callback.html new file mode 100644 index 00000000000000..2df100301e9821 --- /dev/null +++ b/custom-elements/adopted-callback.html @@ -0,0 +1,135 @@ + + + +Custom Elements: adoptedCallback + + + + + + + + +
+ + + diff --git a/custom-elements/attribute-changed-callback.html b/custom-elements/attribute-changed-callback.html new file mode 100644 index 00000000000000..9bcc9befb1a96e --- /dev/null +++ b/custom-elements/attribute-changed-callback.html @@ -0,0 +1,192 @@ + + + +Custom Elements: attributeChangedCallback + + + + + + + +
+ + + diff --git a/custom-elements/connected-callbacks.html b/custom-elements/connected-callbacks.html new file mode 100644 index 00000000000000..97833db850545d --- /dev/null +++ b/custom-elements/connected-callbacks.html @@ -0,0 +1,88 @@ + + + +Custom Elements: connectedCallback + + + + + + + + +
+ + + diff --git a/custom-elements/disconnected-callbacks.html b/custom-elements/disconnected-callbacks.html new file mode 100644 index 00000000000000..97ea67a8b4ec56 --- /dev/null +++ b/custom-elements/disconnected-callbacks.html @@ -0,0 +1,93 @@ + + + +Custom Elements: disconnectedCallback + + + + + + + + +
+ + + diff --git a/custom-elements/reaction-timing.html b/custom-elements/reaction-timing.html new file mode 100644 index 00000000000000..9e5bafbedfec42 --- /dev/null +++ b/custom-elements/reaction-timing.html @@ -0,0 +1,88 @@ + + + +Custom Elements: Custom element reactions must be invoked before returning to author scripts + + + + + + + +
+ + + diff --git a/custom-elements/resources/document-types.js b/custom-elements/resources/document-types.js new file mode 100644 index 00000000000000..55284d5b132d0a --- /dev/null +++ b/custom-elements/resources/document-types.js @@ -0,0 +1,83 @@ +const DocumentTypes = [ + { + name: 'document', + create: function () { return Promise.resolve(document); }, + isOwner: true, + hasBrowsingContext: true, + }, + { + name: 'document of a template element', + 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: 'new document', + create: function () { + return new Promise(function (resolve) { + var doc = new Document(); + doc.appendChild(doc.createElement('html')); + resolve(doc); + }); + }, + hasBrowsingContext: false, + }, + { + name: 'cloned document', + create: function () { + return new Promise(function (resolve) { + var doc = document.cloneNode(false); + doc.appendChild(doc.createElement('html')); + resolve(doc); + }); + }, + hasBrowsingContext: false, + }, + { + name: 'document created by createHTMLDocument', + create: function () { + return Promise.resolve(document.implementation.createHTMLDocument()); + }, + hasBrowsingContext: false, + }, + { + name: 'HTML document created by createDocument', + create: function () { + return Promise.resolve(document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null)); + }, + hasBrowsingContext: false, + }, + { + name: 'document in 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: '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, + } +]; \ No newline at end of file diff --git a/custom-elements/resources/empty-html-document.html b/custom-elements/resources/empty-html-document.html new file mode 100644 index 00000000000000..eaca3f49fd1584 --- /dev/null +++ b/custom-elements/resources/empty-html-document.html @@ -0,0 +1,5 @@ + + + + +