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

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

Issue 22043003: [oilpan] Handlify childrenChanged. (Closed) Base URL: svn://svn.chromium.org/blink/branches/oilpan
Patch Set: Created 7 years, 4 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
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 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 332
333 if (document() != newChild->document()) 333 if (document() != newChild->document())
334 document()->adoptNode(newChild.get(), ASSERT_NO_EXCEPTION); 334 document()->adoptNode(newChild.get(), ASSERT_NO_EXCEPTION);
335 335
336 insertBeforeCommon(nextChild, newChild.get()); 336 insertBeforeCommon(nextChild, newChild.get());
337 337
338 newChild->updateAncestorConnectedSubframeCountForInsertion(); 338 newChild->updateAncestorConnectedSubframeCountForInsertion();
339 339
340 ChildListMutationScope(this).childAdded(newChild.get()); 340 ChildListMutationScope(this).childAdded(newChild.get());
341 341
342 childrenChanged(true, newChild->previousSibling(), nextChild, 1); 342 childrenChanged(true, adoptRawResult(newChild->previousSibling()), adoptRawR esult(nextChild), 1);
343 ChildNodeInsertionNotifier(selfHandle()).notify(newChild.get()); 343 ChildNodeInsertionNotifier(selfHandle()).notify(newChild.get());
344 } 344 }
345 345
346 bool ContainerNode::replaceChild(PassRefPtr<Node> newChild, Node* oldChild, Exce ptionCode& ec, AttachBehavior attachBehavior) 346 bool ContainerNode::replaceChild(PassRefPtr<Node> newChild, Node* oldChild, Exce ptionCode& ec, AttachBehavior attachBehavior)
347 { 347 {
348 HandleScope scope; 348 HandleScope scope;
349 // FIXME(oilpan): not needed when all Node pointers are handlified. 349 // FIXME(oilpan): not needed when all Node pointers are handlified.
350 Handle<Node> protect(this); 350 Handle<Node> protect(this);
351 351
352 ec = 0; 352 ec = 0;
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 ec = NOT_FOUND_ERR; 507 ec = NOT_FOUND_ERR;
508 return false; 508 return false;
509 } 509 }
510 510
511 { 511 {
512 WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates; 512 WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates;
513 513
514 Node* prev = child->previousSibling(); 514 Node* prev = child->previousSibling();
515 Node* next = child->nextSibling(); 515 Node* next = child->nextSibling();
516 removeBetween(prev, next, child.get()); 516 removeBetween(prev, next, child.get());
517 childrenChanged(false, prev, next, -1); 517 childrenChanged(false, adoptRawResult(prev), adoptRawResult(next), -1);
518 ChildNodeRemovalNotifier(selfHandle()).notify(child.get()); 518 ChildNodeRemovalNotifier(selfHandle()).notify(child.get());
519 } 519 }
520 dispatchSubtreeModifiedEvent(); 520 dispatchSubtreeModifiedEvent();
521 521
522 return child; 522 return child;
523 } 523 }
524 524
525 void ContainerNode::removeBetween(Node* previousChild, Node* nextChild, Node* ol dChild) 525 void ContainerNode::removeBetween(Node* previousChild, Node* nextChild, Node* ol dChild)
526 { 526 {
527 HandleScope scope; 527 HandleScope scope;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 Node* prev = oldChild->previousSibling(); 560 Node* prev = oldChild->previousSibling();
561 Node* next = oldChild->nextSibling(); 561 Node* next = oldChild->nextSibling();
562 562
563 oldChild->updateAncestorConnectedSubframeCountForRemoval(); 563 oldChild->updateAncestorConnectedSubframeCountForRemoval();
564 564
565 ChildListMutationScope(this).willRemoveChild(oldChild); 565 ChildListMutationScope(this).willRemoveChild(oldChild);
566 oldChild->notifyMutationObserversNodeWillDetach(); 566 oldChild->notifyMutationObserversNodeWillDetach();
567 567
568 removeBetween(prev, next, oldChild); 568 removeBetween(prev, next, oldChild);
569 569
570 childrenChanged(true, prev, next, -1); 570 childrenChanged(true, adoptRawResult(prev), adoptRawResult(next), -1);
571 ChildNodeRemovalNotifier(selfHandle()).notify(oldChild); 571 ChildNodeRemovalNotifier(selfHandle()).notify(oldChild);
572 } 572 }
573 573
574 // this differs from other remove functions because it forcibly removes all the children, 574 // this differs from other remove functions because it forcibly removes all the children,
575 // regardless of read-only status or event exceptions, e.g. 575 // regardless of read-only status or event exceptions, e.g.
576 void ContainerNode::removeChildren() 576 void ContainerNode::removeChildren()
577 { 577 {
578 HandleScope scope; 578 HandleScope scope;
579 if (!m_firstChild) 579 if (!m_firstChild)
580 return; 580 return;
(...skipping 17 matching lines...) Expand all
598 { 598 {
599 NoEventDispatchAssertion assertNoEventDispatch; 599 NoEventDispatchAssertion assertNoEventDispatch;
600 removedChildren.reserveInitialCapacity(childNodeCount()); 600 removedChildren.reserveInitialCapacity(childNodeCount());
601 while (m_firstChild) { 601 while (m_firstChild) {
602 HandleScope scope; 602 HandleScope scope;
603 removedChildren.append(m_firstChild); 603 removedChildren.append(m_firstChild);
604 removeBetween(0, m_firstChild->nextSibling(), m_firstChild); 604 removeBetween(0, m_firstChild->nextSibling(), m_firstChild);
605 } 605 }
606 } 606 }
607 607
608 childrenChanged(false, 0, 0, -static_cast<int>(removedChildren.size())); 608 childrenChanged(false, nullptr, nullptr, -static_cast<int>(removedChildr en.size()));
609 609
610 for (size_t i = 0; i < removedChildren.size(); ++i) { 610 for (size_t i = 0; i < removedChildren.size(); ++i) {
611 HandleScope scope; 611 HandleScope scope;
612 ChildNodeRemovalNotifier(selfHandle()).notify(removedChildren[i].get ()); 612 ChildNodeRemovalNotifier(selfHandle()).notify(removedChildren[i].get ());
613 } 613 }
614 } 614 }
615 615
616 dispatchSubtreeModifiedEvent(); 616 dispatchSubtreeModifiedEvent();
617 } 617 }
618 618
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 NoEventDispatchAssertion assertNoEventDispatch; 692 NoEventDispatchAssertion assertNoEventDispatch;
693 // FIXME: This method should take a PassRefPtr. 693 // FIXME: This method should take a PassRefPtr.
694 appendChildToContainer(newChild.get(), this); 694 appendChildToContainer(newChild.get(), this);
695 treeScope()->adoptIfNeeded(newChild.get()); 695 treeScope()->adoptIfNeeded(newChild.get());
696 } 696 }
697 697
698 newChild->updateAncestorConnectedSubframeCountForInsertion(); 698 newChild->updateAncestorConnectedSubframeCountForInsertion();
699 699
700 ChildListMutationScope(this).childAdded(newChild.get()); 700 ChildListMutationScope(this).childAdded(newChild.get());
701 701
702 childrenChanged(true, last, 0, 1); 702 childrenChanged(true, adoptRawResult(last), nullptr, 1);
703 ChildNodeInsertionNotifier(selfHandle()).notify(newChild.get()); 703 ChildNodeInsertionNotifier(selfHandle()).notify(newChild.get());
704 } 704 }
705 705
706 void ContainerNode::suspendPostAttachCallbacks() 706 void ContainerNode::suspendPostAttachCallbacks()
707 { 707 {
708 if (!s_attachDepth) { 708 if (!s_attachDepth) {
709 ASSERT(!s_shouldReEnableMemoryCacheCallsAfterAttach); 709 ASSERT(!s_shouldReEnableMemoryCacheCallsAfterAttach);
710 if (Page* page = document()->page()) { 710 if (Page* page = document()->page()) {
711 // FIXME: How can this call be specific to one Page, while the 711 // FIXME: How can this call be specific to one Page, while the
712 // s_attachDepth is a global? Doesn't make sense. 712 // s_attachDepth is a global? Doesn't make sense.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 Node::attach(); 782 Node::attach();
783 } 783 }
784 784
785 void ContainerNode::detach() 785 void ContainerNode::detach()
786 { 786 {
787 detachChildren(); 787 detachChildren();
788 clearChildNeedsStyleRecalc(); 788 clearChildNeedsStyleRecalc();
789 Node::detach(); 789 Node::detach();
790 } 790 }
791 791
792 void ContainerNode::childrenChanged(bool changedByParser, Node*, Node*, int chil dCountDelta) 792 void ContainerNode::childrenChanged(bool changedByParser, const Handle<Node>&, c onst Handle<Node>&, int childCountDelta)
793 { 793 {
794 document()->incDOMTreeVersion(); 794 document()->incDOMTreeVersion();
795 if (!changedByParser && childCountDelta) 795 if (!changedByParser && childCountDelta)
796 document()->updateRangesAfterChildrenChanged(selfHandle()); 796 document()->updateRangesAfterChildrenChanged(selfHandle());
797 invalidateNodeListCachesInAncestors(); 797 invalidateNodeListCachesInAncestors();
798 } 798 }
799 799
800 void ContainerNode::cloneChildNodes(const Handle<ContainerNode>& clone) 800 void ContainerNode::cloneChildNodes(const Handle<ContainerNode>& clone)
801 { 801 {
802 ExceptionCode ec = 0; 802 ExceptionCode ec = 0;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
926 c->dispatchScopedEvent(MutationEvent::create(eventNames().DOMNodeRem ovedFromDocumentEvent, false)); 926 c->dispatchScopedEvent(MutationEvent::create(eventNames().DOMNodeRem ovedFromDocumentEvent, false));
927 } 927 }
928 } 928 }
929 929
930 static void updateTreeAfterInsertion(const Handle<ContainerNode>& parent, Node* child, AttachBehavior attachBehavior) 930 static void updateTreeAfterInsertion(const Handle<ContainerNode>& parent, Node* child, AttachBehavior attachBehavior)
931 { 931 {
932 ASSERT(child->refCount()); 932 ASSERT(child->refCount());
933 933
934 ChildListMutationScope(parent.raw()).childAdded(child); 934 ChildListMutationScope(parent.raw()).childAdded(child);
935 935
936 parent->childrenChanged(false, child->previousSibling(), child->nextSibling( ), 1); 936 parent->childrenChanged(false, adoptRawResult(child->previousSibling()), ado ptRawResult(child->nextSibling()), 1);
937 937
938 ChildNodeInsertionNotifier(parent).notify(child); 938 ChildNodeInsertionNotifier(parent).notify(child);
939 939
940 // FIXME: Attachment should be the first operation in this function, but som e code 940 // FIXME: Attachment should be the first operation in this function, but som e code
941 // (for example, HTMLFormControlElement's autofocus support) requires this o rdering. 941 // (for example, HTMLFormControlElement's autofocus support) requires this o rdering.
942 if (parent->attached() && !child->attached() && child->parentNode() == paren t) { 942 if (parent->attached() && !child->attached() && child->parentNode() == paren t) {
943 if (attachBehavior == AttachLazily) 943 if (attachBehavior == AttachLazily)
944 child->lazyAttach(); 944 child->lazyAttach();
945 else 945 else
946 child->attach(); 946 child->attach();
(...skipping 19 matching lines...) Expand all
966 #endif 966 #endif
967 967
968 void ContainerNode::accept(Visitor* visitor) const 968 void ContainerNode::accept(Visitor* visitor) const
969 { 969 {
970 Node::accept(visitor); 970 Node::accept(visitor);
971 visitor->visit(m_firstChild); 971 visitor->visit(m_firstChild);
972 visitor->visit(m_lastChild); 972 visitor->visit(m_lastChild);
973 } 973 }
974 974
975 } // namespace WebCore 975 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698