Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1436)

Side by Side Diff: sky/engine/core/dom/Document.cpp

Issue 732203004: Clean up child checks in ContainerNode. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Add back secondary hierarchy checks. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sky/engine/core/dom/Document.h ('k') | sky/engine/core/dom/DocumentFragment.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 1660 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 1671
1672 HitTestResult result(documentPoint); 1672 HitTestResult result(documentPoint);
1673 renderView()->hitTest(request, result); 1673 renderView()->hitTest(request, result);
1674 1674
1675 if (!request.readOnly()) 1675 if (!request.readOnly())
1676 updateHoverActiveState(request, result.innerElement(), &event); 1676 updateHoverActiveState(request, result.innerElement(), &event);
1677 1677
1678 return MouseEventWithHitTestResults(event, result); 1678 return MouseEventWithHitTestResults(event, result);
1679 } 1679 }
1680 1680
1681 // DOM Section 1.1.1
1682 bool Document::childTypeAllowed(NodeType type) const
1683 {
1684 switch (type) {
1685 case DOCUMENT_FRAGMENT_NODE:
1686 case DOCUMENT_NODE:
1687 case TEXT_NODE:
1688 return false;
1689 case ELEMENT_NODE:
1690 // Documents may contain no more than one of each of these.
1691 // (One Element and one DocumentType.)
1692 for (Node* c = firstChild(); c; c = c->nextSibling())
1693 if (c->nodeType() == type)
1694 return false;
1695 return true;
1696 }
1697 return false;
1698 }
1699
1700 bool Document::canReplaceChild(const Node& newChild, const Node& oldChild) const
1701 {
1702 if (oldChild.nodeType() == newChild.nodeType())
1703 return true;
1704
1705 int numElements = 0;
1706
1707 // First, check how many doctypes and elements we have, not counting
1708 // the child we're about to remove.
1709 for (Node* c = firstChild(); c; c = c->nextSibling()) {
1710 if (c == oldChild)
1711 continue;
1712
1713 switch (c->nodeType()) {
1714 case ELEMENT_NODE:
1715 numElements++;
1716 break;
1717 default:
1718 break;
1719 }
1720 }
1721
1722 // Then, see how many doctypes and elements might be added by the new child.
1723 if (newChild.isDocumentFragment()) {
1724 for (Node* c = toDocumentFragment(newChild).firstChild(); c; c = c->next Sibling()) {
1725 switch (c->nodeType()) {
1726 case DOCUMENT_FRAGMENT_NODE:
1727 case DOCUMENT_NODE:
1728 case TEXT_NODE:
1729 return false;
1730 case ELEMENT_NODE:
1731 numElements++;
1732 break;
1733 }
1734 }
1735 } else {
1736 switch (newChild.nodeType()) {
1737 case DOCUMENT_FRAGMENT_NODE:
1738 case DOCUMENT_NODE:
1739 case TEXT_NODE:
1740 return false;
1741 case ELEMENT_NODE:
1742 numElements++;
1743 break;
1744 }
1745 }
1746
1747 if (numElements > 1)
1748 return false;
1749
1750 return true;
1751 }
1752
1753 PassRefPtr<Node> Document::cloneNode(bool deep) 1681 PassRefPtr<Node> Document::cloneNode(bool deep)
1754 { 1682 {
1755 RefPtr<Document> clone = cloneDocumentWithoutChildren(); 1683 RefPtr<Document> clone = cloneDocumentWithoutChildren();
1756 if (deep) 1684 if (deep)
1757 cloneChildNodes(clone.get()); 1685 cloneChildNodes(clone.get());
1758 return clone.release(); 1686 return clone.release();
1759 } 1687 }
1760 1688
1761 PassRefPtr<Document> Document::cloneDocumentWithoutChildren() 1689 PassRefPtr<Document> Document::cloneDocumentWithoutChildren()
1762 { 1690 {
(...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after
2905 using namespace blink; 2833 using namespace blink;
2906 void showLiveDocumentInstances() 2834 void showLiveDocumentInstances()
2907 { 2835 {
2908 WeakDocumentSet& set = liveDocumentSet(); 2836 WeakDocumentSet& set = liveDocumentSet();
2909 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 2837 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
2910 for (WeakDocumentSet::const_iterator it = set.begin(); it != set.end(); ++it ) { 2838 for (WeakDocumentSet::const_iterator it = set.begin(); it != set.end(); ++it ) {
2911 fprintf(stderr, "- Document %p URL: %s\n", *it, (*it)->url().string().ut f8().data()); 2839 fprintf(stderr, "- Document %p URL: %s\n", *it, (*it)->url().string().ut f8().data());
2912 } 2840 }
2913 } 2841 }
2914 #endif 2842 #endif
OLDNEW
« no previous file with comments | « sky/engine/core/dom/Document.h ('k') | sky/engine/core/dom/DocumentFragment.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698