DOM: Make selection test fail accurately

A selection preservation test for the `moveBefore()` API was added in
https://crrev.com/c/5725934 which passes falsely / incorrectly.
Selection preservation has not been fully implemented in Chromium, but
this test passes for two reasons:

  1. Inside the old parent from which the moved element is moved, there
     is no text except for the moved text. This appears to have a weird
     side-effect — if we `moveBefore()` from a parent that is otherwise
     empty, the selection returned by the `getSelection()` API appears
     to have the `anchorNode` still set to the new freshly-moved node.
     On the contrary, if you move text from a parent that has plenty of
     other preceding text, the selection returned from `getSelection()`
     *after* the move sticks to the preceding text, and indicates that
     the selection API does not preserve properly across moves.
  2. Before the `moveBefore()` API is called,
     `getSelection().anchorNode` is called. This *ALSO* has a weird
     side-effect of computing the `DocumentCachedRange()`, and since
     we have implemented the behavior to *NOT* update Ranges during an
     atomic move (in https://crrev.com/c/5725934), the cached range
     from before `moveBefore()` persists and deceptively indicates that
     selection has been preserved, when it hasn't been. Specifically,
     the cache range was indeed "preserved" by virtue of not being
     modified during the move, but in reality the *visual* (highlighted)
     selection was not preserved, and becomes out-of-sync with the
     cached Range selection returned by the selection API. By *NOT*
     calling `getSelection()` before the move, we ensure that we do not
     generate a cached selection Range, and by *only* calling
     `getSelection()` *after* the move, we force the Selection API to
     generate a cached selection Range based off of the actual visual
     selection, which gives us a truer picture of what the visual
     selection (the stuff that the user sees) *actually* is.

The test that this CL modifies accidentally relied on these two quirks
above, which made the test pass even though true selection preservation
was not implemented. This CL updates the test to not lean on these
quirks, so that it fails appropriately. A subsequent CL will implement
*visual* selection preservation properly, ensuring that the Selection
API's cached selection Range can never get out of sync with the visual
selection. That CL will add more tests and mark this one as passing.

R=nrosenthal@chromium.org

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