avoid-calling-DeleteForCurrentDocument-from-destructor.patch 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. From 128869693a2519578896b41765df029d7adc4ae0 Mon Sep 17 00:00:00 2001
  2. From: Yuzu Saijo <yuzus@chromium.org>
  3. Date: Tue, 2 Jun 2020 04:51:11 +0000
  4. Subject: [PATCH] [content] Avoid calling DeleteForCurrentDocument from
  5. destructor
  6. This CL removes the call to DeleteForCurrentDocument from the destructor
  7. of ManifestManagerHost.
  8. This intends to fix a crash which happens from time to time using
  9. RenderDocumentHostUserData.
  10. Change-Id: I1336fb62328dcb0cf9991499f399bf3665d29b75
  11. Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2224737
  12. Reviewed-by: Rakina Zata Amni <rakina@chromium.org>
  13. Reviewed-by: Alexander Timin <altimin@chromium.org>
  14. Reviewed-by: Sreeja Kamishetty <sreejakshetty@chromium.org>
  15. Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
  16. Commit-Queue: Yuzu Saijo <yuzus@chromium.org>
  17. Cr-Commit-Position: refs/heads/master@{#774006}
  18. ---
  19. content/browser/manifest/manifest_manager_host.cc | 7 +++++--
  20. content/browser/manifest/manifest_manager_host.h | 2 ++
  21. 2 files changed, 7 insertions(+), 2 deletions(-)
  22. diff --git a/content/browser/manifest/manifest_manager_host.cc b/content/browser/manifest/manifest_manager_host.cc
  23. index 3a2efba889a..1bd88d91edc 100644
  24. --- a/content/browser/manifest/manifest_manager_host.cc
  25. +++ b/content/browser/manifest/manifest_manager_host.cc
  26. @@ -22,7 +22,7 @@ ManifestManagerHost::ManifestManagerHost(RenderFrameHost* render_frame_host)
  27. }
  28. ManifestManagerHost::~ManifestManagerHost() {
  29. - OnConnectionError();
  30. + DispatchPendingCallbacks();
  31. }
  32. void ManifestManagerHost::BindObserver(
  33. @@ -55,7 +55,7 @@ blink::mojom::ManifestManager& ManifestManagerHost::GetManifestManager() {
  34. return *manifest_manager_;
  35. }
  36. -void ManifestManagerHost::OnConnectionError() {
  37. +void ManifestManagerHost::DispatchPendingCallbacks() {
  38. std::vector<GetManifestCallback> callbacks;
  39. for (CallbackMap::iterator it(&callbacks_); !it.IsAtEnd(); it.Advance()) {
  40. callbacks.push_back(std::move(*it.GetCurrentValue()));
  41. @@ -63,7 +63,10 @@ void ManifestManagerHost::OnConnectionError() {
  42. callbacks_.Clear();
  43. for (auto& callback : callbacks)
  44. std::move(callback).Run(GURL(), blink::Manifest());
  45. +}
  46. +void ManifestManagerHost::OnConnectionError() {
  47. + DispatchPendingCallbacks();
  48. if (GetForCurrentDocument(manifest_manager_frame_)) {
  49. DeleteForCurrentDocument(manifest_manager_frame_);
  50. }
  51. diff --git a/content/browser/manifest/manifest_manager_host.h b/content/browser/manifest/manifest_manager_host.h
  52. index 96951ae30bc..f706c20bdb8 100644
  53. --- a/content/browser/manifest/manifest_manager_host.h
  54. +++ b/content/browser/manifest/manifest_manager_host.h
  55. @@ -55,6 +55,8 @@ class ManifestManagerHost
  56. using CallbackMap = base::IDMap<std::unique_ptr<GetManifestCallback>>;
  57. blink::mojom::ManifestManager& GetManifestManager();
  58. +
  59. + void DispatchPendingCallbacks();
  60. void OnConnectionError();
  61. void OnRequestManifestResponse(int request_id,