[animation-trigger] Implement basic AnimationTrigger functionality

The discussion about how AnimationTrigger should work is ongoing. This
comment[1] captures the main points about how triggers should work.

The hope is to have a simple implementation which we can help guide what
the edge cases are, which ones we care about, and what to do about the
ones we care about.

A few points about the behavior worth highlighting are:

1. We automatically call addAnimation for CSS animations.

2. When animation-play-state is "paused" and isn't being ignored, the
   trigger should not play the animation.

3. Trigger-related state tracking is done only in the
   AnimationTrigger. However, we keep
   Animation::AnimationTriggerData::css_play_state just so the trigger
   can know not to play animations for which `animation-play-state`
   is paused.

A few notes about some other changes made in this patch.

1. inspector-protocol/tracing/animation-expected.txt is adjusted to
   expect "paused" instead of running because when we call
   addAnimation on the CSS animation, we'll pause it and Pause will
   be the first function to supply data to the
   inspector_animation_agent via NotifyProbe.

2. ElementAnimations::SetCompositedClipPathStatus is modified in a way
   that reflects the intention that kNotComposited and kNoAnimation
   clear clip_path_paint_worklet_candidate_, even if either of those
   was already recorded as the composited_clip_path_status_. The test
   case in clip_path_paint_definition_test.cc revealed (by
   unconditionally calling pause when the trigger is enabled) that
   ElementAnimations::RecalcCompositedStatus might set
   clip_path_paint_worklet_candidate_ and try to set the status to
   kNotComposited and kNoAnimation, but, because there is no change in
   the status, fail to clear clip_path_paint_worklet_candidate_.

[1]
https://github.com/w3c/csswg-drafts/issues/12119#issuecomment-2911260299

Bug: 390314945
Change-Id: I5bd41e2edbf874ce8e2f5662709f31143be8f1c5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6605724
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Commit-Queue: David Awogbemila <awogbemila@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1469239}
26 files changed
tree: da56c50308cd82d16b670cf9676533463d7fcd0b
  1. .github/
  2. android_webview/
  3. apps/
  4. ash/
  5. base/
  6. build/
  7. build_overrides/
  8. buildtools/
  9. cc/
  10. chrome/
  11. chromecast/
  12. chromeos/
  13. codelabs/
  14. components/
  15. content/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. gpu/
  25. headless/
  26. infra/
  27. ios/
  28. ipc/
  29. media/
  30. mojo/
  31. native_client_sdk/
  32. net/
  33. pdf/
  34. ppapi/
  35. printing/
  36. remoting/
  37. rlz/
  38. sandbox/
  39. services/
  40. skia/
  41. sql/
  42. storage/
  43. styleguide/
  44. testing/
  45. third_party/
  46. tools/
  47. ui/
  48. url/
  49. webkit/
  50. .clang-format
  51. .clang-tidy
  52. .clangd
  53. .git-blame-ignore-revs
  54. .gitallowed
  55. .gitattributes
  56. .gitignore
  57. .gitmodules
  58. .gn
  59. .mailmap
  60. .rustfmt.toml
  61. .vpython3
  62. .yapfignore
  63. ATL_OWNERS
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. CPPLINT.cfg
  69. CRYPTO_OWNERS
  70. DEPS
  71. DIR_METADATA
  72. LICENSE
  73. LICENSE.chromium_os
  74. OWNERS
  75. PRESUBMIT.py
  76. PRESUBMIT_test.py
  77. PRESUBMIT_test_mocks.py
  78. README.md
  79. SECURITY_OWNERS
  80. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure.

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.