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

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

Issue 2173623003: Add "Failed" custom element state (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix and cleanup 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/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)

Powered by Google App Engine
This is Rietveld 408576698