Commit b183cbd3 authored by Rune Lillesveen's avatar Rune Lillesveen Committed by Commit Bot

Named pages in @page selectors do not have a namespace.

Fixes crash when trying to set selectorText of detached @page rules. We
only match local name part of the tag, so there should be no behavioral
change here.

Bug: 920303
Change-Id: I4b09b4e108506fd21d87844dec32209f5984de49
Reviewed-on: https://chromium-review.googlesource.com/c/1406716
Commit-Queue: Morten Stenshorne <mstensho@chromium.org>
Reviewed-by: default avatarMorten Stenshorne <mstensho@chromium.org>
Cr-Commit-Position: refs/heads/master@{#622042}
parent 421ca8e4
...@@ -319,8 +319,8 @@ CSSSelectorList CSSParserImpl::ParsePageSelector( ...@@ -319,8 +319,8 @@ CSSSelectorList CSSParserImpl::ParsePageSelector(
std::unique_ptr<CSSParserSelector> selector; std::unique_ptr<CSSParserSelector> selector;
if (!type_selector.IsNull() && pseudo.IsNull()) { if (!type_selector.IsNull() && pseudo.IsNull()) {
selector = CSSParserSelector::Create(QualifiedName( selector = CSSParserSelector::Create(
g_null_atom, type_selector, style_sheet->DefaultNamespace())); QualifiedName(g_null_atom, type_selector, g_star_atom));
} else { } else {
selector = CSSParserSelector::Create(); selector = CSSParserSelector::Create();
if (!pseudo.IsNull()) { if (!pseudo.IsNull()) {
...@@ -330,8 +330,8 @@ CSSSelectorList CSSParserImpl::ParsePageSelector( ...@@ -330,8 +330,8 @@ CSSSelectorList CSSParserImpl::ParsePageSelector(
return CSSSelectorList(); return CSSSelectorList();
} }
if (!type_selector.IsNull()) { if (!type_selector.IsNull()) {
selector->PrependTagSelector(QualifiedName( selector->PrependTagSelector(
g_null_atom, type_selector, style_sheet->DefaultNamespace())); QualifiedName(g_null_atom, type_selector, g_star_atom));
} }
} }
......
<!DOCTYPE html>
<title>CSSOM: CSSPageRule tests</title>
<link rel="help" href="https://drafts.csswg.org/cssom/#the-csspagerule-interface" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
@page {}
</style>
<script>
const sheet = document.styleSheets[0];
const rule = sheet.cssRules[0];
test(() => {
assert_true(!!rule);
assert_equals(rule.type, CSSRule.PAGE_RULE);
}, "Sanity checks");
test(() => {
assert_equals(rule.selectorText, "");
}, "Page selector is initially the empty string");
test(() => {
rule.selectorText = ":left";
assert_equals(rule.selectorText, ":left");
}, "Set selectorText to :left pseudo page");
test(() => {
rule.selectorText = "named";
assert_equals(rule.selectorText, "named");
}, "Set selectorText to named page");
test(() => {
rule.selectorText = "named:first";
assert_equals(rule.selectorText, "named:first");
}, "Set selectorText to named page with :first pseudo page");
test(() => {
assert_equals(rule.parentStyleSheet, sheet);
sheet.deleteRule(0);
assert_equals(rule.parentStyleSheet, null);
rule.selectorText = "pagename";
}, "Set selectorText to named page after rule was removed");
</script>
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