Commit a0f627ca authored by Guido Urdaneta's avatar Guido Urdaneta Committed by Commit Bot

Prevent garbage collection of MediaStream objects with pending events.

This fixes a clusterfuzz crash that is hard to reproduce in test
environments.

Bug: 899575
Change-Id: Ic901c580769ab539850d97360e28727078033e56
Reviewed-on: https://chromium-review.googlesource.com/c/1338084
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608745}
parent c29b9bda
...@@ -198,6 +198,10 @@ MediaStream::MediaStream(ExecutionContext* context, ...@@ -198,6 +198,10 @@ MediaStream::MediaStream(ExecutionContext* context,
MediaStream::~MediaStream() = default; MediaStream::~MediaStream() = default;
bool MediaStream::HasPendingActivity() const {
return !scheduled_events_.IsEmpty();
}
bool MediaStream::EmptyOrOnlyEndedTracks() { bool MediaStream::EmptyOrOnlyEndedTracks() {
if (!audio_tracks_.size() && !video_tracks_.size()) { if (!audio_tracks_.size() && !video_tracks_.size()) {
return true; return true;
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_MEDIA_STREAM_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_MEDIA_STREAM_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_MEDIA_STREAM_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_MEDIA_STREAM_H_
#include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
#include "third_party/blink/renderer/modules/event_target_modules.h" #include "third_party/blink/renderer/modules/event_target_modules.h"
#include "third_party/blink/renderer/modules/mediastream/media_stream_track.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_track.h"
#include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/modules/modules_export.h"
...@@ -50,9 +51,11 @@ class MODULES_EXPORT MediaStreamObserver : public GarbageCollectedMixin { ...@@ -50,9 +51,11 @@ class MODULES_EXPORT MediaStreamObserver : public GarbageCollectedMixin {
void Trace(blink::Visitor* visitor) override {} void Trace(blink::Visitor* visitor) override {}
}; };
class MODULES_EXPORT MediaStream final : public EventTargetWithInlineData, class MODULES_EXPORT MediaStream final
public ContextClient, : public EventTargetWithInlineData,
public MediaStreamDescriptorClient { public ContextClient,
public ActiveScriptWrappable<MediaStream>,
public MediaStreamDescriptorClient {
USING_GARBAGE_COLLECTED_MIXIN(MediaStream); USING_GARBAGE_COLLECTED_MIXIN(MediaStream);
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
...@@ -125,6 +128,9 @@ class MODULES_EXPORT MediaStream final : public EventTargetWithInlineData, ...@@ -125,6 +128,9 @@ class MODULES_EXPORT MediaStream final : public EventTargetWithInlineData,
return ContextClient::GetExecutionContext(); return ContextClient::GetExecutionContext();
} }
// ActiveScriptWrappable
bool HasPendingActivity() const override;
void Trace(blink::Visitor*) override; void Trace(blink::Visitor*) override;
protected: protected:
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
// https://w3c.github.io/mediacapture-main/#idl-def-mediastream // https://w3c.github.io/mediacapture-main/#idl-def-mediastream
[ [
ActiveScriptWrappable,
Constructor, Constructor,
Constructor(MediaStream stream), Constructor(MediaStream stream),
Constructor(sequence<MediaStreamTrack> tracks), Constructor(sequence<MediaStreamTrack> tracks),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment