Chromium Code Reviews| 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) |