Don't create events in kEndedState if there are no listeners
Bug: 1308211
Change-Id: Ic4eebcfbd4db84a3c0fb07f19ad628970388824e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110988
Commit-Queue: Tove Petersson <tovep@chromium.org>
Reviewed-by: Tony Herre <toprice@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1085384}
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_track_impl.cc b/third_party/blink/renderer/modules/mediastream/media_stream_track_impl.cc
index 5190dbe..eddb054 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_track_impl.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_track_impl.cc
@@ -825,7 +825,14 @@
EnsureFeatureHandleForScheduler();
break;
case MediaStreamSource::kReadyStateEnded:
- DispatchEvent(*Event::Create(event_type_names::kEnded));
+ // SourceChangedState() may be called in kReadyStateEnded during object
+ // disposal if there are no event listeners (otherwise disposal is blocked
+ // by HasPendingActivity). In that case it is not allowed to create
+ // objects, so check if there are event listeners before the event object
+ // is created.
+ if (HasEventListeners(event_type_names::kEnded)) {
+ DispatchEvent(*Event::Create(event_type_names::kEnded));
+ }
PropagateTrackEnded();
feature_handle_for_scheduler_.reset();
break;