Commit 1e8c4674 authored by ramya.v@samsung.com's avatar ramya.v@samsung.com

Selectors with unknown namespace prefixes should be dropped.

Selectors with unknown namespace prefixes should be dropped.
Added changes to check if a prefix encountered is unknown,
and if it is so ignoring the selector.

BUG=396945

Review URL: https://codereview.chromium.org/1326403002

git-svn-id: svn://svn.chromium.org/blink/trunk@202015 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent efecb10b
...@@ -685,7 +685,6 @@ crbug.com/396941 ietestcenter/css3/multicolumn/column-width-applies-to-009.htm [ ...@@ -685,7 +685,6 @@ crbug.com/396941 ietestcenter/css3/multicolumn/column-width-applies-to-009.htm [
crbug.com/396941 ietestcenter/css3/multicolumn/column-width-applies-to-010.htm [ ImageOnlyFailure ] crbug.com/396941 ietestcenter/css3/multicolumn/column-width-applies-to-010.htm [ ImageOnlyFailure ]
crbug.com/396941 ietestcenter/css3/multicolumn/column-width-applies-to-012.htm [ ImageOnlyFailure ] crbug.com/396941 ietestcenter/css3/multicolumn/column-width-applies-to-012.htm [ ImageOnlyFailure ]
crbug.com/396941 ietestcenter/css3/multicolumn/column-width-applies-to-015.htm [ ImageOnlyFailure ] crbug.com/396941 ietestcenter/css3/multicolumn/column-width-applies-to-015.htm [ ImageOnlyFailure ]
crbug.com/396945 ietestcenter/css3/namespaces/syntax-021.xml [ ImageOnlyFailure ]
crbug.com/378610 [ Win7 ] svg/custom/focus-ring-text.svg [ ImageOnlyFailure ] crbug.com/378610 [ Win7 ] svg/custom/focus-ring-text.svg [ ImageOnlyFailure ]
crbug.com/515454 [ Mac Win7 Win10 Android Linux ] css3/fonts/font-style-matching.html [ Slow ] crbug.com/515454 [ Mac Win7 Win10 Android Linux ] css3/fonts/font-style-matching.html [ Slow ]
......
...@@ -19,8 +19,9 @@ function parseThenSerializeRule(rule) ...@@ -19,8 +19,9 @@ function parseThenSerializeRule(rule)
var head = document.getElementById("head"); var head = document.getElementById("head");
head.appendChild(styleElement); head.appendChild(styleElement);
styleElement.appendChild(document.createTextNode("@namespace n url('test');"));
styleElement.appendChild(document.createTextNode(rule)); styleElement.appendChild(document.createTextNode(rule));
return styleElement.sheet.cssRules[0].cssText; return styleElement.sheet.cssRules[1].cssText;
} }
function testSelectorRoundTrip(selector) function testSelectorRoundTrip(selector)
......
<html xmlns="http://www.w3.org/1999/xhtml">
<style>
abc|div {
background-color: red;
}
[abc|id] {
background-color: green;
}
</style>
<div id="target"></div>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script>
test(function(){
assert_equals(document.styleSheets[0].cssRules.length, 0);
}, "Style rules with namespace prefixes not declared before, should be ignored");
</script>
</html>
...@@ -157,8 +157,12 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSPars ...@@ -157,8 +157,12 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSPars
compoundSelector = simpleSelector.release(); compoundSelector = simpleSelector.release();
} }
if (!compoundSelector) if (!compoundSelector) {
return CSSParserSelector::create(determineNameInNamespace(namespacePrefix, elementName)); AtomicString namespaceURI = determineNamespace(namespacePrefix);
if (namespaceURI.isNull())
return nullptr;
return CSSParserSelector::create(QualifiedName(namespacePrefix, elementName, namespaceURI));
}
prependTypeSelectorIfNeeded(namespacePrefix, elementName, compoundSelector.get()); prependTypeSelectorIfNeeded(namespacePrefix, elementName, compoundSelector.get());
return compoundSelector.release(); return compoundSelector.release();
} }
...@@ -267,9 +271,13 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserToken ...@@ -267,9 +271,13 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserToken
if (m_context.isHTMLDocument()) if (m_context.isHTMLDocument())
attributeName = attributeName.lower(); attributeName = attributeName.lower();
AtomicString namespaceURI = determineNamespace(namespacePrefix);
if (namespaceURI.isNull())
return nullptr;
QualifiedName qualifiedName = namespacePrefix.isNull() QualifiedName qualifiedName = namespacePrefix.isNull()
? QualifiedName(nullAtom, attributeName, nullAtom) ? QualifiedName(nullAtom, attributeName, nullAtom)
: determineNameInNamespace(namespacePrefix, attributeName); : QualifiedName(namespacePrefix, attributeName, namespaceURI);
OwnPtr<CSSParserSelector> selector = CSSParserSelector::create(); OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
...@@ -536,11 +544,11 @@ const AtomicString& CSSSelectorParser::defaultNamespace() const ...@@ -536,11 +544,11 @@ const AtomicString& CSSSelectorParser::defaultNamespace() const
return m_styleSheet->defaultNamespace(); return m_styleSheet->defaultNamespace();
} }
QualifiedName CSSSelectorParser::determineNameInNamespace(const AtomicString& prefix, const AtomicString& localName) const AtomicString& CSSSelectorParser::determineNamespace(const AtomicString& prefix)
{ {
if (!m_styleSheet) if (!m_styleSheet)
return QualifiedName(prefix, localName, defaultNamespace()); return defaultNamespace();
return QualifiedName(prefix, localName, m_styleSheet->determineNamespace(prefix)); return m_styleSheet->determineNamespace(prefix);
} }
void CSSSelectorParser::prependTypeSelectorIfNeeded(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector* compoundSelector) void CSSSelectorParser::prependTypeSelectorIfNeeded(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector* compoundSelector)
...@@ -549,7 +557,10 @@ void CSSSelectorParser::prependTypeSelectorIfNeeded(const AtomicString& namespac ...@@ -549,7 +557,10 @@ void CSSSelectorParser::prependTypeSelectorIfNeeded(const AtomicString& namespac
return; return;
AtomicString determinedElementName = elementName.isNull() ? starAtom : elementName; AtomicString determinedElementName = elementName.isNull() ? starAtom : elementName;
QualifiedName tag = determineNameInNamespace(namespacePrefix, determinedElementName); AtomicString namespaceURI = determineNamespace(namespacePrefix);
if (namespaceURI.isNull())
return;
QualifiedName tag = QualifiedName(namespacePrefix, determinedElementName, namespaceURI);
if (compoundSelector->crossesTreeScopes()) if (compoundSelector->crossesTreeScopes())
return rewriteSpecifiersWithElementNameForCustomPseudoElement(tag, compoundSelector, elementName.isNull()); return rewriteSpecifiersWithElementNameForCustomPseudoElement(tag, compoundSelector, elementName.isNull());
......
...@@ -49,7 +49,7 @@ private: ...@@ -49,7 +49,7 @@ private:
CSSSelector::AttributeMatchType consumeAttributeFlags(CSSParserTokenRange&); CSSSelector::AttributeMatchType consumeAttributeFlags(CSSParserTokenRange&);
const AtomicString& defaultNamespace() const; const AtomicString& defaultNamespace() const;
QualifiedName determineNameInNamespace(const AtomicString& prefix, const AtomicString& localName); const AtomicString& determineNamespace(const AtomicString& prefix);
void prependTypeSelectorIfNeeded(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector*); void prependTypeSelectorIfNeeded(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector*);
void rewriteSpecifiersWithElementNameForCustomPseudoElement(const QualifiedName& tag, CSSParserSelector*, bool tagIsImplicit); void rewriteSpecifiersWithElementNameForCustomPseudoElement(const QualifiedName& tag, CSSParserSelector*, bool tagIsImplicit);
void rewriteSpecifiersWithElementNameForContentPseudoElement(const QualifiedName& tag, CSSParserSelector*, bool tagIsImplicit); void rewriteSpecifiersWithElementNameForContentPseudoElement(const QualifiedName& tag, CSSParserSelector*, bool tagIsImplicit);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment