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

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

Issue 10907267: Merge 128524 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1229/
Patch Set: Created 8 years, 3 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
« no previous file with comments | « LayoutTests/plugins/plugin-remove-readystatechange-expected.txt ('k') | no next file » | 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 21 matching lines...) Expand all
32 #include "Frame.h" 32 #include "Frame.h"
33 #include "FrameView.h" 33 #include "FrameView.h"
34 #include "InlineTextBox.h" 34 #include "InlineTextBox.h"
35 #include "InspectorInstrumentation.h" 35 #include "InspectorInstrumentation.h"
36 #include "MemoryCache.h" 36 #include "MemoryCache.h"
37 #include "MutationEvent.h" 37 #include "MutationEvent.h"
38 #include "ResourceLoadScheduler.h" 38 #include "ResourceLoadScheduler.h"
39 #include "Page.h" 39 #include "Page.h"
40 #include "RenderBox.h" 40 #include "RenderBox.h"
41 #include "RenderTheme.h" 41 #include "RenderTheme.h"
42 #include "RenderWidget.h"
42 #include "RootInlineBox.h" 43 #include "RootInlineBox.h"
43 #include <wtf/CurrentTime.h> 44 #include <wtf/CurrentTime.h>
44 #include <wtf/Vector.h> 45 #include <wtf/Vector.h>
45 46
46 using namespace std; 47 using namespace std;
47 48
48 namespace WebCore { 49 namespace WebCore {
49 50
50 static void dispatchChildInsertionEvents(Node*); 51 static void dispatchChildInsertionEvents(Node*);
51 static void dispatchChildRemovalEvents(Node*); 52 static void dispatchChildRemovalEvents(Node*);
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 } 401 }
401 402
402 willRemoveChild(child.get()); 403 willRemoveChild(child.get());
403 404
404 // Mutation events might have moved this child into a different parent. 405 // Mutation events might have moved this child into a different parent.
405 if (child->parentNode() != this) { 406 if (child->parentNode() != this) {
406 ec = NOT_FOUND_ERR; 407 ec = NOT_FOUND_ERR;
407 return false; 408 return false;
408 } 409 }
409 410
411 RenderWidget::suspendWidgetHierarchyUpdates();
412
410 Node* prev = child->previousSibling(); 413 Node* prev = child->previousSibling();
411 Node* next = child->nextSibling(); 414 Node* next = child->nextSibling();
412 removeBetween(prev, next, child.get()); 415 removeBetween(prev, next, child.get());
416 childrenChanged(false, prev, next, -1);
417 ChildNodeRemovalNotifier(this).notify(child.get());
413 418
414 childrenChanged(false, prev, next, -1); 419 RenderWidget::resumeWidgetHierarchyUpdates();
415
416 ChildNodeRemovalNotifier(this).notify(child.get());
417 dispatchSubtreeModifiedEvent(); 420 dispatchSubtreeModifiedEvent();
418 421
419 return child; 422 return child;
420 } 423 }
421 424
422 void ContainerNode::removeBetween(Node* previousChild, Node* nextChild, Node* ol dChild) 425 void ContainerNode::removeBetween(Node* previousChild, Node* nextChild, Node* ol dChild)
423 { 426 {
424 ASSERT(oldChild); 427 ASSERT(oldChild);
425 ASSERT(oldChild->parentNode() == this); 428 ASSERT(oldChild->parentNode() == this);
426 429
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 document()->removeFocusedNodeOfSubtree(this, true); 479 document()->removeFocusedNodeOfSubtree(this, true);
477 480
478 #if ENABLE(FULLSCREEN_API) 481 #if ENABLE(FULLSCREEN_API)
479 document()->removeFullScreenElementOfSubtree(this, true); 482 document()->removeFullScreenElementOfSubtree(this, true);
480 #endif 483 #endif
481 484
482 // Do any prep work needed before actually starting to detach 485 // Do any prep work needed before actually starting to detach
483 // and remove... e.g. stop loading frames, fire unload events. 486 // and remove... e.g. stop loading frames, fire unload events.
484 willRemoveChildren(protect.get()); 487 willRemoveChildren(protect.get());
485 488
489 RenderWidget::suspendWidgetHierarchyUpdates();
486 forbidEventDispatch(); 490 forbidEventDispatch();
487 Vector<RefPtr<Node>, 10> removedChildren; 491 Vector<RefPtr<Node>, 10> removedChildren;
488 removedChildren.reserveInitialCapacity(childNodeCount()); 492 removedChildren.reserveInitialCapacity(childNodeCount());
489 while (RefPtr<Node> n = m_firstChild) { 493 while (RefPtr<Node> n = m_firstChild) {
490 Node* next = n->nextSibling(); 494 Node* next = n->nextSibling();
491 495
492 // Remove the node from the tree before calling detach or removedFromDoc ument (4427024, 4129744). 496 // Remove the node from the tree before calling detach or removedFromDoc ument (4427024, 4129744).
493 // removeChild() does this after calling detach(). There is no explanati on for 497 // removeChild() does this after calling detach(). There is no explanati on for
494 // this discrepancy between removeChild() and its optimized version remo veChildren(). 498 // this discrepancy between removeChild() and its optimized version remo veChildren().
495 n->setPreviousSibling(0); 499 n->setPreviousSibling(0);
(...skipping 21 matching lines...) Expand all
517 if (removedChild->attached()) 521 if (removedChild->attached())
518 removedChild->detach(); 522 removedChild->detach();
519 } 523 }
520 524
521 childrenChanged(false, 0, 0, -static_cast<int>(removedChildrenCount)); 525 childrenChanged(false, 0, 0, -static_cast<int>(removedChildrenCount));
522 526
523 for (i = 0; i < removedChildrenCount; ++i) 527 for (i = 0; i < removedChildrenCount; ++i)
524 ChildNodeRemovalNotifier(this).notify(removedChildren[i].get()); 528 ChildNodeRemovalNotifier(this).notify(removedChildren[i].get());
525 529
526 allowEventDispatch(); 530 allowEventDispatch();
531 RenderWidget::resumeWidgetHierarchyUpdates();
532
527 dispatchSubtreeModifiedEvent(); 533 dispatchSubtreeModifiedEvent();
528 } 534 }
529 535
530 bool ContainerNode::appendChild(PassRefPtr<Node> newChild, ExceptionCode& ec, bo ol shouldLazyAttach) 536 bool ContainerNode::appendChild(PassRefPtr<Node> newChild, ExceptionCode& ec, bo ol shouldLazyAttach)
531 { 537 {
532 RefPtr<ContainerNode> protect(this); 538 RefPtr<ContainerNode> protect(this);
533 539
534 // Check that this node is not "floating". 540 // Check that this node is not "floating".
535 // If it is, it can be deleted as a side effect of sending mutation events. 541 // If it is, it can be deleted as a side effect of sending mutation events.
536 ASSERT(refCount() || parentOrHostNode()); 542 ASSERT(refCount() || parentOrHostNode());
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 if (shouldLazyAttach) 995 if (shouldLazyAttach)
990 child->lazyAttach(); 996 child->lazyAttach();
991 else 997 else
992 child->attach(); 998 child->attach();
993 } 999 }
994 1000
995 dispatchChildInsertionEvents(child); 1001 dispatchChildInsertionEvents(child);
996 } 1002 }
997 1003
998 } // namespace WebCore 1004 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/plugins/plugin-remove-readystatechange-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698