Register chrome_wer.dll with reference to chrome_elf.dll

- Adds chrome crashpad client interface to find helper module.
- Adds call to crashpad client to get wer context.
- Registers chrome_wer.dll with WER for Windows versions where this
will surface new exceptions (20h1+).

We currently find the location of the module by finding the path
for chrome_elf.dll and appending the WER module name. This means that we
do not need to check for the presence of the WER module on disc early
in startup - in fact we do not need to load the module at all as
we are simply providing a path that WerFault.exe might use later if
our process crashes and does not handle the crash itself.

We register with WER as soon as the connection to the crashpad handler
has been established. In processes other than the browser process this
happens during chrome_elf.dll's DllMain().

We limit registration to Windows 20h1+ as WerFault previously
would not load the module for these crashes, but now does.

The DLL is not yet distributed (is not in the installer) and is not
registered (with a registry entry) so following an unhandled crash
WerFault will look in the registry for the matching key but will not
find anything, and will handle fail-fast crashes itself as before.

See  WerRegisterExceptionHelperModule[0] for more information.

[0] https://docs.microsoft.com/en-us/windows/win32/api/werapi/nf-werapi-werregisterruntimeexceptionmodule

Bug: 865632
Change-Id: I66ae8cbf6aafc7edaceee8d36f5b12b4c9ba225a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3679799
Reviewed-by: Mark Seaborn <mseaborn@chromium.org>
Commit-Queue: Alex Gough <ajgo@chromium.org>
Reviewed-by: Greg Thompson <grt@chromium.org>
Reviewed-by: Will Harris <wfh@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1023528}
13 files changed
tree: 9e772ad31a6fa14a5cc17a730b28626541499136
  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. .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.