diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/html/shadow/ContentDistributor.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/html/shadow/ContentDistributor.cpp')
-rw-r--r-- | Source/WebCore/html/shadow/ContentDistributor.cpp | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/Source/WebCore/html/shadow/ContentDistributor.cpp b/Source/WebCore/html/shadow/ContentDistributor.cpp deleted file mode 100644 index c4c77a747..000000000 --- a/Source/WebCore/html/shadow/ContentDistributor.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "ContentDistributor.h" - -#include "ElementIterator.h" -#include "InsertionPoint.h" - -namespace WebCore { - -ContentDistributor::ContentDistributor() - : m_insertionPointListIsValid(true) - , m_validity(Undetermined) -{ -} - -ContentDistributor::~ContentDistributor() -{ -} - -void ContentDistributor::invalidateInsertionPointList() -{ - m_insertionPointListIsValid = false; - m_insertionPointList.clear(); -} - -const Vector<RefPtr<InsertionPoint>>& ContentDistributor::ensureInsertionPointList(ShadowRoot* shadowRoot) -{ - if (m_insertionPointListIsValid) - return m_insertionPointList; - - m_insertionPointListIsValid = true; - ASSERT(m_insertionPointList.isEmpty()); - - for (auto& element : descendantsOfType<Element>(*shadowRoot)) { - if (element.isInsertionPoint()) - m_insertionPointList.append(toInsertionPoint(&element)); - } - - return m_insertionPointList; -} - -InsertionPoint* ContentDistributor::findInsertionPointFor(const Node* key) const -{ - return m_nodeToInsertionPoint.get(key); -} - -void ContentDistributor::distribute(Element* host) -{ - ASSERT(needsDistribution()); - ASSERT(m_nodeToInsertionPoint.isEmpty()); - ASSERT(!host->containingShadowRoot() || host->containingShadowRoot()->distributor().isValid()); - - m_validity = Valid; - - if (ShadowRoot* root = host->shadowRoot()) { - const Vector<RefPtr<InsertionPoint>>& insertionPoints = ensureInsertionPointList(root); - for (size_t i = 0; i < insertionPoints.size(); ++i) { - InsertionPoint* point = insertionPoints[i].get(); - if (!point->isActive()) - continue; - - distributeSelectionsTo(point, host); - } - } -} - -bool ContentDistributor::invalidate(Element* host) -{ - ASSERT(needsInvalidation()); - bool needsReattach = (m_validity == Undetermined) || !m_nodeToInsertionPoint.isEmpty(); - - if (ShadowRoot* root = host->shadowRoot()) { - const Vector<RefPtr<InsertionPoint>>& insertionPoints = ensureInsertionPointList(root); - for (size_t i = 0; i < insertionPoints.size(); ++i) { - needsReattach = true; - insertionPoints[i]->clearDistribution(); - } - } - - m_validity = Invalidating; - m_nodeToInsertionPoint.clear(); - return needsReattach; -} - -void ContentDistributor::distributeSelectionsTo(InsertionPoint* insertionPoint, Element* host) -{ - for (Node* child = host->firstChild(); child; child = child->nextSibling()) { - ASSERT(!child->isInsertionPoint()); - - if (insertionPoint->matchTypeFor(child) != InsertionPoint::AlwaysMatches) - continue; - - m_nodeToInsertionPoint.add(child, insertionPoint); - } - - if (m_nodeToInsertionPoint.isEmpty()) - return; - insertionPoint->setHasDistribution(); -} - -void ContentDistributor::ensureDistribution(ShadowRoot* shadowRoot) -{ - ASSERT(shadowRoot); - - Vector<ShadowRoot*, 8> shadowRoots; - for (Element* current = shadowRoot->hostElement(); current; current = current->shadowHost()) { - ShadowRoot* currentRoot = current->shadowRoot(); - if (!currentRoot->distributor().needsDistribution()) - break; - shadowRoots.append(currentRoot); - } - - for (size_t i = shadowRoots.size(); i > 0; --i) - shadowRoots[i - 1]->distributor().distribute(shadowRoots[i - 1]->hostElement()); -} - -void ContentDistributor::invalidateDistribution(Element* host) -{ - bool didNeedInvalidation = needsInvalidation(); - bool needsReattach = didNeedInvalidation ? invalidate(host) : false; - - if (needsReattach) - host->setNeedsStyleRecalc(ReconstructRenderTree); - - if (didNeedInvalidation) { - ASSERT(m_validity == Invalidating); - m_validity = Invalidated; - } -} - -void ContentDistributor::didShadowBoundaryChange(Element* host) -{ - setValidity(Undetermined); - invalidateDistribution(host); -} - -} |