Skip to content

Commit

Permalink
TextTrack should be constructed with a ScriptExecutionContext rather …
Browse files Browse the repository at this point in the history
…than a Document

https://bugs.webkit.org/show_bug.cgi?id=269181
rdar://122776217

Reviewed by Eric Carlson and Ryosuke Niwa.

In order to have MSE in a Worker, we'll need to have {Text/Audio/Video} to be available in DedicatedWorker.

This change just the TextTracks constructors to take a ScriptExecutionContext ; it still requires it
to be a Document for now.

* Source/WebCore/Modules/mediasource/SourceBuffer.cpp:
(WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
(WebCore::SourceBuffer::document const): Deleted.
* Source/WebCore/Modules/mediasource/SourceBuffer.h:
* Source/WebCore/html/HTMLTrackElement.h:
* Source/WebCore/html/track/InbandDataTextTrack.cpp:
(WebCore::InbandDataTextTrack::InbandDataTextTrack):
(WebCore::InbandDataTextTrack::create):
(WebCore::InbandDataTextTrack::addDataCue):
* Source/WebCore/html/track/InbandDataTextTrack.h:
* Source/WebCore/html/track/InbandGenericTextTrack.cpp:
(WebCore::InbandGenericTextTrack::InbandGenericTextTrack):
(WebCore::InbandGenericTextTrack::create):
(WebCore::InbandGenericTextTrack::addGenericCue):
(WebCore::InbandGenericTextTrack::parser):
(WebCore::InbandGenericTextTrack::newCuesParsed):
* Source/WebCore/html/track/InbandGenericTextTrack.h:
* Source/WebCore/html/track/InbandTextTrack.cpp:
(WebCore::InbandTextTrack::create):
(WebCore::InbandTextTrack::InbandTextTrack):
* Source/WebCore/html/track/InbandTextTrack.h:
* Source/WebCore/html/track/InbandWebVTTTextTrack.cpp:
(WebCore::InbandWebVTTTextTrack::InbandWebVTTTextTrack):
(WebCore::InbandWebVTTTextTrack::create):
(WebCore::InbandWebVTTTextTrack::parser):
(WebCore::InbandWebVTTTextTrack::newCuesParsed):
* Source/WebCore/html/track/InbandWebVTTTextTrack.h:
* Source/WebCore/html/track/LoadableTextTrack.cpp:
(WebCore::LoadableTextTrack::LoadableTextTrack):
* Source/WebCore/html/track/TextTrack.cpp:
(WebCore::TextTrack::create):
(WebCore::TextTrack::document const): Deleted.
* Source/WebCore/html/track/TextTrack.h:
* Source/WebCore/html/track/VTTCue.cpp:
(WebCore::VTTCue::prepareToSpeak):

Canonical link: https://commits.webkit.org/274455@main
  • Loading branch information
jyavenard committed Feb 12, 2024
1 parent 18019ce commit 21b6595
Show file tree
Hide file tree
Showing 15 changed files with 66 additions and 64 deletions.
10 changes: 1 addition & 9 deletions Source/WebCore/Modules/mediasource/SourceBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -883,7 +883,7 @@ Ref<MediaPromise> SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegme
// FIXME: Implement steps 5.4.1-5.4.8.1 as per Editor's Draft 09 January 2015, and reorder this
// 5.4.1 Let new text track be a new TextTrack object with its properties populated with the
// appropriate information from the initialization segment.
auto newTextTrack = InbandTextTrack::create(document(), textTrackPrivate);
auto newTextTrack = InbandTextTrack::create(*scriptExecutionContext(), textTrackPrivate);
newTextTrack->addClient(*this);

// 5.4.2 If the mode property on new text track equals "showing" or "hidden", then set active
Expand Down Expand Up @@ -1231,14 +1231,6 @@ void SourceBuffer::setMaximumQueueDepthForTrackID(TrackID trackID, uint64_t maxQ
m_private->setMaximumQueueDepthForTrackID(trackID, maxQueueDepth);
}

Document& SourceBuffer::document() const
{
ASSERT(isMainThread());

ASSERT(scriptExecutionContext());
return downcast<Document>(*scriptExecutionContext());
}

const Settings& SourceBuffer::settings() const
{
ASSERT(isMainThread());
Expand Down
1 change: 0 additions & 1 deletion Source/WebCore/Modules/mediasource/SourceBuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,6 @@ class SourceBuffer

protected:
SourceBuffer(Ref<SourceBufferPrivate>&&, MediaSource&);
Document& document() const;
const Settings& settings() const;

private:
Expand Down
2 changes: 2 additions & 0 deletions Source/WebCore/html/HTMLTrackElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ class HTMLTrackElement final : public HTMLElement, public ActiveDOMObject, publi
public:
static Ref<HTMLTrackElement> create(const QualifiedName&, Document&);

using HTMLElement::scriptExecutionContext;

const AtomString& kind();
void setKind(const AtomString&);

Expand Down
19 changes: 13 additions & 6 deletions Source/WebCore/html/track/InbandDataTextTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ namespace WebCore {

WTF_MAKE_ISO_ALLOCATED_IMPL(InbandDataTextTrack);

inline InbandDataTextTrack::InbandDataTextTrack(Document& document, InbandTextTrackPrivate& trackPrivate)
: InbandTextTrack(document, trackPrivate)
inline InbandDataTextTrack::InbandDataTextTrack(ScriptExecutionContext& context, InbandTextTrackPrivate& trackPrivate)
: InbandTextTrack(context, trackPrivate)
{
}

Ref<InbandDataTextTrack> InbandDataTextTrack::create(Document& document, InbandTextTrackPrivate& trackPrivate)
Ref<InbandDataTextTrack> InbandDataTextTrack::create(ScriptExecutionContext& context, InbandTextTrackPrivate& trackPrivate)
{
auto textTrack = adoptRef(*new InbandDataTextTrack(document, trackPrivate));
auto textTrack = adoptRef(*new InbandDataTextTrack(context, trackPrivate));
textTrack->suspendIfNeeded();
return textTrack;
}
Expand All @@ -54,17 +54,24 @@ InbandDataTextTrack::~InbandDataTextTrack() = default;

void InbandDataTextTrack::addDataCue(const MediaTime& start, const MediaTime& end, const void* data, unsigned length)
{
addCue(DataCue::create(document(), start, end, data, length));
// FIXME: handle datacue creation on worker.
if (RefPtr document = dynamicDowncast<Document>(scriptExecutionContext()))
addCue(DataCue::create(*document, start, end, data, length));
}

#if ENABLE(DATACUE_VALUE)

void InbandDataTextTrack::addDataCue(const MediaTime& start, const MediaTime& end, Ref<SerializedPlatformDataCue>&& platformValue, const String& type)
{
// FIXME: handle datacue creation on worker.
RefPtr document = dynamicDowncast<Document>(scriptExecutionContext());
if (!document)
return;

if (findIncompleteCue(platformValue))
return;

auto cue = DataCue::create(document(), start, end, platformValue.copyRef(), type);
auto cue = DataCue::create(*document, start, end, platformValue.copyRef(), type);
if (hasCue(cue, TextTrackCue::IgnoreDuration)) {
INFO_LOG(LOGIDENTIFIER, "ignoring already added cue: ", cue.get());
return;
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/html/track/InbandDataTextTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ class DataCue;
class InbandDataTextTrack final : public InbandTextTrack {
WTF_MAKE_ISO_ALLOCATED(InbandDataTextTrack);
public:
static Ref<InbandDataTextTrack> create(Document&, InbandTextTrackPrivate&);
static Ref<InbandDataTextTrack> create(ScriptExecutionContext&, InbandTextTrackPrivate&);
virtual ~InbandDataTextTrack();

private:
InbandDataTextTrack(Document&, InbandTextTrackPrivate&);
InbandDataTextTrack(ScriptExecutionContext&, InbandTextTrackPrivate&);

void addDataCue(const MediaTime& start, const MediaTime& end, const void*, unsigned) final;

Expand Down
21 changes: 13 additions & 8 deletions Source/WebCore/html/track/InbandGenericTextTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@

#if ENABLE(VIDEO)

#include "Document.h"
#include "InbandTextTrackPrivate.h"
#include "Logging.h"
#include "ScriptExecutionContext.h"
#include "TextTrackCueList.h"
#include "TextTrackList.h"
#include "VTTRegionList.h"
Expand Down Expand Up @@ -65,14 +65,14 @@ void GenericTextTrackCueMap::remove(TextTrackCue& publicCue)
m_dataToCueMap.remove(cueIdentifier);
}

inline InbandGenericTextTrack::InbandGenericTextTrack(Document& document, InbandTextTrackPrivate& trackPrivate)
: InbandTextTrack(document, trackPrivate)
inline InbandGenericTextTrack::InbandGenericTextTrack(ScriptExecutionContext& context, InbandTextTrackPrivate& trackPrivate)
: InbandTextTrack(context, trackPrivate)
{
}

Ref<InbandGenericTextTrack> InbandGenericTextTrack::create(Document& document, InbandTextTrackPrivate& trackPrivate)
Ref<InbandGenericTextTrack> InbandGenericTextTrack::create(ScriptExecutionContext& context, InbandTextTrackPrivate& trackPrivate)
{
auto textTrack = adoptRef(*new InbandGenericTextTrack(document, trackPrivate));
auto textTrack = adoptRef(*new InbandGenericTextTrack(context, trackPrivate));
textTrack->suspendIfNeeded();
return textTrack;
}
Expand Down Expand Up @@ -137,7 +137,7 @@ void InbandGenericTextTrack::addGenericCue(InbandGenericCue& inbandCue)
if (m_cueMap.find(inbandCue.uniqueId()))
return;

auto cue = TextTrackCueGeneric::create(document(), inbandCue.startTime(), inbandCue.endTime(), inbandCue.content());
auto cue = TextTrackCueGeneric::create(*scriptExecutionContext(), inbandCue.startTime(), inbandCue.endTime(), inbandCue.content());
updateCueFromCueData(cue.get(), inbandCue);
if (hasCue(cue, TextTrackCue::IgnoreDuration)) {
INFO_LOG(LOGIDENTIFIER, "ignoring already added cue: ", cue.get());
Expand Down Expand Up @@ -185,8 +185,9 @@ ExceptionOr<void> InbandGenericTextTrack::removeCue(TextTrackCue& cue)

WebVTTParser& InbandGenericTextTrack::parser()
{
ASSERT(is<Document>(scriptExecutionContext()));
if (!m_webVTTParser)
m_webVTTParser = makeUnique<WebVTTParser>(static_cast<WebVTTParserClient&>(*this), document());
m_webVTTParser = makeUnique<WebVTTParser>(static_cast<WebVTTParserClient&>(*this), downcast<Document>(*scriptExecutionContext()));
return *m_webVTTParser;
}

Expand Down Expand Up @@ -229,8 +230,12 @@ RefPtr<TextTrackCue> InbandGenericTextTrack::cueToExtend(TextTrackCue& newCue)

void InbandGenericTextTrack::newCuesParsed()
{
RefPtr document = dynamicDowncast<Document>(scriptExecutionContext());
if (!document)
return;

for (auto& cueData : parser().takeCues()) {
auto cue = VTTCue::create(document(), cueData);
auto cue = VTTCue::create(*document, cueData);

auto existingCue = cueToExtend(cue);
if (!existingCue)
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/html/track/InbandGenericTextTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ class GenericTextTrackCueMap {
class InbandGenericTextTrack final : public InbandTextTrack, private WebVTTParserClient {
WTF_MAKE_ISO_ALLOCATED(InbandGenericTextTrack);
public:
static Ref<InbandGenericTextTrack> create(Document&, InbandTextTrackPrivate&);
static Ref<InbandGenericTextTrack> create(ScriptExecutionContext&, InbandTextTrackPrivate&);
virtual ~InbandGenericTextTrack();

private:
InbandGenericTextTrack(Document&, InbandTextTrackPrivate&);
InbandGenericTextTrack(ScriptExecutionContext&, InbandTextTrackPrivate&);

void addGenericCue(InbandGenericCue&) final;
void updateGenericCue(InbandGenericCue&) final;
Expand Down
16 changes: 8 additions & 8 deletions Source/WebCore/html/track/InbandTextTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,36 +28,36 @@

#if ENABLE(VIDEO)

#include "Document.h"
#include "InbandDataTextTrack.h"
#include "InbandGenericTextTrack.h"
#include "InbandTextTrackPrivate.h"
#include "InbandWebVTTTextTrack.h"
#include "ScriptExecutionContext.h"
#include "TextTrackClient.h"
#include <wtf/IsoMallocInlines.h>

namespace WebCore {

WTF_MAKE_ISO_ALLOCATED_IMPL(InbandTextTrack);

Ref<InbandTextTrack> InbandTextTrack::create(Document& document, InbandTextTrackPrivate& trackPrivate)
Ref<InbandTextTrack> InbandTextTrack::create(ScriptExecutionContext& context, InbandTextTrackPrivate& trackPrivate)
{
switch (trackPrivate.cueFormat()) {
case InbandTextTrackPrivate::CueFormat::Data:
return InbandDataTextTrack::create(document, trackPrivate);
return InbandDataTextTrack::create(context, trackPrivate);
case InbandTextTrackPrivate::CueFormat::Generic:
return InbandGenericTextTrack::create(document, trackPrivate);
return InbandGenericTextTrack::create(context, trackPrivate);
case InbandTextTrackPrivate::CueFormat::WebVTT:
return InbandWebVTTTextTrack::create(document, trackPrivate);
return InbandWebVTTTextTrack::create(context, trackPrivate);
}
ASSERT_NOT_REACHED();
auto textTrack = InbandDataTextTrack::create(document, trackPrivate);
auto textTrack = InbandDataTextTrack::create(context, trackPrivate);
textTrack->suspendIfNeeded();
return textTrack;
}

InbandTextTrack::InbandTextTrack(Document& document, InbandTextTrackPrivate& trackPrivate)
: TextTrack(&document, emptyAtom(), trackPrivate.id(), trackPrivate.label(), trackPrivate.language(), InBand)
InbandTextTrack::InbandTextTrack(ScriptExecutionContext& context, InbandTextTrackPrivate& trackPrivate)
: TextTrack(&context, emptyAtom(), trackPrivate.id(), trackPrivate.label(), trackPrivate.language(), InBand)
, m_private(trackPrivate)
{
m_private->setClient(*this);
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/html/track/InbandTextTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ namespace WebCore {
class InbandTextTrack : public TextTrack, private InbandTextTrackPrivateClient {
WTF_MAKE_ISO_ALLOCATED(InbandTextTrack);
public:
static Ref<InbandTextTrack> create(Document&, InbandTextTrackPrivate&);
static Ref<InbandTextTrack> create(ScriptExecutionContext&, InbandTextTrackPrivate&);
virtual ~InbandTextTrack();

bool isClosedCaptions() const override;
Expand All @@ -55,7 +55,7 @@ class InbandTextTrack : public TextTrack, private InbandTextTrackPrivateClient {
#endif

protected:
InbandTextTrack(Document&, InbandTextTrackPrivate&);
InbandTextTrack(ScriptExecutionContext&, InbandTextTrackPrivate&);

void setModeInternal(Mode);
void updateKindFromPrivate();
Expand Down
17 changes: 11 additions & 6 deletions Source/WebCore/html/track/InbandWebVTTTextTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@ namespace WebCore {

WTF_MAKE_ISO_ALLOCATED_IMPL(InbandWebVTTTextTrack);

inline InbandWebVTTTextTrack::InbandWebVTTTextTrack(Document& document, InbandTextTrackPrivate& trackPrivate)
: InbandTextTrack(document, trackPrivate)
inline InbandWebVTTTextTrack::InbandWebVTTTextTrack(ScriptExecutionContext& context, InbandTextTrackPrivate& trackPrivate)
: InbandTextTrack(context, trackPrivate)
{
}

Ref<InbandTextTrack> InbandWebVTTTextTrack::create(Document& document, InbandTextTrackPrivate& trackPrivate)
Ref<InbandTextTrack> InbandWebVTTTextTrack::create(ScriptExecutionContext& context, InbandTextTrackPrivate& trackPrivate)
{
auto textTrack = adoptRef(*new InbandWebVTTTextTrack(document, trackPrivate));
auto textTrack = adoptRef(*new InbandWebVTTTextTrack(context, trackPrivate));
textTrack->suspendIfNeeded();
return textTrack;
}
Expand All @@ -56,8 +56,9 @@ InbandWebVTTTextTrack::~InbandWebVTTTextTrack() = default;

WebVTTParser& InbandWebVTTTextTrack::parser()
{
ASSERT(is<Document>(scriptExecutionContext()));
if (!m_webVTTParser)
m_webVTTParser = makeUnique<WebVTTParser>(static_cast<WebVTTParserClient&>(*this), document());
m_webVTTParser = makeUnique<WebVTTParser>(static_cast<WebVTTParserClient&>(*this), downcast<Document>(*scriptExecutionContext()));
return *m_webVTTParser;
}

Expand All @@ -73,8 +74,12 @@ void InbandWebVTTTextTrack::parseWebVTTCueData(ISOWebVTTCue&& cueData)

void InbandWebVTTTextTrack::newCuesParsed()
{
RefPtr document = dynamicDowncast<Document>(scriptExecutionContext());
if (!document)
return;

for (auto& cueData : parser().takeCues()) {
auto cue = VTTCue::create(document(), cueData);
auto cue = VTTCue::create(*document, cueData);
auto existingCue = matchCue(cue, TextTrackCue::IgnoreDuration);
if (!existingCue) {
INFO_LOG(LOGIDENTIFIER, cue.get());
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/html/track/InbandWebVTTTextTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ namespace WebCore {
class InbandWebVTTTextTrack final : public InbandTextTrack, private WebVTTParserClient {
WTF_MAKE_ISO_ALLOCATED(InbandWebVTTTextTrack);
public:
static Ref<InbandTextTrack> create(Document&, InbandTextTrackPrivate&);
static Ref<InbandTextTrack> create(ScriptExecutionContext&, InbandTextTrackPrivate&);
virtual ~InbandWebVTTTextTrack();

private:
InbandWebVTTTextTrack(Document&, InbandTextTrackPrivate&);
InbandWebVTTTextTrack(ScriptExecutionContext&, InbandTextTrackPrivate&);

WebVTTParser& parser();
void parseWebVTTCueData(const uint8_t* data, unsigned length) final;
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/html/track/LoadableTextTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@

#if ENABLE(VIDEO)

#include "Document.h"
#include "ElementInlines.h"
#include "HTMLTrackElement.h"
#include "ScriptExecutionContext.h"
#include "TextTrackCueList.h"
#include "VTTCue.h"
#include "VTTRegionList.h"
Expand All @@ -43,7 +43,7 @@ namespace WebCore {
WTF_MAKE_ISO_ALLOCATED_IMPL(LoadableTextTrack);

LoadableTextTrack::LoadableTextTrack(HTMLTrackElement& track, const AtomString& kind, const AtomString& label, const AtomString& language)
: TextTrack(&track.document(), kind, emptyAtom(), label, language, TrackElement)
: TextTrack(track.scriptExecutionContext(), kind, emptyAtom(), label, language, TrackElement)
, m_trackElement(&track)
{
}
Expand Down
15 changes: 4 additions & 11 deletions Source/WebCore/html/track/TextTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@

#include "CommonAtomStrings.h"
#include "DataCue.h"
#include "Document.h"
#include "Event.h"
#include "SourceBuffer.h"
#include "TextTrackClient.h"
Expand Down Expand Up @@ -118,16 +117,16 @@ TextTrack::TextTrack(ScriptExecutionContext* context, const AtomString& kind, co
{
}

Ref<TextTrack> TextTrack::create(Document* document, const AtomString& kind, TrackID id, const AtomString& label, const AtomString& language)
Ref<TextTrack> TextTrack::create(ScriptExecutionContext* context, const AtomString& kind, TrackID id, const AtomString& label, const AtomString& language)
{
auto textTrack = adoptRef(*new TextTrack(document, kind, id, label, language, AddTrack));
auto textTrack = adoptRef(*new TextTrack(context, kind, id, label, language, AddTrack));
textTrack->suspendIfNeeded();
return textTrack;
}

Ref<TextTrack> TextTrack::create(Document* document, const AtomString& kind, const AtomString& id, const AtomString& label, const AtomString& language)
Ref<TextTrack> TextTrack::create(ScriptExecutionContext* context, const AtomString& kind, const AtomString& id, const AtomString& label, const AtomString& language)
{
auto textTrack = adoptRef(*new TextTrack(document, kind, id, label, language, AddTrack));
auto textTrack = adoptRef(*new TextTrack(context, kind, id, label, language, AddTrack));
textTrack->suspendIfNeeded();
return textTrack;
}
Expand Down Expand Up @@ -164,12 +163,6 @@ void TextTrack::clearClient(TextTrackClient& client)
m_clients.remove(client);
}

Document& TextTrack::document() const
{
ASSERT(scriptExecutionContext());
return downcast<Document>(*scriptExecutionContext());
}

bool TextTrack::enabled() const
{
return m_mode != Mode::Disabled;
Expand Down
7 changes: 3 additions & 4 deletions Source/WebCore/html/track/TextTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ class VTTRegionList;
class TextTrack : public TrackBase, public EventTarget, public ActiveDOMObject {
WTF_MAKE_ISO_ALLOCATED(TextTrack);
public:
static Ref<TextTrack> create(Document*, const AtomString& kind, TrackID, const AtomString& label, const AtomString& language);
static Ref<TextTrack> create(Document*, const AtomString& kind, const AtomString& id, const AtomString& label, const AtomString& language);
static Ref<TextTrack> create(ScriptExecutionContext*, const AtomString& kind, TrackID, const AtomString& label, const AtomString& language);
static Ref<TextTrack> create(ScriptExecutionContext*, const AtomString& kind, const AtomString& id, const AtomString& label, const AtomString& language);
virtual ~TextTrack();

static TextTrack& captionMenuOffItem();
Expand Down Expand Up @@ -133,7 +133,7 @@ class TextTrack : public TrackBase, public EventTarget, public ActiveDOMObject {
virtual bool shouldPurgeCuesFromUnbufferedRanges() const { return false; }
virtual void removeCuesNotInTimeRanges(const PlatformTimeRanges&);

Document& document() const;
ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }

protected:
TextTrack(ScriptExecutionContext*, const AtomString& kind, TrackID, const AtomString& label, const AtomString& language, TextTrackType);
Expand All @@ -151,7 +151,6 @@ class TextTrack : public TrackBase, public EventTarget, public ActiveDOMObject {

private:
EventTargetInterface eventTargetInterface() const final { return TextTrackEventTargetInterfaceType; }
ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }

bool enabled() const override;

Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/html/track/VTTCue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1446,7 +1446,7 @@ void VTTCue::prepareToSpeak(SpeechSynthesis& speechSynthesis, double rate, doubl

auto& track = *this->track();
m_speechSynthesis = &speechSynthesis;
m_speechUtterance = SpeechSynthesisUtterance::create(track.document(), m_content, [protectedThis = Ref { *this }, completion = WTFMove(completion)](const SpeechSynthesisUtterance&) {
m_speechUtterance = SpeechSynthesisUtterance::create(*track.scriptExecutionContext(), m_content, [protectedThis = Ref { *this }, completion = WTFMove(completion)](const SpeechSynthesisUtterance&) {
protectedThis->m_speechUtterance = nullptr;
protectedThis->m_speechSynthesis = nullptr;
completion(protectedThis.get());
Expand Down

0 comments on commit 21b6595

Please sign in to comment.