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

Unified Diff: third_party/WebKit/Source/core/dom/Element.cpp

Issue 2727233005: Remove calls to styleForLayoutObject() in LayoutTreeBuilder::style() (Closed)
Patch Set: Format issue Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/dom/Element.cpp
diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp
index f33de88828625bc869a80e4e0fb9c2575863396d..01d23094393f1fcf9dd99b7a35fede1f99f18025 100644
--- a/third_party/WebKit/Source/core/dom/Element.cpp
+++ b/third_party/WebKit/Source/core/dom/Element.cpp
@@ -26,6 +26,7 @@
#include "core/dom/Element.h"
+#include <memory>
nainar 2017/03/09 02:53:03 git cl format. Will get rid of this.
#include "bindings/core/v8/DOMDataStore.h"
#include "bindings/core/v8/Dictionary.h"
#include "bindings/core/v8/ExceptionMessages.h"
@@ -110,6 +111,7 @@
#include "core/html/HTMLFormControlsCollection.h"
#include "core/html/HTMLFrameElementBase.h"
#include "core/html/HTMLFrameOwnerElement.h"
+#include "core/html/HTMLObjectElement.h"
nainar 2017/03/09 02:53:03 Not needed.
#include "core/html/HTMLOptionsCollection.h"
#include "core/html/HTMLPlugInElement.h"
#include "core/html/HTMLSlotElement.h"
@@ -146,7 +148,6 @@
#include "wtf/text/CString.h"
#include "wtf/text/StringBuilder.h"
#include "wtf/text/TextPosition.h"
-#include <memory>
namespace blink {
@@ -1739,6 +1740,7 @@ void Element::attachLayoutTree(const AttachContext& context) {
SelectorFilterParentScope filterScope(*this);
StyleSharingDepthScope sharingScope(*this);
+ clearNeedsReattachLayoutTree();
createPseudoElementIfNeeded(PseudoIdBefore);
// When a shadow root exists, it does the work of attaching the children.
@@ -2021,11 +2023,14 @@ StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change,
}
if (localChange == Reattach) {
+ // This mimicks Element::recalcStyleForReattach except it also stores the
+ // nextTextSibling information.
StyleReattachData styleReattachData;
styleReattachData.computedStyle = std::move(newStyle);
styleReattachData.nextTextSibling = nextTextSibling;
document().addStyleReattachData(*this, styleReattachData);
setNeedsReattachLayoutTree();
+ recalcContainedStyleForReattach();
return Reattach;
}
@@ -2070,6 +2075,44 @@ StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change,
return localChange;
}
+void Element::recalcStyleForReattach() {
+ StyleReattachData styleReattachData;
+ styleReattachData.computedStyle = styleForLayoutObject();
+ if (layoutObjectIsNeeded(*styleReattachData.computedStyle.get())) {
+ document().addStyleReattachData(*this, styleReattachData);
+ setNeedsReattachLayoutTree();
+ recalcContainedStyleForReattach();
+ }
+}
+
+void Element::recalcContainedStyleForReattach() {
+ if (!childrenCanHaveStyle())
+ return;
+ if (hasCustomStyleCallbacks())
+ return;
+
+ SelectorFilterParentScope filterScope(*this);
+ StyleSharingDepthScope sharingScope(*this);
+ recalcPseudoStyleForReattach(PseudoIdBefore);
+ recalcShadowRootStylesForReattach();
+ recalcDescendantStylesForReattach();
+ recalcPseudoStyleForReattach(PseudoIdAfter);
+ recalcPseudoStyleForReattach(PseudoIdBackdrop);
+ recalcPseudoStyleForReattach(PseudoIdFirstLetter);
+}
+
+void Element::recalcPseudoStyleForReattach(PseudoId pseudoId) {
+ if (PseudoElement* element = pseudoElement(pseudoId))
+ element->recalcStyleForReattach();
+}
+
+void Element::recalcShadowRootStylesForReattach() {
+ for (ShadowRoot* root = youngestShadowRoot(); root;
+ root = root->olderShadowRoot()) {
+ root->recalcDescendantStylesForReattach();
+ }
+}
+
void Element::rebuildLayoutTree() {
DCHECK(inActiveDocument());
DCHECK(parentNode());
@@ -2078,6 +2121,7 @@ void Element::rebuildLayoutTree() {
StyleReattachData styleReattachData =
document().getStyleReattachData(*this);
AttachContext reattachContext;
+ // TODO(nainar): Shouldn't need AttachContext.resolvedStyle anymore
reattachContext.resolvedStyle = styleReattachData.computedStyle.get();
bool layoutObjectWillChange = needsAttach() || layoutObject();
reattachLayoutTree(reattachContext);
« no previous file with comments | « third_party/WebKit/Source/core/dom/Element.h ('k') | third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698