| Index: third_party/WebKit/Source/core/dom/Document.cpp
|
| diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
|
| index cc1a8a9ad6e01f3107621b34bdde57373c14ca40..521026379b26da8a60f8b5e1ad70c3bed535c50f 100644
|
| --- a/third_party/WebKit/Source/core/dom/Document.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/Document.cpp
|
| @@ -1246,6 +1246,19 @@ Element* Document::scrollingElement() {
|
| return body();
|
| }
|
|
|
| +// We use HashMap::set over HashMap::add here as we want to
|
| +// replace the ComputedStyle but not the Element if the Element is
|
| +// already present.
|
| +void Document::addNonAttachedStyle(Element& element,
|
| + RefPtr<ComputedStyle> computedStyle) {
|
| + m_nonAttachedStyle.set(&element, computedStyle);
|
| +}
|
| +
|
| +ComputedStyle* Document::getNonAttachedStyle(Element& element) {
|
| + RefPtr<ComputedStyle> style = m_nonAttachedStyle.get(&element);
|
| + return style.get();
|
| +}
|
| +
|
| /*
|
| * Performs three operations:
|
| * 1. Convert control characters to spaces
|
| @@ -1917,6 +1930,9 @@ void Document::updateStyle() {
|
|
|
| view()->recalcOverflowAfterStyleChange();
|
|
|
| + // Only retain the HashMap for the duration of StyleRecalc and
|
| + // LayoutTreeConstruction.
|
| + m_nonAttachedStyle.clear();
|
| clearChildNeedsStyleRecalc();
|
|
|
| resolver.clearStyleSharingList();
|
| @@ -1927,6 +1943,7 @@ void Document::updateStyle() {
|
| DCHECK(!childNeedsStyleRecalc());
|
| DCHECK(inStyleRecalc());
|
| DCHECK_EQ(styleResolver(), &resolver);
|
| + DCHECK(m_nonAttachedStyle.isEmpty());
|
| m_lifecycle.advanceTo(DocumentLifecycle::StyleClean);
|
| if (shouldRecordStats) {
|
| TRACE_EVENT_END2("blink,blink_style", "Document::updateStyle",
|
| @@ -6326,6 +6343,7 @@ DEFINE_TRACE(Document) {
|
| visitor->trace(m_snapCoordinator);
|
| visitor->trace(m_resizeObserverController);
|
| visitor->trace(m_propertyRegistry);
|
| + visitor->trace(m_nonAttachedStyle);
|
| Supplementable<Document>::trace(visitor);
|
| TreeScope::trace(visitor);
|
| ContainerNode::trace(visitor);
|
|
|