Index: third_party/WebKit/Source/core/dom/Node.cpp |
diff --git a/third_party/WebKit/Source/core/dom/Node.cpp b/third_party/WebKit/Source/core/dom/Node.cpp |
index af430efa07f3fc38db3b9dc211d006c76b16417c..2ef2bf8bd8196554146df6ee355a8a98350291d2 100644 |
--- a/third_party/WebKit/Source/core/dom/Node.cpp |
+++ b/third_party/WebKit/Source/core/dom/Node.cpp |
@@ -55,6 +55,7 @@ |
#include "core/dom/Text.h" |
#include "core/dom/TreeScopeAdopter.h" |
#include "core/dom/UserActionElementSet.h" |
+#include "core/dom/custom/CustomElement.h" |
#include "core/dom/shadow/ElementShadow.h" |
#include "core/dom/shadow/FlatTreeTraversal.h" |
#include "core/dom/shadow/InsertionPoint.h" |
@@ -2341,22 +2342,17 @@ std::ostream& operator<<(std::ostream& os, CustomElementState state) |
case CustomElementState::Uncustomized: return os << "Uncustomized"; |
case CustomElementState::Undefined: return os << "Undefined"; |
case CustomElementState::Custom: return os << "Custom"; |
+ case CustomElementState::Failed: return os << "Failed"; |
default: NOTREACHED(); |
} |
return os; |
} |
-CustomElementState Node::getCustomElementState() const |
-{ |
- return !isCustomElement() |
- ? CustomElementState::Uncustomized |
- : (getFlag(CustomElementCustomFlag) ? CustomElementState::Custom : CustomElementState::Undefined); |
-} |
- |
void Node::setCustomElementState(CustomElementState newState) |
{ |
CustomElementState oldState = getCustomElementState(); |
+ bool isDefinedChanged = false; |
dominicc (has gone to gerrit)
2016/07/26 05:47:42
It might be better to have something that tests "i
|
switch (newState) { |
case CustomElementState::Uncustomized: |
NOTREACHED(); // Everything starts in this state |
@@ -2364,10 +2360,17 @@ void Node::setCustomElementState(CustomElementState newState) |
case CustomElementState::Undefined: |
DCHECK_EQ(CustomElementState::Uncustomized, oldState); |
+ isDefinedChanged = true; |
break; |
case CustomElementState::Custom: |
DCHECK_EQ(CustomElementState::Undefined, oldState); |
+ isDefinedChanged = true; |
+ break; |
+ |
+ case CustomElementState::Failed: |
+ DCHECK_NE(CustomElementState::Failed, oldState); |
+ isDefinedChanged = CustomElement::isDefined(oldState); |
break; |
} |
@@ -2377,17 +2380,16 @@ void Node::setCustomElementState(CustomElementState newState) |
bool wasDefined = toElement(this)->isDefined(); |
#endif |
- setFlag(CustomElementFlag); |
- if (newState == CustomElementState::Custom) |
- setFlag(CustomElementCustomFlag); |
+ m_nodeFlags = (m_nodeFlags & ~CustomElementStateMask) |
+ | static_cast<NodeFlags>(newState); |
DCHECK(newState == getCustomElementState()); |
- // When the state goes from Uncustomized to Undefined, and then to Custom, |
- // isDefined is always flipped. |
+ if (isDefinedChanged) { |
#if DCHECK_IS_ON() |
- DCHECK_NE(wasDefined, toElement(this)->isDefined()); |
+ DCHECK_NE(wasDefined, toElement(this)->isDefined()); |
#endif |
- toElement(this)->pseudoStateChanged(CSSSelector::PseudoDefined); |
+ toElement(this)->pseudoStateChanged(CSSSelector::PseudoDefined); |
+ } |
} |
void Node::setV0CustomElementState(V0CustomElementState newState) |