| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 /* |  | 
| 2  * Copyright (C) 2013 Google Inc. All rights reserved. |  | 
| 3  * |  | 
| 4  * Redistribution and use in source and binary forms, with or without |  | 
| 5  * modification, are permitted provided that the following conditions are |  | 
| 6  * met: |  | 
| 7  * |  | 
| 8  *     * Redistributions of source code must retain the above copyright |  | 
| 9  * notice, this list of conditions and the following disclaimer. |  | 
| 10  *     * Redistributions in binary form must reproduce the above |  | 
| 11  * copyright notice, this list of conditions and the following disclaimer |  | 
| 12  * in the documentation and/or other materials provided with the |  | 
| 13  * distribution. |  | 
| 14  *     * Neither the name of Google Inc. nor the names of its |  | 
| 15  * contributors may be used to endorse or promote products derived from |  | 
| 16  * this software without specific prior written permission. |  | 
| 17  * |  | 
| 18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |  | 
| 19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |  | 
| 20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |  | 
| 21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |  | 
| 22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |  | 
| 23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |  | 
| 24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |  | 
| 25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |  | 
| 26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |  | 
| 27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |  | 
| 28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | 
| 29  */ |  | 
| 30 |  | 
| 31 #include "config.h" |  | 
| 32 #include "core/dom/CustomElementUpgradeCandidateMap.h" |  | 
| 33 |  | 
| 34 #include "core/dom/Element.h" |  | 
| 35 |  | 
| 36 namespace WebCore { |  | 
| 37 |  | 
| 38 CustomElementUpgradeCandidateMap::~CustomElementUpgradeCandidateMap() |  | 
| 39 { |  | 
| 40     UpgradeCandidateMap::const_iterator::Keys end = m_upgradeCandidates.end().ke
     ys(); |  | 
| 41     for (UpgradeCandidateMap::const_iterator::Keys it = m_upgradeCandidates.begi
     n().keys(); it != end; ++it) |  | 
| 42         unobserve(*it); |  | 
| 43 } |  | 
| 44 |  | 
| 45 void CustomElementUpgradeCandidateMap::add(const CustomElementDescriptor& descri
     ptor, Element* element) |  | 
| 46 { |  | 
| 47     observe(element); |  | 
| 48 |  | 
| 49     UpgradeCandidateMap::AddResult result = m_upgradeCandidates.add(element, des
     criptor); |  | 
| 50     ASSERT(result.isNewEntry); |  | 
| 51 |  | 
| 52     UnresolvedDefinitionMap::iterator it = m_unresolvedDefinitions.find(descript
     or); |  | 
| 53     if (it == m_unresolvedDefinitions.end()) |  | 
| 54         it = m_unresolvedDefinitions.add(descriptor, ElementSet()).iterator; |  | 
| 55     it->value.add(element); |  | 
| 56 } |  | 
| 57 |  | 
| 58 void CustomElementUpgradeCandidateMap::remove(Element* element) |  | 
| 59 { |  | 
| 60     unobserve(element); |  | 
| 61     removeCommon(element); |  | 
| 62 } |  | 
| 63 |  | 
| 64 void CustomElementUpgradeCandidateMap::elementWasDestroyed(Element* element) |  | 
| 65 { |  | 
| 66     CustomElementObserver::elementWasDestroyed(element); |  | 
| 67     removeCommon(element); |  | 
| 68 } |  | 
| 69 |  | 
| 70 void CustomElementUpgradeCandidateMap::removeCommon(Element* element) |  | 
| 71 { |  | 
| 72     UpgradeCandidateMap::iterator candidate = m_upgradeCandidates.find(element); |  | 
| 73     ASSERT(candidate != m_upgradeCandidates.end()); |  | 
| 74 |  | 
| 75     UnresolvedDefinitionMap::iterator elements = m_unresolvedDefinitions.find(ca
     ndidate->value); |  | 
| 76     ASSERT(elements != m_unresolvedDefinitions.end()); |  | 
| 77     elements->value.remove(element); |  | 
| 78     m_upgradeCandidates.remove(candidate); |  | 
| 79 } |  | 
| 80 |  | 
| 81 void CustomElementUpgradeCandidateMap::elementDidFinishParsingChildren(Element* 
     element) |  | 
| 82 { |  | 
| 83     // An upgrade candidate finished parsing; reorder so that eventual |  | 
| 84     // upgrade order matches finished-parsing order. |  | 
| 85     moveToEnd(element); |  | 
| 86 } |  | 
| 87 |  | 
| 88 void CustomElementUpgradeCandidateMap::moveToEnd(Element* element) |  | 
| 89 { |  | 
| 90     UpgradeCandidateMap::iterator candidate = m_upgradeCandidates.find(element); |  | 
| 91     ASSERT(candidate != m_upgradeCandidates.end()); |  | 
| 92 |  | 
| 93     UnresolvedDefinitionMap::iterator elements = m_unresolvedDefinitions.find(ca
     ndidate->value); |  | 
| 94     ASSERT(elements != m_unresolvedDefinitions.end()); |  | 
| 95     elements->value.appendOrMoveToLast(element); |  | 
| 96 } |  | 
| 97 |  | 
| 98 ListHashSet<Element*> CustomElementUpgradeCandidateMap::takeUpgradeCandidatesFor
     (const CustomElementDescriptor& descriptor) |  | 
| 99 { |  | 
| 100     const ListHashSet<Element*>& candidates = m_unresolvedDefinitions.take(descr
     iptor); |  | 
| 101 |  | 
| 102     for (ElementSet::const_iterator candidate = candidates.begin(); candidate !=
      candidates.end(); ++candidate) { |  | 
| 103         unobserve(*candidate); |  | 
| 104         m_upgradeCandidates.remove(*candidate); |  | 
| 105     } |  | 
| 106 |  | 
| 107     return candidates; |  | 
| 108 } |  | 
| 109 |  | 
| 110 } |  | 
| OLD | NEW | 
|---|