| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. | 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. |
| 3 * Copyright (C) 2011 Apple Inc. All rights reserved. | 3 * Copyright (C) 2011 Apple Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 } | 598 } |
| 599 | 599 |
| 600 } | 600 } |
| 601 | 601 |
| 602 template <bool shouldClose(const ContainerNode*)> | 602 template <bool shouldClose(const ContainerNode*)> |
| 603 void HTMLTreeBuilder::processCloseWhenNestedTag(AtomicHTMLToken& token) | 603 void HTMLTreeBuilder::processCloseWhenNestedTag(AtomicHTMLToken& token) |
| 604 { | 604 { |
| 605 m_framesetOk = false; | 605 m_framesetOk = false; |
| 606 HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topReco
rd(); | 606 HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topReco
rd(); |
| 607 while (1) { | 607 while (1) { |
| 608 ContainerNode* node = nodeRecord->node(); | 608 RefPtr<ContainerNode> node = nodeRecord->node(); |
| 609 if (shouldClose(node)) { | 609 if (shouldClose(node.get())) { |
| 610 ASSERT(node->isElementNode()); | 610 ASSERT(node->isElementNode()); |
| 611 processFakeEndTag(toElement(node)->tagQName()); | 611 processFakeEndTag(toElement(node.get())->tagQName()); |
| 612 break; | 612 break; |
| 613 } | 613 } |
| 614 if (isSpecialNode(node) && !node->hasTagName(addressTag) && !node->hasTa
gName(divTag) && !node->hasTagName(pTag)) | 614 if (isSpecialNode(node.get()) && !node->hasTagName(addressTag) && !node-
>hasTagName(divTag) && !node->hasTagName(pTag)) |
| 615 break; | 615 break; |
| 616 nodeRecord = nodeRecord->next(); | 616 nodeRecord = nodeRecord->next(); |
| 617 } | 617 } |
| 618 processFakePEndTagIfPInButtonScope(); | 618 processFakePEndTagIfPInButtonScope(); |
| 619 m_tree.insertHTMLElement(token); | 619 m_tree.insertHTMLElement(token); |
| 620 } | 620 } |
| 621 | 621 |
| 622 namespace { | 622 namespace { |
| 623 | 623 |
| 624 typedef HashMap<AtomicString, QualifiedName> PrefixedNameToQualifiedNameMap; | 624 typedef HashMap<AtomicString, QualifiedName> PrefixedNameToQualifiedNameMap; |
| (...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1549 notImplemented(); // Emit a more specific parse error based on stack content
s. | 1549 notImplemented(); // Emit a more specific parse error based on stack content
s. |
| 1550 setInsertionMode(AfterBodyMode); | 1550 setInsertionMode(AfterBodyMode); |
| 1551 return true; | 1551 return true; |
| 1552 } | 1552 } |
| 1553 | 1553 |
| 1554 void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken& token) | 1554 void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken& token) |
| 1555 { | 1555 { |
| 1556 ASSERT(token.type() == HTMLTokenTypes::EndTag); | 1556 ASSERT(token.type() == HTMLTokenTypes::EndTag); |
| 1557 HTMLElementStack::ElementRecord* record = m_tree.openElements()->topRecord()
; | 1557 HTMLElementStack::ElementRecord* record = m_tree.openElements()->topRecord()
; |
| 1558 while (1) { | 1558 while (1) { |
| 1559 ContainerNode* node = record->node(); | 1559 RefPtr<ContainerNode> node = record->node(); |
| 1560 if (node->hasLocalName(token.name())) { | 1560 if (node->hasLocalName(token.name())) { |
| 1561 m_tree.generateImpliedEndTags(); | 1561 m_tree.generateImpliedEndTags(); |
| 1562 // FIXME: The ElementRecord pointed to by record might be deleted by | 1562 // FIXME: The ElementRecord pointed to by record might be deleted by |
| 1563 // the preceding call. Perhaps we should hold a RefPtr so that it | 1563 // the preceding call. Perhaps we should hold a RefPtr so that it |
| 1564 // stays alive for the duration of record's scope. | 1564 // stays alive for the duration of record's scope. |
| 1565 record = 0; | 1565 record = 0; |
| 1566 if (!m_tree.currentNode()->hasLocalName(token.name())) { | 1566 if (!m_tree.currentNode()->hasLocalName(token.name())) { |
| 1567 parseError(token); | 1567 parseError(token); |
| 1568 // FIXME: This is either a bug in the spec, or a bug in our | 1568 // FIXME: This is either a bug in the spec, or a bug in our |
| 1569 // implementation. Filed a bug with HTML5: | 1569 // implementation. Filed a bug with HTML5: |
| 1570 // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10080 | 1570 // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10080 |
| 1571 // We might have already popped the node for the token in | 1571 // We might have already popped the node for the token in |
| 1572 // generateImpliedEndTags, just abort. | 1572 // generateImpliedEndTags, just abort. |
| 1573 if (!m_tree.openElements()->contains(toElement(node))) | 1573 if (!m_tree.openElements()->contains(toElement(node.get()))) |
| 1574 return; | 1574 return; |
| 1575 } | 1575 } |
| 1576 m_tree.openElements()->popUntilPopped(toElement(node)); | 1576 m_tree.openElements()->popUntilPopped(toElement(node.get())); |
| 1577 return; | 1577 return; |
| 1578 } | 1578 } |
| 1579 if (isSpecialNode(node)) { | 1579 if (isSpecialNode(node.get())) { |
| 1580 parseError(token); | 1580 parseError(token); |
| 1581 return; | 1581 return; |
| 1582 } | 1582 } |
| 1583 record = record->next(); | 1583 record = record->next(); |
| 1584 } | 1584 } |
| 1585 } | 1585 } |
| 1586 | 1586 |
| 1587 // FIXME: This probably belongs on HTMLElementStack. | 1587 // FIXME: This probably belongs on HTMLElementStack. |
| 1588 HTMLElementStack::ElementRecord* HTMLTreeBuilder::furthestBlockForFormattingElem
ent(Element* formattingElement) | 1588 HTMLElementStack::ElementRecord* HTMLTreeBuilder::furthestBlockForFormattingElem
ent(Element* formattingElement) |
| 1589 { | 1589 { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1626 // 2. | 1626 // 2. |
| 1627 HTMLElementStack::ElementRecord* furthestBlock = furthestBlockForFormatt
ingElement(formattingElement); | 1627 HTMLElementStack::ElementRecord* furthestBlock = furthestBlockForFormatt
ingElement(formattingElement); |
| 1628 // 3. | 1628 // 3. |
| 1629 if (!furthestBlock) { | 1629 if (!furthestBlock) { |
| 1630 m_tree.openElements()->popUntilPopped(formattingElement); | 1630 m_tree.openElements()->popUntilPopped(formattingElement); |
| 1631 m_tree.activeFormattingElements()->remove(formattingElement); | 1631 m_tree.activeFormattingElements()->remove(formattingElement); |
| 1632 return; | 1632 return; |
| 1633 } | 1633 } |
| 1634 // 4. | 1634 // 4. |
| 1635 ASSERT(furthestBlock->isAbove(formattingElementRecord)); | 1635 ASSERT(furthestBlock->isAbove(formattingElementRecord)); |
| 1636 ContainerNode* commonAncestor = formattingElementRecord->next()->node(); | 1636 RefPtr<ContainerNode> commonAncestor = formattingElementRecord->next()->
node(); |
| 1637 // 5. | 1637 // 5. |
| 1638 HTMLFormattingElementList::Bookmark bookmark = m_tree.activeFormattingEl
ements()->bookmarkFor(formattingElement); | 1638 HTMLFormattingElementList::Bookmark bookmark = m_tree.activeFormattingEl
ements()->bookmarkFor(formattingElement); |
| 1639 // 6. | 1639 // 6. |
| 1640 HTMLElementStack::ElementRecord* node = furthestBlock; | 1640 HTMLElementStack::ElementRecord* node = furthestBlock; |
| 1641 HTMLElementStack::ElementRecord* nextNode = node->next(); | 1641 HTMLElementStack::ElementRecord* nextNode = node->next(); |
| 1642 HTMLElementStack::ElementRecord* lastNode = furthestBlock; | 1642 HTMLElementStack::ElementRecord* lastNode = furthestBlock; |
| 1643 for (int i = 0; i < adoptionAgencyIterationLimit; ++i) { | 1643 for (int i = 0; i < adoptionAgencyIterationLimit; ++i) { |
| 1644 // 6.1 | 1644 // 6.1 |
| 1645 node = nextNode; | 1645 node = nextNode; |
| 1646 ASSERT(node); | 1646 ASSERT(node); |
| (...skipping 1190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2837 } | 2837 } |
| 2838 | 2838 |
| 2839 bool HTMLTreeBuilder::pluginsEnabled(Frame* frame) | 2839 bool HTMLTreeBuilder::pluginsEnabled(Frame* frame) |
| 2840 { | 2840 { |
| 2841 if (!frame) | 2841 if (!frame) |
| 2842 return false; | 2842 return false; |
| 2843 return frame->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiate
Plugin); | 2843 return frame->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiate
Plugin); |
| 2844 } | 2844 } |
| 2845 | 2845 |
| 2846 } | 2846 } |
| OLD | NEW |