Reset the cached crashpad database size before pruning reports.

DatabaseSizePruneCondition has a variable, measured_size_in_kb_, that
keeps the track of size for all the reports. When a new Crashpad
handler starts up, after 10 minutes the pruning thread executes. This
will prune all dumps after measured_size_in_kb_ grows beyond 128 MB
(for the default condition). 24 hours later, when the pruning thread
executes again, all the older reports will be visited, but
measured_size_in_kb_ will continue to be greater than 128 MB, thus
deleting all the reports.

Desired behaviour: Irrespective of how many times the cleaning thread
runs, if the cumulative report size is less than the maximum database
size of 128MB, the ShouldPruneReport() of DatabaseSizePruneCondition
should not return true.

This CL fixes this bug by creating a ResetPruneConditionState() for
every prune condition which resets the calculated combined size of
the existing reports. Unittests are added to validate this fix.

Bug: chromium:1312208
Change-Id: I1f1fd15d0a5f7aa856114f717b67b6047f3fbac2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3565047
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Mark Mentovai <mark@chromium.org>
Cr-Commit-Position: refs/heads/main@{#991273}
3 files changed
tree: 87788330af49dc8df9f5ee5e26965311c368db08
  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.