[omnibox][ai-mode] Adjust tab order for RHS AIM button and keyword mode

Desired behavior:

1) `query<tab>` should focus the AIM button.
2) `youtube<tab>` should focus the keyword chip.
3) `youtube<tab><tab>` should focus the 2nd suggestion.
4) `youtube<tab>query<tab>` should focus the 2nd suggestion.
5) `@gemini<tab>` should focus the 2nd suggestion.
6) `<shift+tab xN>` should perfectly undo `<tab xN>`

Currently, (2) inserts the AIM button in the tab order. But the case is
handled correctly anyways because the keyword chip comes earlier in the
tab order. This CL takes a stricter approach of not inserting the AIM
button in the tab order; partly because it's more semantically correct
and partly because it's simpler to implement. No behavior change.

Currently, (3) inserts the AIM button in the tab order. But the case is
handled correctly anyways because the AIM button is hidden after user
tabs into a keyword chip. This CL doesn't insert the AIM button in the
tab order to avoid relying on the AIM button visibility logic remaining
constant over time.

Currently, (5) isn't handled correctly, the AIM button is selected,
breaking muscle memory. This CL doesn't insert the AIM button in the tab
order when the 2nd match has an instant keyword.

Currently, (6) isn't handled correctly when e.g.
`youtube<tab><tab><shift+tab>`. The AIM button isn't focused when
tabbing forward, because the AIM button isn't visible when tabbed into a
keyword chip (see (2) above). But the AIM button is focused when tabbing
backwards because the AIM button is visible when the suggestion below
the keyword chip is focused.

This CL's approach simply avoids adding the AIM button in the tab order
when
- the 1st match has a keyword chip; (2) & (3)
- the 1st match is in typed keyword mode; (4)
- the 2nd match has an instant keyword; (5)

And since this logic doesn't rely on AIM button visibility, (6) works
correctly too.

Bug: 432744091
Change-Id: Ie309867a19f22779689816498c942a06147e291c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6926796
Reviewed-by: Justin Donnelly <jdonnelly@chromium.org>
Commit-Queue: manuk hovanesian <manukh@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1515151}
1 file changed
tree: 8e27049ba93a5bc52888e1e5dd28e7857a9c86ca
  1. .gemini/
  2. .github/
  3. agents/
  4. android_webview/
  5. apps/
  6. ash/
  7. base/
  8. build/
  9. build_overrides/
  10. buildtools/
  11. cc/
  12. chrome/
  13. chromecast/
  14. chromeos/
  15. codelabs/
  16. components/
  17. content/
  18. crypto/
  19. dbus/
  20. device/
  21. docs/
  22. extensions/
  23. fuchsia_web/
  24. gin/
  25. google_apis/
  26. gpu/
  27. headless/
  28. infra/
  29. ios/
  30. ipc/
  31. media/
  32. mojo/
  33. net/
  34. pdf/
  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. .cursorignore
  54. .geminiignore
  55. .git-blame-ignore-revs
  56. .gitallowed
  57. .gitattributes
  58. .gitignore
  59. .gitmodules
  60. .gn
  61. .mailmap
  62. .rustfmt.toml
  63. .vpython3
  64. .yapfignore
  65. ATL_OWNERS
  66. AUTHORS
  67. BUILD.gn
  68. CODE_OF_CONDUCT.md
  69. codereview.settings
  70. CPPLINT.cfg
  71. CRYPTO_OWNERS
  72. DEPS
  73. DIR_METADATA
  74. LICENSE
  75. LICENSE.chromium_os
  76. OWNERS
  77. PRESUBMIT.py
  78. PRESUBMIT_test.py
  79. PRESUBMIT_test_mocks.py
  80. README.md
  81. SECURITY_OWNERS
  82. 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.