Have Chrome apply client-side defaults when the safe seed is empty.

More specifically, if Variations Safe Mode is triggered (see
SafeSeedManager::ShouldRunInSafeMode()) and the safe seed is empty,
then this change makes Chrome apply client-side defaults (e.g.
DISABLED_BY_DEFAULT).

The status quo behavior has Chrome continue to apply the regular
variations seed when the safe seed should be used but is empty. This is
problematic because a client (a) whose regular seed has an experiment
that renders Chrome unusable and (b) whose safe seed is empty will be
stuck in a bad state. New clients, in particular, have empty safe
seeds.

This change also updates a relevant enum: SeedUsage.

kCorruptedSeedNotUsed (value 2) is renamed kUnloadableRegularSeedNotUsed.
This is a more accurate description since corrupted regular seeds,
regular seeds with invalid signatures, and empty regular seeds were and
still are associated with this enumerator. There are no changes to the
kinds of regular seeds being associated with
kUnloadableRegularSeedNotUsed (né kCorruptedSeedNotUsed).

The following enums are deprecated:
* kCorruptedSafeSeedNotUsed (value 5),
* kRegularSeedUsedAfterEmptySafeSeedLoaded (value 6),
* kExpiredRegularSeedNotUsedAfterEmptySafeSeedLoaded (value 7), and
* kCorruptedRegularSeedNotUsedAfterEmptySafeSeedLoaded (value 8).

The enumerators with values 6 to 8 are no longer applicable since
regular seeds will no longer be applied if Chrome tries to trigger
Variations Safe Mode and encounters an empty safe seed.

kCorruptedSafeSeedNotUsed was associated with safe seeds with invalid
signatures and corrupted safe seeds. It was not associated with empty
safe seeds. Going forward, empty safe seeds, corrupted safe seeds, and
safe seeds with invalid signatures will be treated in the same way: they
will not be applied. Instead of reusing kCorruptedSafeSeedNotUsed, we
replace it with kUnloadedSafeSeedNotUsed as it would be confusing for
kCorruptedSafeSeedNotUsed to be associated with different kinds of safe
seeds before and after M100.

Bug: 1216953
Change-Id: I835cba158c5ea1cc36498699e6b78cfe70d7209b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3438766
Reviewed-by: Alexei Svitkine <asvitkine@chromium.org>
Reviewed-by: Mark Pearson <mpearson@chromium.org>
Commit-Queue: Caitlin Fischer <caitlinfischer@google.com>
Cr-Commit-Position: refs/heads/main@{#968491}
7 files changed
tree: 316bc224901d7a58bed1f5c0531753c8fbca29b0
  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. cloud_print/
  13. codelabs/
  14. components/
  15. content/
  16. courgette/
  17. crypto/
  18. dbus/
  19. device/
  20. docs/
  21. extensions/
  22. fuchsia/
  23. gin/
  24. google_apis/
  25. google_update/
  26. gpu/
  27. headless/
  28. infra/
  29. ios/
  30. ipc/
  31. media/
  32. mojo/
  33. native_client_sdk/
  34. net/
  35. pdf/
  36. ppapi/
  37. printing/
  38. remoting/
  39. rlz/
  40. sandbox/
  41. services/
  42. skia/
  43. sql/
  44. storage/
  45. styleguide/
  46. testing/
  47. third_party/
  48. tools/
  49. ui/
  50. url/
  51. weblayer/
  52. .clang-format
  53. .clang-tidy
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitattributes
  57. .gitignore
  58. .gn
  59. .mailmap
  60. .rustfmt.toml
  61. .vpython
  62. .vpython3
  63. .yapfignore
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. DEPS
  69. DIR_METADATA
  70. ENG_REVIEW_OWNERS
  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.