Use kernel32 version for OS deprecation infobar

This change makes the code to detect obsolete Windows versions get the
OS version from `Kernel32Version()` instead of `GetVersion()`.

If Chrome is run in App Compatibility mode [1], `GetVersion()` will
return the compatibility-mode version rather than the true system
version. This may be done by Windows automatically in certain cases, or
by system administrators, anti-virus software, etc.

The code to detect obsolete Windows versions is used to display warnings
that the OS is no longer supported (e.g., the Windows 7/8 deprecation
infobar recently added [2]). This means the current code shows warnings
to users in compatibility mode for unsupported versions even if their
actual OS is Windows 10, which can confuse users [3].

`Kernel32Version()` returns the correct OS version by checking the
version of kernel32.dll, and is used in e.g., Crashpad to ensure the
right version is recorded.

This change was tested by looking for the Windows 7/8 deprecation
infobar on the following systems:
* Windows 10 (not shown)
* Windows 10 in compatibility mode for Windows 8 (not shown)
* Windows 7 (shown)
* Windows 8.1 (shown)
* Windows 8.1 in compatibility mode for Windows 7
  (shown, infobar correctly says the OS version is Windows 8.1)

[1] done by:
  1. right-clicking a taskbar icon
  2. navigating to Properties > Compatibility
  3. checking the box "Run this program in compatibility mode for"
  4. choosing the desired Windows version in the dropdown menu
  5. clicking OK
  6. launching Chrome via the taskbar icon
[2] crrev.com/c/4004000
[3] example support thread from the Win XP/Vista deprecation:
    https://support.google.com/chrome/thread/99522885/chrome-thinks-i-m-using-xp-but-i-m-using-windows-10?hl=en

Bug: 1377525
Change-Id: Ifd413d7efd941e7bb6c7d278ae2414e360147fab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4031572
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Reviewed-by: Will Harris <wfh@chromium.org>
Commit-Queue: Jesse McKenna <jessemckenna@google.com>
Cr-Commit-Position: refs/heads/main@{#1073035}
1 file changed
tree: cade56918fa9d6b6c957146ecf22f297bc6f0995
  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. 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. .vpython3
  61. .yapfignore
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. DIR_METADATA
  68. ENG_REVIEW_OWNERS
  69. LICENSE
  70. LICENSE.chromium_os
  71. OWNERS
  72. PRESUBMIT.py
  73. PRESUBMIT_test.py
  74. PRESUBMIT_test_mocks.py
  75. README.md
  76. 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.