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

Unified Diff: Source/core/css/parser/CSSSelectorParser.cpp

Issue 1305973007: Clean up empty namespace handling and fix empty namespaces in compound selectors (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@defaultns
Patch Set: Created 5 years, 3 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
« no previous file with comments | « Source/core/css/parser/CSSSelectorParser.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/parser/CSSSelectorParser.cpp
diff --git a/Source/core/css/parser/CSSSelectorParser.cpp b/Source/core/css/parser/CSSSelectorParser.cpp
index 84f8b5f22deaced70823449a5a613ed3687c0d6a..79ec539accf7b1e55a0729f8d040a2d40e235de4 100644
--- a/Source/core/css/parser/CSSSelectorParser.cpp
+++ b/Source/core/css/parser/CSSSelectorParser.cpp
@@ -142,8 +142,7 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSPars
AtomicString namespacePrefix;
AtomicString elementName;
- bool hasNamespace;
- if (!consumeName(range, elementName, namespacePrefix, hasNamespace)) {
+ if (!consumeName(range, elementName, namespacePrefix)) {
compoundSelector = consumeSimpleSelector(range);
if (!compoundSelector)
return nullptr;
@@ -158,11 +157,8 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSPars
compoundSelector = simpleSelector.release();
}
- if (!compoundSelector) {
- if (hasNamespace)
- return CSSParserSelector::create(determineNameInNamespace(namespacePrefix, elementName));
- return CSSParserSelector::create(QualifiedName(nullAtom, elementName, defaultNamespace()));
- }
+ if (!compoundSelector)
+ return CSSParserSelector::create(determineNameInNamespace(namespacePrefix, elementName));
prependTypeSelectorIfNeeded(namespacePrefix, elementName, compoundSelector.get());
return compoundSelector.release();
}
@@ -186,11 +182,10 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeSimpleSelector(CSSParser
return selector.release();
}
-bool CSSSelectorParser::consumeName(CSSParserTokenRange& range, AtomicString& name, AtomicString& namespacePrefix, bool& hasNamespace)
+bool CSSSelectorParser::consumeName(CSSParserTokenRange& range, AtomicString& name, AtomicString& namespacePrefix)
{
name = nullAtom;
namespacePrefix = nullAtom;
- hasNamespace = false;
const CSSParserToken& firstToken = range.peek();
if (firstToken.type() == IdentToken) {
@@ -200,7 +195,8 @@ bool CSSSelectorParser::consumeName(CSSParserTokenRange& range, AtomicString& na
name = starAtom;
range.consume();
} else if (firstToken.type() == DelimiterToken && firstToken.delimiter() == '|') {
- // No namespace
+ // This is an empty namespace, which'll get assigned this value below
+ name = emptyAtom;
} else {
return false;
}
@@ -209,7 +205,6 @@ bool CSSSelectorParser::consumeName(CSSParserTokenRange& range, AtomicString& na
return true;
range.consume();
- hasNamespace = true;
namespacePrefix = name;
const CSSParserToken& nameToken = range.consume();
if (nameToken.type() == IdentToken) {
@@ -265,17 +260,16 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserToken
AtomicString namespacePrefix;
AtomicString attributeName;
- bool hasNamespace;
- if (!consumeName(block, attributeName, namespacePrefix, hasNamespace))
+ if (!consumeName(block, attributeName, namespacePrefix))
return nullptr;
block.consumeWhitespace();
if (m_context.isHTMLDocument())
attributeName = attributeName.lower();
- QualifiedName qualifiedName = hasNamespace
- ? determineNameInNamespace(namespacePrefix, attributeName)
- : QualifiedName(nullAtom, attributeName, nullAtom);
+ QualifiedName qualifiedName = namespacePrefix.isNull()
+ ? QualifiedName(nullAtom, attributeName, nullAtom)
+ : determineNameInNamespace(namespacePrefix, attributeName);
OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
@@ -555,8 +549,7 @@ void CSSSelectorParser::prependTypeSelectorIfNeeded(const AtomicString& namespac
return;
AtomicString determinedElementName = elementName.isNull() ? starAtom : elementName;
- AtomicString determinedNamespace = namespacePrefix != nullAtom && m_styleSheet ? m_styleSheet->determineNamespace(namespacePrefix) : defaultNamespace();
- QualifiedName tag(namespacePrefix, determinedElementName, determinedNamespace);
+ QualifiedName tag = determineNameInNamespace(namespacePrefix, determinedElementName);
if (compoundSelector->crossesTreeScopes())
return rewriteSpecifiersWithElementNameForCustomPseudoElement(tag, compoundSelector, elementName.isNull());
« no previous file with comments | « Source/core/css/parser/CSSSelectorParser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698