From f7571de20c46e7a3f152333aeeb78184f9dd23ca Mon Sep 17 00:00:00 2001 From: Jeremy Apthorp Date: Tue, 7 Apr 2020 17:40:21 -0700 Subject: [PATCH 1/2] chore: cherry-pick 913247c378d5 from chromium --- patches/chromium/.patches | 1 + .../chromium/cherry-pick-913247c378d5.patch | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 patches/chromium/cherry-pick-913247c378d5.patch diff --git a/patches/chromium/.patches b/patches/chromium/.patches index f640842db11ca..1e5dd0362abff 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -100,3 +100,4 @@ move_readablestream_requests_onto_the_stack_before_iteration.patch streams_convert_state_dchecks_to_checks.patch audiocontext_haspendingactivity_unless_it_s_closed.patch protect_automatic_pull_handlers_with_mutex.patch +cherry-pick-913247c378d5.patch diff --git a/patches/chromium/cherry-pick-913247c378d5.patch b/patches/chromium/cherry-pick-913247c378d5.patch new file mode 100644 index 0000000000000..fc79b1b217b7f --- /dev/null +++ b/patches/chromium/cherry-pick-913247c378d5.patch @@ -0,0 +1,61 @@ +From 913247c378d54e0378ffd09524e0aa7503035fc4 Mon Sep 17 00:00:00 2001 +From: Hongchan Choi +Date: Wed, 4 Mar 2020 00:45:41 +0000 +Subject: [PATCH] Use SupportsWeakPtr for messaging from rendering thread to + main thread + +In cross-thread messaging, the associated execution context can be +already gone when a posted task is performed sometime later in the task +runner's queue. + +By using WeakPtr, the task runner will not perform a scheduled task +in the queue when the target object is invalid. + +Test: Locally confirmed that the repro does not crash. +Bug: 1057627 +Change-Id: I51737594c918f6a4924c9a7ffe30db3e8de9a683 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2082897 +Commit-Queue: Hongchan Choi +Reviewed-by: Raymond Toy +Cr-Commit-Position: refs/heads/master@{#746613} +--- + .../renderer/modules/webaudio/audio_scheduled_source_node.cc | 2 +- + .../renderer/modules/webaudio/audio_scheduled_source_node.h | 5 ++++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.cc b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.cc +index 9594f5fe1c278..8e9c4c60163e0 100644 +--- a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.cc ++++ b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.cc +@@ -250,7 +250,7 @@ void AudioScheduledSourceHandler::Finish() { + PostCrossThreadTask( + *task_runner_, FROM_HERE, + CrossThreadBindOnce(&AudioScheduledSourceHandler::NotifyEnded, +- WrapRefCounted(this))); ++ AsWeakPtr())); + } + + void AudioScheduledSourceHandler::NotifyEnded() { +diff --git a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h +index 2bf257ceabb3e..3cd126a3333d7 100644 +--- a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h ++++ b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h +@@ -30,6 +30,7 @@ + #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_SCHEDULED_SOURCE_NODE_H_ + + #include ++#include "base/memory/weak_ptr.h" + #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" + #include "third_party/blink/renderer/modules/webaudio/audio_node.h" + +@@ -38,7 +39,9 @@ namespace blink { + class BaseAudioContext; + class AudioBus; + +-class AudioScheduledSourceHandler : public AudioHandler { ++class AudioScheduledSourceHandler ++ : public AudioHandler, ++ public base::SupportsWeakPtr { + public: + // These are the possible states an AudioScheduledSourceNode can be in: + // From e8641027d1f0c4ae60f6c3d5d825801a62f00f86 Mon Sep 17 00:00:00 2001 From: Jeremy Apthorp Date: Thu, 9 Apr 2020 16:03:45 -0700 Subject: [PATCH 2/2] normalize patch --- patches/chromium/.patches | 2 +- ..._messaging_from_rendering_thread_to_main.patch} | 14 +++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) rename patches/chromium/{cherry-pick-913247c378d5.patch => use_supportsweakptr_for_messaging_from_rendering_thread_to_main.patch} (84%) diff --git a/patches/chromium/.patches b/patches/chromium/.patches index abadbb6838eec..1130e2097bdf7 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -101,7 +101,7 @@ streams_convert_state_dchecks_to_checks.patch -_point_usrsctp_to_a68325e7d9ed844cc84ec134192d788586ea6cc1.patch audiocontext_haspendingactivity_unless_it_s_closed.patch protect_automatic_pull_handlers_with_mutex.patch -cherry-pick-913247c378d5.patch +use_supportsweakptr_for_messaging_from_rendering_thread_to_main.patch break_connections_before_removing_from_active_source_handlers.patch make_finished_source_handlers_hold_scoped_refptrs.patch mojovideoencodeacceleratorservice_handle_potential_later.patch diff --git a/patches/chromium/cherry-pick-913247c378d5.patch b/patches/chromium/use_supportsweakptr_for_messaging_from_rendering_thread_to_main.patch similarity index 84% rename from patches/chromium/cherry-pick-913247c378d5.patch rename to patches/chromium/use_supportsweakptr_for_messaging_from_rendering_thread_to_main.patch index fc79b1b217b7f..a49876a0dc4ee 100644 --- a/patches/chromium/cherry-pick-913247c378d5.patch +++ b/patches/chromium/use_supportsweakptr_for_messaging_from_rendering_thread_to_main.patch @@ -1,8 +1,8 @@ -From 913247c378d54e0378ffd09524e0aa7503035fc4 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Hongchan Choi Date: Wed, 4 Mar 2020 00:45:41 +0000 -Subject: [PATCH] Use SupportsWeakPtr for messaging from rendering thread to - main thread +Subject: Use SupportsWeakPtr for messaging from rendering thread to main + thread In cross-thread messaging, the associated execution context can be already gone when a posted task is performed sometime later in the task @@ -18,13 +18,9 @@ Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2082897 Commit-Queue: Hongchan Choi Reviewed-by: Raymond Toy Cr-Commit-Position: refs/heads/master@{#746613} ---- - .../renderer/modules/webaudio/audio_scheduled_source_node.cc | 2 +- - .../renderer/modules/webaudio/audio_scheduled_source_node.h | 5 ++++- - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.cc b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.cc -index 9594f5fe1c278..8e9c4c60163e0 100644 +index 9594f5fe1c2783e7c5aa5f3b20440bd0abc1f548..8e9c4c60163e0b0a2403292df53926a069ebe3e7 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.cc @@ -250,7 +250,7 @@ void AudioScheduledSourceHandler::Finish() { @@ -37,7 +33,7 @@ index 9594f5fe1c278..8e9c4c60163e0 100644 void AudioScheduledSourceHandler::NotifyEnded() { diff --git a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h -index 2bf257ceabb3e..3cd126a3333d7 100644 +index 2fdb9bac867bee1ad79bf98ee5b963e86321becb..d526a776c4c243d4bc186497f729d29b3bd7ef09 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h +++ b/third_party/blink/renderer/modules/webaudio/audio_scheduled_source_node.h @@ -30,6 +30,7 @@