From f346bdfe6745ce75bfe3668e7f110d5f2d9737db Mon Sep 17 00:00:00 2001 From: Justin Fagnani Date: Tue, 9 Aug 2016 17:19:20 -0700 Subject: [PATCH] Only upgrade imports once --- src/CustomElements/v1/CustomElements.js | 13 ++++++++---- .../CustomElements/v1/html/imported-doc.html | 1 + tests/CustomElements/v1/html/imports.html | 21 +++++++++++++++++-- tests/CustomElements/v1/html/sub-import.html | 1 + 4 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 tests/CustomElements/v1/html/sub-import.html diff --git a/src/CustomElements/v1/CustomElements.js b/src/CustomElements/v1/CustomElements.js index eabee27..d3593b8 100644 --- a/src/CustomElements/v1/CustomElements.js +++ b/src/CustomElements/v1/CustomElements.js @@ -311,9 +311,11 @@ var CustomElementDefinition; /** * @param {NodeList} nodeList + * @param {Set=} visitedNodes * @private */ - _addNodes: function(nodeList) { + _addNodes: function(nodeList, visitedNodes) { + visitedNodes = visitedNodes || new Set(); for (var i = 0; i < nodeList.length; i++) { var root = nodeList[i]; @@ -342,15 +344,18 @@ var CustomElementDefinition; if (node.shadowRoot) { // TODO(justinfagnani): do we need to check that the shadowRoot // is observed? - this._addNodes(node.shadowRoot.childNodes); + this._addNodes(node.shadowRoot.childNodes, visitedNodes); } - if (node.tagName === 'LINK' && node.rel.toLowerCase() === 'import') { + if (node.tagName === 'LINK' && + node.rel.toLowerCase() === 'import' && + !visitedNodes.has(node)) { + // visitedNodes.add(node); var onLoad = (function() { var link = node; return function() { link.removeEventListener('load', onLoad); this._observeRoot(link.import); - this._addNodes(link.import.childNodes); + this._addNodes(link.import.childNodes, visitedNodes); }.bind(this); }).bind(this)(); if (node.import) { diff --git a/tests/CustomElements/v1/html/imported-doc.html b/tests/CustomElements/v1/html/imported-doc.html index ac8598e..ed889cc 100644 --- a/tests/CustomElements/v1/html/imported-doc.html +++ b/tests/CustomElements/v1/html/imported-doc.html @@ -1 +1,2 @@ + diff --git a/tests/CustomElements/v1/html/imports.html b/tests/CustomElements/v1/html/imports.html index c9ef386..a1b8250 100644 --- a/tests/CustomElements/v1/html/imports.html +++ b/tests/CustomElements/v1/html/imports.html @@ -33,14 +33,18 @@ + - + diff --git a/tests/CustomElements/v1/html/sub-import.html b/tests/CustomElements/v1/html/sub-import.html new file mode 100644 index 0000000..7c89b54 --- /dev/null +++ b/tests/CustomElements/v1/html/sub-import.html @@ -0,0 +1 @@ +