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

Side by Side Diff: Source/core/dom/ContainerNode.cpp

Issue 329703002: Merge appendChildToContainer into ContainerNode (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: try again Created 6 years, 6 months 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/ContainerNode.h ('k') | Source/core/dom/ContainerNodeAlgorithms.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 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 prev->setNextSibling(&newChild); 264 prev->setNextSibling(&newChild);
265 } else { 265 } else {
266 ASSERT(firstChild() == nextChild); 266 ASSERT(firstChild() == nextChild);
267 m_firstChild = &newChild; 267 m_firstChild = &newChild;
268 } 268 }
269 newChild.setParentOrShadowHostNode(this); 269 newChild.setParentOrShadowHostNode(this);
270 newChild.setPreviousSibling(prev); 270 newChild.setPreviousSibling(prev);
271 newChild.setNextSibling(&nextChild); 271 newChild.setNextSibling(&nextChild);
272 } 272 }
273 273
274 void ContainerNode::appendChildCommon(Node& child)
275 {
276 child.setParentOrShadowHostNode(this);
277
278 if (m_lastChild) {
279 child.setPreviousSibling(m_lastChild);
280 m_lastChild->setNextSibling(&child);
281 } else {
282 setFirstChild(&child);
283 }
284
285 setLastChild(&child);
286 }
287
274 void ContainerNode::parserInsertBefore(PassRefPtrWillBeRawPtr<Node> newChild, No de& nextChild) 288 void ContainerNode::parserInsertBefore(PassRefPtrWillBeRawPtr<Node> newChild, No de& nextChild)
275 { 289 {
276 ASSERT(newChild); 290 ASSERT(newChild);
277 ASSERT(nextChild.parentNode() == this); 291 ASSERT(nextChild.parentNode() == this);
278 ASSERT(!newChild->isDocumentFragment()); 292 ASSERT(!newChild->isDocumentFragment());
279 ASSERT(!isHTMLTemplateElement(this)); 293 ASSERT(!isHTMLTemplateElement(this));
280 294
281 if (nextChild.previousSibling() == newChild || &nextChild == newChild) // no thing to do 295 if (nextChild.previousSibling() == newChild || &nextChild == newChild) // no thing to do
282 return; 296 return;
283 297
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 break; 381 break;
368 382
369 treeScope().adoptIfNeeded(child); 383 treeScope().adoptIfNeeded(child);
370 384
371 // Add child before "next". 385 // Add child before "next".
372 { 386 {
373 NoEventDispatchAssertion assertNoEventDispatch; 387 NoEventDispatchAssertion assertNoEventDispatch;
374 if (next) 388 if (next)
375 insertBeforeCommon(*next, child); 389 insertBeforeCommon(*next, child);
376 else 390 else
377 appendChildToContainer(child, *this); 391 appendChildCommon(child);
378 } 392 }
379 393
380 updateTreeAfterInsertion(child); 394 updateTreeAfterInsertion(child);
381 } 395 }
382 396
383 dispatchSubtreeModifiedEvent(); 397 dispatchSubtreeModifiedEvent();
384 } 398 }
385 399
386 void ContainerNode::willRemoveChild(Node& child) 400 void ContainerNode::willRemoveChild(Node& child)
387 { 401 {
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 // that means someone is doing something with DOM mutation -- can't re-p arent 629 // that means someone is doing something with DOM mutation -- can't re-p arent
616 // a child that already has a parent. 630 // a child that already has a parent.
617 if (child.parentNode()) 631 if (child.parentNode())
618 break; 632 break;
619 633
620 { 634 {
621 NoEventDispatchAssertion assertNoEventDispatch; 635 NoEventDispatchAssertion assertNoEventDispatch;
622 ScriptForbiddenScope forbidScript; 636 ScriptForbiddenScope forbidScript;
623 637
624 treeScope().adoptIfNeeded(child); 638 treeScope().adoptIfNeeded(child);
625 appendChildToContainer(child, *this); 639 appendChildCommon(child);
626 } 640 }
627 641
628 updateTreeAfterInsertion(child); 642 updateTreeAfterInsertion(child);
629 } 643 }
630 644
631 dispatchSubtreeModifiedEvent(); 645 dispatchSubtreeModifiedEvent();
632 } 646 }
633 647
634 void ContainerNode::parserAppendChild(PassRefPtrWillBeRawPtr<Node> newChild) 648 void ContainerNode::parserAppendChild(PassRefPtrWillBeRawPtr<Node> newChild)
635 { 649 {
636 ASSERT(newChild); 650 ASSERT(newChild);
637 ASSERT(!newChild->parentNode()); // Use appendChild if you need to handle re parenting (and want DOM mutation events). 651 ASSERT(!newChild->parentNode()); // Use appendChild if you need to handle re parenting (and want DOM mutation events).
638 ASSERT(!newChild->isDocumentFragment()); 652 ASSERT(!newChild->isDocumentFragment());
639 ASSERT(!isHTMLTemplateElement(this)); 653 ASSERT(!isHTMLTemplateElement(this));
640 654
641 if (document() != newChild->document()) 655 if (document() != newChild->document())
642 document().adoptNode(newChild.get(), ASSERT_NO_EXCEPTION); 656 document().adoptNode(newChild.get(), ASSERT_NO_EXCEPTION);
643 657
644 Node* last = m_lastChild; 658 Node* last = m_lastChild;
645 659
646 { 660 {
647 NoEventDispatchAssertion assertNoEventDispatch; 661 NoEventDispatchAssertion assertNoEventDispatch;
648 ScriptForbiddenScope forbidScript; 662 ScriptForbiddenScope forbidScript;
649 663
650 treeScope().adoptIfNeeded(*newChild); 664 treeScope().adoptIfNeeded(*newChild);
651 // FIXME: This method should take a PassRefPtr. 665 appendChildCommon(*newChild);
652 appendChildToContainer(*newChild, *this);
653 newChild->updateAncestorConnectedSubframeCountForInsertion(); 666 newChild->updateAncestorConnectedSubframeCountForInsertion();
654 ChildListMutationScope(*this).childAdded(*newChild); 667 ChildListMutationScope(*this).childAdded(*newChild);
655 } 668 }
656 669
657 childrenChanged(true, last, 0, 1); 670 childrenChanged(true, last, 0, 1);
658 notifyNodeInserted(*newChild); 671 notifyNodeInserted(*newChild);
659 } 672 }
660 673
661 void ContainerNode::notifyNodeInserted(Node& root) 674 void ContainerNode::notifyNodeInserted(Node& root)
662 { 675 {
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
1274 return true; 1287 return true;
1275 1288
1276 if (node->isElementNode() && toElement(node)->shadow()) 1289 if (node->isElementNode() && toElement(node)->shadow())
1277 return true; 1290 return true;
1278 1291
1279 return false; 1292 return false;
1280 } 1293 }
1281 #endif 1294 #endif
1282 1295
1283 } // namespace WebCore 1296 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/dom/ContainerNode.h ('k') | Source/core/dom/ContainerNodeAlgorithms.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698