Fix test bug in RegistryOverrideManager when using MOCK_TIME.

This CL fixed test bug in RegistryOverrideManager by using
base::subtle::TimeNowIgnoringOverride() instead of base::Time::Now() to
 resolve RegistryOverrideManager test failure when using MOCK_TIME.

Background:
In base/test/test_reg_util_win.h, RegistryOverrideManager redirects part
 of the registry to a temporary key. The temporary key contains a time
 stamp, which "is used to delete stale keys left over from crashed
 tests." This causes problems when MOCK_TIME is enabled, because
 base::Time::Now() returns a timestamp from 1970.

When multiple tests run at the same time using RegistryOverrideManager,
 new instances of RegistryOverrideManager will clean up any redirected
 registry paths that have the timestamp from 1970, which then cause the
 currently running tests to fail since their expected reg keys were
 deleted by the other test.

Solution:
Use base::subtle::TimeNowIgnoringOverride() instead of base::Time::Now()
 can give us the real current time instead of the mock time in 1970.
 This can resolve related RegistryOverrideManager test failure when
 using MOCK_TIME.

Test:
Corresponding test are added to verify the behavior, explanations listed
 below:

We first create RegKey with mock time (1970), also create another RegKey
 with GenerateTempKeyPath() - which is based on real time using
 base::subtle::TimeNowIgnoringOverride().
Then we create RegistryOverrideManager with current time using
 base::subtle::TimeNowIgnoringOverride(), after this, the key created
 with mock time (1970) should be deleted, while the key created with
 base::subtle::TimeNowIgnoringOverride() should still present.
Key created with mock time (1970) gets deleted represent the current bug
 we found, the key created by calling GenerateTempKeyPath() represent
 the new approach we are going for, and its presence after a new
 RegistryOverrideManager being created validated that this key will not
 get invalidated due to past time (1970) issue. Thus validated that this
 test bug is resolved.



Bug: 1488676
Change-Id: I65a8f15872d84d82c39e939aba679d36e979d38c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4917628
Reviewed-by: Will Harris <wfh@chromium.org>
Auto-Submit: Qiaofei Ye <qiaye@microsoft.com>
Commit-Queue: Qiaofei Ye <qiaye@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1206653}
2 files changed
tree: 27343519180b2fd7f815060b550aaf4200d605c3
  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_web/
  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. webkit/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  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. DEPS
  69. DIR_METADATA
  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.