Bug 716226. When using insertRule on a keyframes rule, set up the child keyframe rule correctly. r=dbaron

This commit is contained in:
Boris Zbarsky 2012-01-11 14:36:43 -05:00
parent 0bfb6db6b1
commit 47e571dfac
3 changed files with 54 additions and 4 deletions

View File

@ -2013,10 +2013,7 @@ nsCSSKeyframesRule::InsertRule(const nsAString& aRule)
nsRefPtr<nsCSSKeyframeRule> rule =
parser.ParseKeyframeRule(aRule, nsnull, 0);
if (rule) {
mRules.AppendObject(rule);
if (mSheet) {
mSheet->SetModifiedByChildRule();
}
AppendStyleRule(rule);
}
return NS_OK;

View File

@ -133,6 +133,7 @@ _TEST_FILES = test_acid3_test46.html \
test_bug645998.html \
file_bug645998-1.css \
file_bug645998-2.css \
test_bug716226.html \
test_cascade.html \
test_ch_ex_no_infloops.html \
test_compute_data_with_start_struct.html \

View File

@ -0,0 +1,52 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=716226
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 716226</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<style id="s">
@-moz-keyframes foo { }
</style>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=716226">Mozilla Bug 716226</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 716226 **/
var sheet = $("s").sheet;
var rules = sheet.cssRules;
is(rules.length, 1, "Should have one keyframes rule");
var keyframesRule = rules[0];
var keyframeRules = keyframesRule.cssRules;
is(keyframeRules.length, 0, "Should have no keyframe rules yet");
keyframesRule.insertRule('0% { }');
is(keyframeRules.length, 1, "Should have a keyframe rule now");
var keyframeRule = keyframeRules[0];
is(keyframeRule.parentRule, keyframesRule,
"Parent of keyframe should be keyframes");
is(keyframeRule.parentStyleSheet, sheet,
"Parent stylesheet of keyframe should be our sheet");
is(keyframeRule.style.cssText, "", "Should have no declarations yet");
// Note: purposefully non-canonical cssText string so we can make sure we
// really invoked the CSS parser and serializer.
keyframeRule.style.cssText = "color:green";
is(keyframeRule.style.cssText, "color: green;",
"Should have the declarations we set now");
</script>
</pre>
</body>
</html>