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

Side by Side Diff: third_party/WebKit/Source/core/dom/ContainerNode.h

Issue 2059163002: Schedule sibling invalidation sets for sibling insert/remove. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 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
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, 2009, 2010, 2011, 2013 Apple Inc. All r ights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2013 Apple Inc. All r ights reserved.
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 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 void setAffectedByFirstChildRules() { setRestyleFlag(AffectedByFirstChildRul es); } 152 void setAffectedByFirstChildRules() { setRestyleFlag(AffectedByFirstChildRul es); }
153 153
154 bool affectedByLastChildRules() const { return hasRestyleFlag(AffectedByLast ChildRules); } 154 bool affectedByLastChildRules() const { return hasRestyleFlag(AffectedByLast ChildRules); }
155 void setAffectedByLastChildRules() { setRestyleFlag(AffectedByLastChildRules ); } 155 void setAffectedByLastChildRules() { setRestyleFlag(AffectedByLastChildRules ); }
156 156
157 bool needsAdjacentStyleRecalc() const; 157 bool needsAdjacentStyleRecalc() const;
158 158
159 // FIXME: These methods should all be renamed to something better than "chec k", 159 // FIXME: These methods should all be renamed to something better than "chec k",
160 // since it's not clear that they alter the style bits of siblings and child ren. 160 // since it's not clear that they alter the style bits of siblings and child ren.
161 enum SiblingCheckType { FinishedParsingChildren, SiblingElementInserted, Sib lingElementRemoved }; 161 enum SiblingCheckType { FinishedParsingChildren, SiblingElementInserted, Sib lingElementRemoved };
162 void checkForSiblingStyleChanges(SiblingCheckType, Node* nodeBeforeChange, N ode* nodeAfterChange); 162 void checkForSiblingStyleChanges(SiblingCheckType, Node* changedNode, Node* nodeBeforeChange, Node* nodeAfterChange);
163 void recalcChildStyle(StyleRecalcChange); 163 void recalcChildStyle(StyleRecalcChange);
164 164
165 bool childrenSupportStyleSharing() const { return !hasRestyleFlags(); } 165 bool childrenSupportStyleSharing() const { return !hasRestyleFlags(); }
166 166
167 // ------------------------------------------------------------------------- ---- 167 // ------------------------------------------------------------------------- ----
168 // Notification of document structure changes (see core/dom/Node.h for more notification methods) 168 // Notification of document structure changes (see core/dom/Node.h for more notification methods)
169 169
170 enum ChildrenChangeType { ElementInserted, NonElementInserted, ElementRemove d, NonElementRemoved, AllChildrenRemoved, TextChanged }; 170 enum ChildrenChangeType { ElementInserted, NonElementInserted, ElementRemove d, NonElementRemoved, AllChildrenRemoved, TextChanged };
171 enum ChildrenChangeSource { ChildrenChangeSourceAPI, ChildrenChangeSourcePar ser }; 171 enum ChildrenChangeSource { ChildrenChangeSourceAPI, ChildrenChangeSourcePar ser };
172 struct ChildrenChange { 172 struct ChildrenChange {
173 STACK_ALLOCATED(); 173 STACK_ALLOCATED();
174 public: 174 public:
175 static ChildrenChange forInsertion(Node& node, ChildrenChangeSource byPa rser) 175 static ChildrenChange forInsertion(Node& node, ChildrenChangeSource byPa rser)
176 { 176 {
177 ChildrenChange change = { 177 ChildrenChange change = {
178 node.isElementNode() ? ElementInserted : NonElementInserted, 178 node.isElementNode() ? ElementInserted : NonElementInserted,
179 &node,
179 node.previousSibling(), 180 node.previousSibling(),
180 node.nextSibling(), 181 node.nextSibling(),
181 byParser 182 byParser
182 }; 183 };
183 return change; 184 return change;
184 } 185 }
185 186
186 static ChildrenChange forRemoval(Node& node, Node* previousSibling, Node * nextSibling, ChildrenChangeSource byParser) 187 static ChildrenChange forRemoval(Node& node, Node* previousSibling, Node * nextSibling, ChildrenChangeSource byParser)
187 { 188 {
188 ChildrenChange change = { 189 ChildrenChange change = {
189 node.isElementNode() ? ElementRemoved : NonElementRemoved, 190 node.isElementNode() ? ElementRemoved : NonElementRemoved,
191 &node,
190 previousSibling, 192 previousSibling,
191 nextSibling, 193 nextSibling,
192 byParser 194 byParser
193 }; 195 };
194 return change; 196 return change;
195 } 197 }
196 198
197 bool isChildInsertion() const { return type == ElementInserted || type = = NonElementInserted; } 199 bool isChildInsertion() const { return type == ElementInserted || type = = NonElementInserted; }
198 bool isChildRemoval() const { return type == ElementRemoved || type == N onElementRemoved; } 200 bool isChildRemoval() const { return type == ElementRemoved || type == N onElementRemoved; }
199 bool isChildElementChange() const { return type == ElementInserted || ty pe == ElementRemoved; } 201 bool isChildElementChange() const { return type == ElementInserted || ty pe == ElementRemoved; }
200 202
201 ChildrenChangeType type; 203 ChildrenChangeType type;
204 Member<Node> siblingChanged;
202 Member<Node> siblingBeforeChange; 205 Member<Node> siblingBeforeChange;
203 Member<Node> siblingAfterChange; 206 Member<Node> siblingAfterChange;
204 ChildrenChangeSource byParser; 207 ChildrenChangeSource byParser;
205 }; 208 };
206 209
207 // Notifies the node that it's list of children have changed (either by addi ng or removing child nodes), or a child 210 // Notifies the node that it's list of children have changed (either by addi ng or removing child nodes), or a child
208 // node that is of the type CDATA_SECTION_NODE, TEXT_NODE or COMMENT_NODE ha s changed its value. 211 // node that is of the type CDATA_SECTION_NODE, TEXT_NODE or COMMENT_NODE ha s changed its value.
209 virtual void childrenChanged(const ChildrenChange&); 212 virtual void childrenChanged(const ChildrenChange&);
210 213
211 DECLARE_VIRTUAL_TRACE(); 214 DECLARE_VIRTUAL_TRACE();
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 inline void getChildNodes(ContainerNode& node, NodeVector& nodes) 339 inline void getChildNodes(ContainerNode& node, NodeVector& nodes)
337 { 340 {
338 DCHECK(!nodes.size()); 341 DCHECK(!nodes.size());
339 for (Node* child = node.firstChild(); child; child = child->nextSibling()) 342 for (Node* child = node.firstChild(); child; child = child->nextSibling())
340 nodes.append(child); 343 nodes.append(child);
341 } 344 }
342 345
343 } // namespace blink 346 } // namespace blink
344 347
345 #endif // ContainerNode_h 348 #endif // ContainerNode_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698