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

Side by Side Diff: third_party/WebKit/Source/core/dom/Node.cpp

Issue 2836753002: Rebuild layout tree in flat tree order. (Closed)
Patch Set: Rebased Created 3 years, 7 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
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, 2010, 2011 Apple Inc. All 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
6 * rights reserved. 6 * rights reserved.
7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * 10 *
(...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 node_flags_ = (node_flags_ & ~kStyleChangeMask) | change_type; 762 node_flags_ = (node_flags_ & ~kStyleChangeMask) | change_type;
763 } 763 }
764 764
765 void Node::MarkAncestorsWithChildNeedsStyleRecalc() { 765 void Node::MarkAncestorsWithChildNeedsStyleRecalc() {
766 for (ContainerNode* p = ParentOrShadowHostNode(); 766 for (ContainerNode* p = ParentOrShadowHostNode();
767 p && !p->ChildNeedsStyleRecalc(); p = p->ParentOrShadowHostNode()) 767 p && !p->ChildNeedsStyleRecalc(); p = p->ParentOrShadowHostNode())
768 p->SetChildNeedsStyleRecalc(); 768 p->SetChildNeedsStyleRecalc();
769 GetDocument().ScheduleLayoutTreeUpdateIfNeeded(); 769 GetDocument().ScheduleLayoutTreeUpdateIfNeeded();
770 } 770 }
771 771
772 static ContainerNode* GetReattachParent(Node& node) {
773 if (node.IsPseudoElement())
774 return node.ParentOrShadowHostNode();
775 if (node.IsChildOfV1ShadowHost()) {
776 if (HTMLSlotElement* slot = node.FinalDestinationSlot())
777 return slot;
778 }
779 if (node.IsInV0ShadowTree() || node.IsChildOfV0ShadowHost()) {
780 if (ShadowWhereNodeCanBeDistributedForV0(node)) {
781 if (InsertionPoint* insertion_point =
782 const_cast<InsertionPoint*>(ResolveReprojection(&node))) {
783 return insertion_point;
784 }
785 }
786 }
787 return node.ParentOrShadowHostNode();
788 }
789
772 void Node::MarkAncestorsWithChildNeedsReattachLayoutTree() { 790 void Node::MarkAncestorsWithChildNeedsReattachLayoutTree() {
773 for (ContainerNode* p = ParentOrShadowHostNode(); 791 for (ContainerNode* p = GetReattachParent(*this);
774 p && !p->ChildNeedsReattachLayoutTree(); p = p->ParentOrShadowHostNode()) 792 p && !p->ChildNeedsReattachLayoutTree(); p = GetReattachParent(*p))
775 p->SetChildNeedsReattachLayoutTree(); 793 p->SetChildNeedsReattachLayoutTree();
776 } 794 }
777 795
778 void Node::SetNeedsReattachLayoutTree() { 796 void Node::SetNeedsReattachLayoutTree() {
779 DCHECK(GetDocument().InStyleRecalc()); 797 DCHECK(GetDocument().InStyleRecalc());
780 DCHECK(!GetDocument().ChildNeedsDistributionRecalc()); 798 DCHECK(!GetDocument().ChildNeedsDistributionRecalc());
781 SetFlag(kNeedsReattachLayoutTree); 799 SetFlag(kNeedsReattachLayoutTree);
782 MarkAncestorsWithChildNeedsReattachLayoutTree(); 800 MarkAncestorsWithChildNeedsReattachLayoutTree();
783 } 801 }
784 802
(...skipping 1599 matching lines...) Expand 10 before | Expand all | Expand 10 after
2384 } 2402 }
2385 2403
2386 HTMLSlotElement* Node::AssignedSlot() const { 2404 HTMLSlotElement* Node::AssignedSlot() const {
2387 // assignedSlot doesn't need to call updateDistribution(). 2405 // assignedSlot doesn't need to call updateDistribution().
2388 DCHECK(!IsPseudoElement()); 2406 DCHECK(!IsPseudoElement());
2389 if (ShadowRoot* root = V1ShadowRootOfParent()) 2407 if (ShadowRoot* root = V1ShadowRootOfParent())
2390 return root->AssignedSlotFor(*this); 2408 return root->AssignedSlotFor(*this);
2391 return nullptr; 2409 return nullptr;
2392 } 2410 }
2393 2411
2412 HTMLSlotElement* Node::FinalDestinationSlot() const {
2413 HTMLSlotElement* slot = AssignedSlot();
2414 if (!slot)
2415 return nullptr;
2416 for (HTMLSlotElement* next = slot->AssignedSlot(); next;
2417 next = next->AssignedSlot()) {
2418 slot = next;
2419 }
2420 return slot;
2421 }
2422
2394 HTMLSlotElement* Node::assignedSlotForBinding() { 2423 HTMLSlotElement* Node::assignedSlotForBinding() {
2395 // assignedSlot doesn't need to call updateDistribution(). 2424 // assignedSlot doesn't need to call updateDistribution().
2396 if (ShadowRoot* root = V1ShadowRootOfParent()) { 2425 if (ShadowRoot* root = V1ShadowRootOfParent()) {
2397 if (root->GetType() == ShadowRootType::kOpen) 2426 if (root->GetType() == ShadowRootType::kOpen)
2398 return root->AssignedSlotFor(*this); 2427 return root->AssignedSlotFor(*this);
2399 } 2428 }
2400 return nullptr; 2429 return nullptr;
2401 } 2430 }
2402 2431
2403 void Node::SetFocused(bool flag, WebFocusType focus_type) { 2432 void Node::SetFocused(bool flag, WebFocusType focus_type) {
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
2593 if (node) { 2622 if (node) {
2594 std::stringstream stream; 2623 std::stringstream stream;
2595 node->PrintNodePathTo(stream); 2624 node->PrintNodePathTo(stream);
2596 LOG(INFO) << stream.str(); 2625 LOG(INFO) << stream.str();
2597 } else { 2626 } else {
2598 LOG(INFO) << "Cannot showNodePath for <null>"; 2627 LOG(INFO) << "Cannot showNodePath for <null>";
2599 } 2628 }
2600 } 2629 }
2601 2630
2602 #endif 2631 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Node.h ('k') | third_party/WebKit/Source/core/dom/shadow/FlatTreeTraversal.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698