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

Unified Diff: third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.cpp

Issue 2166213002: Fire attributeChangedCallback on style changes for Custom Elements V1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: dominicc review Created 4 years, 5 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/css/PropertySetCSSStyleDeclaration.cpp
diff --git a/third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.cpp b/third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.cpp
index a2ce75170ba209a48736ae5d9649a8cf49ea315b..fa0735058c70279dc6937fe4bb57b775111d425c 100644
--- a/third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.cpp
+++ b/third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.cpp
@@ -34,6 +34,8 @@
#include "core/dom/MutationRecord.h"
#include "core/dom/StyleChangeReason.h"
#include "core/dom/StyleEngine.h"
+#include "core/dom/custom/CustomElement.h"
+#include "core/dom/custom/CustomElementDefinition.h"
#include "core/inspector/InspectorInstrumentation.h"
#include "platform/RuntimeEnabledFeatures.h"
@@ -41,6 +43,13 @@ namespace blink {
namespace {
+static CustomElementDefinition* definitionIfStyleChangedCallback(Element* element)
+{
+ CustomElementDefinition* definition = CustomElement::definitionForElement(element);
+ return definition && definition->hasStyleAttributeChangedCallback()
+ ? definition : nullptr;
+}
+
class StyleAttributeMutationScope {
WTF_MAKE_NONCOPYABLE(StyleAttributeMutationScope);
STACK_ALLOCATED();
@@ -60,18 +69,16 @@ public:
if (!s_currentDecl->parentElement())
return;
- bool shouldReadOldValue = false;
-
m_mutationRecipients = MutationObserverInterestGroup::createForAttributesMutation(*s_currentDecl->parentElement(), HTMLNames::styleAttr);
- if (m_mutationRecipients && m_mutationRecipients->isOldValueRequested())
- shouldReadOldValue = true;
+ bool shouldReadOldValue =
+ (m_mutationRecipients && m_mutationRecipients->isOldValueRequested())
+ || definitionIfStyleChangedCallback(s_currentDecl->parentElement());
- AtomicString oldValue;
if (shouldReadOldValue)
- oldValue = s_currentDecl->parentElement()->getAttribute(HTMLNames::styleAttr);
+ m_oldValue = s_currentDecl->parentElement()->getAttribute(HTMLNames::styleAttr);
if (m_mutationRecipients) {
- AtomicString requestedOldValue = m_mutationRecipients->isOldValueRequested() ? oldValue : nullAtom;
+ AtomicString requestedOldValue = m_mutationRecipients->isOldValueRequested() ? m_oldValue : nullAtom;
m_mutation = MutationRecord::createAttributes(s_currentDecl->parentElement(), HTMLNames::styleAttr, requestedOldValue);
}
}
@@ -82,10 +89,19 @@ public:
if (s_scopeCount)
return;
- if (m_mutation && s_shouldDeliver)
- m_mutationRecipients->enqueueMutationRecord(m_mutation);
+ if (s_shouldDeliver) {
+ if (m_mutation)
+ m_mutationRecipients->enqueueMutationRecord(m_mutation);
+
+ Element* element = s_currentDecl->parentElement();
+ if (CustomElementDefinition* definition = definitionIfStyleChangedCallback(element)) {
+ definition->enqueueAttributeChangedCallback(element,
+ HTMLNames::styleAttr, m_oldValue,
+ element->getAttribute(HTMLNames::styleAttr));
+ }
- s_shouldDeliver = false;
+ s_shouldDeliver = false;
+ }
// We have to clear internal state before calling Inspector's code.
AbstractPropertySetCSSStyleDeclaration* localCopyStyleDecl = s_currentDecl;
@@ -117,6 +133,7 @@ private:
Member<MutationObserverInterestGroup> m_mutationRecipients;
Member<MutationRecord> m_mutation;
+ AtomicString m_oldValue;
};
unsigned StyleAttributeMutationScope::s_scopeCount = 0;
« no previous file with comments | « third_party/WebKit/Source/core/css/CSSStyleDeclaration.idl ('k') | third_party/WebKit/Source/core/dom/custom/CustomElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698