Avoid conflicts between custom properties in CreateKeyframeEffectModel
We process keyframes in reverse order, and skip any already-seen
properties. The problem is that we use a set of CSSProperty pointers
to determine if a property is already seen, which (thanks to the
static Variable instance, crbug.com/980160) collapses all custom
properties into a single item.
Use a HashSet of CSSPropertyNames instead.
Fixed: 1236043
Bug: 980160
Change-Id: Ie6f13c4e4276e91e9d4332c17182363cedcdcde6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3065534
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Commit-Queue: Anders Hartvoll Ruud <andruud@chromium.org>
Cr-Commit-Position: refs/heads/master@{#908031}
diff --git a/css/css-animations/keyframes-unrelated-custom-property.html b/css/css-animations/keyframes-unrelated-custom-property.html
new file mode 100644
index 0000000..c9ba768
--- /dev/null
+++ b/css/css-animations/keyframes-unrelated-custom-property.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>Unrelated custom properties do not conflict with each other</title>
+<link rel="help" href="https://drafts.csswg.org/css-animations/">
+<link rel="help" href="https://crbug.com/1236043">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ @keyframes test {
+ 0% { --x: green; }
+ 100% { --x: green; }
+
+ /* This should not affect the background-color of #div: */
+ 0% { --unused: yellow; }
+ }
+ #div {
+ animation: test 10s linear paused;
+ background-color: var(--x, red);
+ width: 100px;
+ height: 100px;
+ }
+</style>
+<div id=div></div>
+<script>
+
+test(() => {
+ assert_equals(getComputedStyle(div).backgroundColor, 'rgb(0, 128, 0)');
+}, 'Unrelated custom properties do not conflict with each other');
+
+</script>