Fix item ordinals for default pinned apps

Setting pin ordinals for default pinned apps creates an app item in the
syncable app list service persistent/sync data. The items are created
because app pin ordinals are preserved in app list sync items. Given
that default pins may get created before default apps are actually
installed, setting default pins may create sync items before an app
AppServiceAppItem gets created (which initializes the app item ordinal
in app list). The sync item for the pinned app is created with invalid
(app list) item ordinal so it can be initialized when the app is
installed. This doesn't work well if AppListSyncableService merges
initial sync data between the time default pins are set and the time the
app is installed (e.g. if session restarts before the pinned app
installation completes). During initial merge, AppListSyncableService
attempts to fix invalid item ordinals, which was needed to handle item
data created before item ordinals were tracked in the app list sync data.
This step would initialize the pinned item ordinal without handling all
cases handled during app installation (e.g. setting default item
ordinals).

This CL marks default pinned apps without item ordinal set to be ignored
while "fixing" item ordinals after initial sync data merge, as "invalid"
string ordinal is intended behavior in that case (and not a result of
sync data update from a device that does not support item ordinals).

Alternative idea to delay pin ordinal initialization until the app is
actually installed would require larger refactoring of how default pins
are initialized - currently pin ordinals are calculated dynamically in
one swoop by ensuring the default pins are ordered correctly and
just positioned between chrome app and first app with pin already set.
With multistep initialization, the algorithm would have to be adjusted
not to assume that any shelf items with pin ordinal already set should
can be ignored when adding set od default pins (i.e. we'd need a way of
distinguishing default set pins from "explicitly" set pins).

BUG=1306913

Change-Id: I4eceef700734a68c3628d51a9c62964206b52df6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3580632
Reviewed-by: Xiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Toni Barzic <tbarzic@chromium.org>
Cr-Commit-Position: refs/heads/main@{#992108}
3 files changed
tree: a26c6b2cc205b5bd2ce2a99fe37f484a5cbadbe3
  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. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. weblayer/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython
  61. .vpython3
  62. .yapfignore
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. DEPS
  68. DIR_METADATA
  69. ENG_REVIEW_OWNERS
  70. LICENSE
  71. LICENSE.chromium_os
  72. OWNERS
  73. PRESUBMIT.py
  74. PRESUBMIT_test.py
  75. PRESUBMIT_test_mocks.py
  76. README.md
  77. 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.