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 [
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-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/515454 [ Mac Win7 Win10 Android Linux ] css3/fonts/font-style-matching.html [ Slow ]
......
......@@ -19,8 +19,9 @@ function parseThenSerializeRule(rule)
var head = document.getElementById("head");
head.appendChild(styleElement);
styleElement.appendChild(document.createTextNode("@namespace n url('test');"));
styleElement.appendChild(document.createTextNode(rule));
return styleElement.sheet.cssRules[0].cssText;
return styleElement.sheet.cssRules[1].cssText;
}
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
compoundSelector = simpleSelector.release();
}
if (!compoundSelector)
return CSSParserSelector::create(determineNameInNamespace(namespacePrefix, elementName));
if (!compoundSelector) {
AtomicString namespaceURI = determineNamespace(namespacePrefix);
if (namespaceURI.isNull())
return nullptr;
return CSSParserSelector::create(QualifiedName(namespacePrefix, elementName, namespaceURI));
}
prependTypeSelectorIfNeeded(namespacePrefix, elementName, compoundSelector.get());
return compoundSelector.release();
}
......@@ -267,9 +271,13 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserToken
if (m_context.isHTMLDocument())
attributeName = attributeName.lower();
AtomicString namespaceURI = determineNamespace(namespacePrefix);
if (namespaceURI.isNull())
return nullptr;
QualifiedName qualifiedName = namespacePrefix.isNull()
? QualifiedName(nullAtom, attributeName, nullAtom)
: determineNameInNamespace(namespacePrefix, attributeName);
: QualifiedName(namespacePrefix, attributeName, namespaceURI);
OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
......@@ -536,11 +544,11 @@ const AtomicString& CSSSelectorParser::defaultNamespace() const
return m_styleSheet->defaultNamespace();
}
QualifiedName CSSSelectorParser::determineNameInNamespace(const AtomicString& prefix, const AtomicString& localName)
const AtomicString& CSSSelectorParser::determineNamespace(const AtomicString& prefix)
{
if (!m_styleSheet)
return QualifiedName(prefix, localName, defaultNamespace());
return QualifiedName(prefix, localName, m_styleSheet->determineNamespace(prefix));
return defaultNamespace();
return m_styleSheet->determineNamespace(prefix);
}
void CSSSelectorParser::prependTypeSelectorIfNeeded(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector* compoundSelector)
......@@ -549,7 +557,10 @@ void CSSSelectorParser::prependTypeSelectorIfNeeded(const AtomicString& namespac
return;
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())
return rewriteSpecifiersWithElementNameForCustomPseudoElement(tag, compoundSelector, elementName.isNull());
......
......@@ -49,7 +49,7 @@ private:
CSSSelector::AttributeMatchType consumeAttributeFlags(CSSParserTokenRange&);
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 rewriteSpecifiersWithElementNameForCustomPseudoElement(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