Skip to content

Commit e209781

Browse files
committed
[MSE] Introduce PlatformMediaError as a way to return failure
https://bugs.webkit.org/show_bug.cgi?id=264856 rdar://118431377 Reviewed by Jer Noble. We also add a generic MediaPromise and MediaTimePromise and use those in place of GenericPromise in the MSE code. * Source/WebCore/Headers.cmake: * Source/WebCore/Modules/mediasource/MediaSource.cpp: (WebCore::MediaSource::waitForTarget): (WebCore::MediaSource::completeSeek): (WebCore::MediaSource::seekToTime): (WebCore::MediaSource::detachFromElement): (WebCore::MediaSource::stop): (WebCore::MediaSource::onReadyStateChange): * Source/WebCore/Modules/mediasource/MediaSource.h: * Source/WebCore/Modules/mediasource/SourceBuffer.cpp: (WebCore::SourceBuffer::rangeRemoval): (WebCore::SourceBuffer::appendBufferInternal): (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): (WebCore::SourceBuffer::sourceBufferPrivateDurationChanged): (WebCore::SourceBuffer::sourceBufferPrivateBufferedChanged): * Source/WebCore/Modules/mediasource/SourceBuffer.h: * Source/WebCore/Sources.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/platform/MediaPromiseTypes.h: Copied from Source/WebKit/WebProcess/GPU/media/MediaSourcePrivateRemote.messages.in. * Source/WebCore/platform/PlatformMediaError.cpp: Renamed from Source/WebCore/platform/graphics/SourceBufferPrivateClient.cpp. (WebCore::convertEnumerationToString): * Source/WebCore/platform/PlatformMediaError.h: Added. (WTF::LogArgument::toString): * Source/WebCore/platform/graphics/MediaPlayer.h: * Source/WebCore/platform/graphics/MediaSourcePrivate.h: * Source/WebCore/platform/graphics/MediaSourcePrivateClient.h: * Source/WebCore/platform/graphics/SourceBufferPrivate.cpp: (WebCore::SourceBufferPrivate::setBufferedRanges): (WebCore::SourceBufferPrivate::updateBufferedFromTrackBuffers): (WebCore::SourceBufferPrivate::computeSeekTime): (WebCore::SourceBufferPrivate::removeCodedFrames): (WebCore::SourceBufferPrivate::didReceiveInitializationSegment): (WebCore::SourceBufferPrivate::didUpdateFormatDescriptionForTrackId): (WebCore::SourceBufferPrivate::append): (WebCore::SourceBufferPrivate::processPendingMediaSamples): (WebCore::SourceBufferPrivate::resetParserState): (WebCore::SourceBufferPrivate::memoryPressure): * Source/WebCore/platform/graphics/SourceBufferPrivate.h: * Source/WebCore/platform/graphics/SourceBufferPrivateClient.h: (WTF::LogArgument::toString): Deleted. * Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h: * Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm: (WebCore::MediaSourcePrivateAVFObjC::waitForTarget): (WebCore::MediaSourcePrivateAVFObjC::seekToTime): * Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.h: * Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm: (WebCore::SourceBufferParserAVFObjC::appendData): * Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: * Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: (WebCore::SourceBufferPrivateAVFObjC::appendInternal): * Source/WebCore/platform/graphics/cocoa/SourceBufferParser.h: * Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.cpp: (WebCore::SourceBufferParserWebM::appendData): * Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.h: * Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp: (WebCore::MediaSourcePrivateGStreamer::waitForTarget): (WebCore::MediaSourcePrivateGStreamer::seekToTime): * Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h: * Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp: (WebCore::SourceBufferPrivateGStreamer::appendInternal): (WebCore::SourceBufferPrivateGStreamer::appendParsingFailed): * Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h: * Source/WebCore/platform/mock/mediasource/MockMediaSourcePrivate.cpp: (WebCore::MockMediaSourcePrivate::waitForTarget): (WebCore::MockMediaSourcePrivate::seekToTime): * Source/WebCore/platform/mock/mediasource/MockMediaSourcePrivate.h: * Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.cpp: (WebCore::MockSourceBufferPrivate::appendInternal): * Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.h: * Source/WebKit/GPUProcess/media/RemoteMediaSourceProxy.cpp: (WebKit::RemoteMediaSourceProxy::waitForTarget): (WebKit::RemoteMediaSourceProxy::seekToTime): * Source/WebKit/GPUProcess/media/RemoteMediaSourceProxy.h: * Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp: (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidReceiveInitializationSegment): (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDurationChanged): (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateBufferedChanged): (WebKit::RemoteSourceBufferProxy::append): * Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h: * Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.messages.in: * Source/WebKit/Scripts/webkit/messages.py: (headers_for_type): * Source/WebKit/WebProcess/GPU/media/MediaSourcePrivateRemote.cpp: (WebKit::MediaSourcePrivateRemote::waitForTarget): (WebKit::MediaSourcePrivateRemote::proxyWaitForTarget): (WebKit::MediaSourcePrivateRemote::seekToTime): (WebKit::MediaSourcePrivateRemote::proxySeekToTime): * Source/WebKit/WebProcess/GPU/media/MediaSourcePrivateRemote.h: * Source/WebKit/WebProcess/GPU/media/MediaSourcePrivateRemote.messages.in: * Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.cpp: (WebKit::SourceBufferPrivateRemote::append): (WebKit::SourceBufferPrivateRemote::appendInternal): (WebKit::SourceBufferPrivateRemote::removeCodedFrames): (WebKit::SourceBufferPrivateRemote::computeSeekTime): (WebKit::SourceBufferPrivateRemote::sourceBufferPrivateDidReceiveInitializationSegment): * Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.h: * Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.messages.in: Canonical link: https://commits.webkit.org/270869@main
1 parent 30dd17f commit e209781

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+336
-242
lines changed

Source/WebCore/Headers.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1679,6 +1679,7 @@ set(WebCore_PRIVATE_FRAMEWORK_HEADERS
16791679
platform/MediaCapabilitiesEncodingInfo.h
16801680
platform/MediaCapabilitiesInfo.h
16811681
platform/MediaDescription.h
1682+
platform/MediaPromiseTypes.h
16821683
platform/MediaSample.h
16831684
platform/MediaSelectionOption.h
16841685
platform/MediaSessionGroupIdentifier.h
@@ -1702,6 +1703,7 @@ set(WebCore_PRIVATE_FRAMEWORK_HEADERS
17021703
platform/PlatformEvent.h
17031704
platform/PlatformExportMacros.h
17041705
platform/PlatformKeyboardEvent.h
1706+
platform/PlatformMediaError.h
17051707
platform/PlatformMouseEvent.h
17061708
platform/PlatformPasteboard.h
17071709
platform/PlatformScreen.h

Source/WebCore/Modules/mediasource/MediaSource.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,10 @@ const PlatformTimeRanges& MediaSource::buffered() const
188188
return m_buffered;
189189
}
190190

191-
Ref<MediaSource::MediaTimePromise> MediaSource::waitForTarget(const SeekTarget& target)
191+
Ref MediaSource::waitForTarget(const SeekTarget& target)
192192
{
193193
if (isClosed())
194-
return MediaTimePromise::createAndReject(-1);
194+
return MediaTimePromise::createAndReject(PlatformMediaError::SourceRemoved);
195195

196196
ALWAYS_LOG(LOGIDENTIFIER, target.time);
197197

@@ -200,7 +200,7 @@ Ref MediaSource::waitForTarget(const SeekTarget&
200200

201201
if (m_seekTargetPromise) {
202202
ALWAYS_LOG(LOGIDENTIFIER, "Previous seeking to ", m_pendingSeekTarget->time, "pending, cancelling it");
203-
m_seekTargetPromise->reject(-1);
203+
m_seekTargetPromise->reject(PlatformMediaError::Cancelled);
204204
}
205205
m_seekTargetPromise.emplace();
206206
m_pendingSeekTarget = target;
@@ -251,7 +251,7 @@ void MediaSource::completeSeek()
251251
return sourceBuffer->computeSeekTime(seekTarget);
252252
}))->whenSettled(RunLoop::current(), [time = seekTarget.time, protectedThis = Ref { *this }] (auto&& results) mutable {
253253
if (!results)
254-
return MediaTimePromise::createAndReject(-1);
254+
return MediaTimePromise::createAndReject(results.error());
255255
auto seekTime = time;
256256
for (auto& result : *results) {
257257
if (abs(time - result) > abs(time - seekTime))
@@ -267,13 +267,13 @@ void MediaSource::completeSeek()
267267
m_seekTargetPromise.reset();
268268
}
269269

270-
Ref<GenericPromise> MediaSource::seekToTime(const MediaTime& time)
270+
Ref<MediaPromise> MediaSource::seekToTime(const MediaTime& time)
271271
{
272272
if (isClosed())
273-
return GenericPromise::createAndReject(-1);
273+
return MediaPromise::createAndReject(PlatformMediaError::SourceRemoved);
274274
for (auto& sourceBuffer : *m_activeSourceBuffers)
275275
sourceBuffer->seekToTime(time);
276-
return GenericPromise::createAndResolve();
276+
return MediaPromise::createAndResolve();
277277
}
278278

279279
Ref MediaSource::seekable()
@@ -1000,7 +1000,7 @@ void MediaSource::detachFromElement(HTMLMediaElement& element)
10001000
m_mediaElement = nullptr;
10011001

10021002
if (m_seekTargetPromise) {
1003-
m_seekTargetPromise->reject(-1);
1003+
m_seekTargetPromise->reject(PlatformMediaError::Cancelled);
10041004
m_seekTargetPromise.reset();
10051005
}
10061006
}
@@ -1069,7 +1069,7 @@ void MediaSource::stop()
10691069
if (m_mediaElement)
10701070
m_mediaElement->detachMediaSource();
10711071
if (m_seekTargetPromise)
1072-
m_seekTargetPromise->reject(-1);
1072+
m_seekTargetPromise->reject(PlatformMediaError::Cancelled);
10731073
m_seekTargetPromise.reset();
10741074
m_readyState = ReadyState::Closed;
10751075
m_private = nullptr;
@@ -1113,7 +1113,7 @@ void MediaSource::onReadyStateChange(ReadyState oldState, ReadyState newState)
11131113
} else {
11141114
ASSERT(isClosed());
11151115
if (m_seekTargetPromise)
1116-
m_seekTargetPromise->reject(-1);
1116+
m_seekTargetPromise->reject(PlatformMediaError::Cancelled);
11171117
m_seekTargetPromise.reset();
11181118
scheduleEvent(eventNames().sourcecloseEvent);
11191119
}

Source/WebCore/Modules/mediasource/MediaSource.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "EventTarget.h"
3737
#include "ExceptionOr.h"
3838
#include "HTMLMediaElement.h"
39+
#include "MediaPromiseTypes.h"
3940
#include "MediaSourcePrivateClient.h"
4041
#include "URLRegistry.h"
4142
#include <optional>
@@ -159,7 +160,7 @@ class MediaSource
159160

160161
void setPrivateAndOpen(Ref&&) final;
161162
Ref waitForTarget(const SeekTarget&) final;
162-
Ref<GenericPromise> seekToTime(const MediaTime&) final;
163+
Ref<MediaPromise> seekToTime(const MediaTime&) final;
163164

164165
void refEventTarget() final { ref(); }
165166
void derefEventTarget() final { deref(); }

Source/WebCore/Modules/mediasource/SourceBuffer.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ void SourceBuffer::rangeRemoval(const MediaTime& start, const MediaTime& end)
344344
// 5. Return control to the caller and run the rest of the steps asynchronously.
345345
invokeAsync(RunLoop::current(), [protectedThis = Ref { *this }, this, start, end] {
346346
if (isRemoved())
347-
return GenericPromise::createAndReject(-1);
347+
return MediaPromise::createAndReject(PlatformMediaError::BufferRemoved);
348348
// 6. Run the coded frame removal algorithm with start and end as the start and end of the removal range.
349349
return m_private->removeCodedFrames(start, end, m_source->currentTime());
350350
})->whenSettled(RunLoop::current(), [this, protectedThis = Ref { *this }] {
@@ -547,14 +547,14 @@ ExceptionOr SourceBuffer::appendBufferInternal(const unsigned char* data,
547547
invokeAsync(RunLoop::current(), [protectedThis = Ref { *this }, this]() mutable {
548548
// 1. Loop Top: If the input buffer is empty, then jump to the need more data step below.
549549
if (!m_pendingAppendData || m_pendingAppendData->isEmpty())
550-
return GenericPromise::createAndResolve();
550+
return MediaPromise::createAndResolve();
551551
return m_private->append(m_pendingAppendData.releaseNonNull());
552552
})->whenSettled(RunLoop::current(), *this, &SourceBuffer::sourceBufferPrivateAppendComplete)->track(m_appendBufferPromise);
553553

554554
return { };
555555
}
556556

557-
void SourceBuffer::sourceBufferPrivateAppendComplete(GenericPromise::Result&& result)
557+
void SourceBuffer::sourceBufferPrivateAppendComplete(MediaPromise::Result&& result)
558558
{
559559
m_appendBufferPromise.complete();
560560

@@ -663,10 +663,10 @@ void SourceBuffer::setActive(bool active)
663663
m_source->sourceBufferDidChangeActiveState(*this, active);
664664
}
665665

666-
Ref<SourceBufferPrivateClient::ReceiveResultPromise> SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment(InitializationSegment&& segment)
666+
Ref<MediaPromise> SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment(InitializationSegment&& segment)
667667
{
668668
if (isRemoved())
669-
return ReceiveResultPromise::createAndReject(ReceiveResult::BufferRemoved);
669+
return MediaPromise::createAndReject(PlatformMediaError::BufferRemoved);
670670

671671
ALWAYS_LOG(LOGIDENTIFIER);
672672

@@ -689,7 +689,7 @@ Ref SourceBuffer::sourceBufferP
689689
// with the decode error parameter set to true and abort these steps.
690690
if (segment.audioTracks.isEmpty() && segment.videoTracks.isEmpty() && segment.textTracks.isEmpty()) {
691691
// appendError will be called once sourceBufferPrivateAppendComplete gets called once the completionHandler is run.
692-
return ReceiveResultPromise::createAndReject(ReceiveResult::AppendError);
692+
return MediaPromise::createAndReject(PlatformMediaError::AppendError);
693693
}
694694

695695
// 3. If the first initialization segment flag is true, then run the following steps:
@@ -698,7 +698,7 @@ Ref SourceBuffer::sourceBufferP
698698
// with the decode error parameter set to true and abort these steps.
699699
if (!validateInitializationSegment(segment)) {
700700
// appendError will be called once sourceBufferPrivateAppendComplete gets called once the completionHandler is run.
701-
return ReceiveResultPromise::createAndReject(ReceiveResult::AppendError);
701+
return MediaPromise::createAndReject(PlatformMediaError::AppendError);
702702
}
703703

704704
Vector> trackIdPairs;
@@ -775,15 +775,15 @@ Ref SourceBuffer::sourceBufferP
775775
for (auto& audioTrackInfo : segment.audioTracks) {
776776
if (audioTrackInfo.description && allowedMediaAudioCodecIDs->contains(FourCC::fromString(audioTrackInfo.description->codec())))
777777
continue;
778-
return ReceiveResultPromise::createAndReject(ReceiveResult::AppendError);
778+
return MediaPromise::createAndReject(PlatformMediaError::AppendError);
779779
}
780780
}
781781

782782
if (auto& allowedMediaVideoCodecIDs = document().settings().allowedMediaVideoCodecIDs()) {
783783
for (auto& videoTrackInfo : segment.videoTracks) {
784784
if (videoTrackInfo.description && allowedMediaVideoCodecIDs->contains(FourCC::fromString(videoTrackInfo.description->codec())))
785785
continue;
786-
return ReceiveResultPromise::createAndReject(ReceiveResult::AppendError);
786+
return MediaPromise::createAndReject(PlatformMediaError::AppendError);
787787
}
788788
}
789789

@@ -912,7 +912,7 @@ Ref SourceBuffer::sourceBufferP
912912
// 6.1 If one or more objects in sourceBuffers have first initialization segment flag set to false, then abort these steps.
913913
for (auto& sourceBuffer : *m_source->sourceBuffers()) {
914914
if (!sourceBuffer->m_receivedFirstInitializationSegment)
915-
return ReceiveResultPromise::createAndResolve();
915+
return MediaPromise::createAndResolve();
916916
}
917917

918918
// 6.2 Set the HTMLMediaElement.readyState attribute to HAVE_METADATA.
@@ -926,7 +926,7 @@ Ref SourceBuffer::sourceBufferP
926926
if (activeTrackFlag && m_private->readyState() > MediaPlayer::ReadyState::HaveCurrentData)
927927
m_private->setReadyState(MediaPlayer::ReadyState::HaveMetadata);
928928

929-
return ReceiveResultPromise::createAndResolve();
929+
return MediaPromise::createAndResolve();
930930
}
931931

932932
bool SourceBuffer::validateInitializationSegment(const InitializationSegment& segment)
@@ -1138,15 +1138,15 @@ void SourceBuffer::sourceBufferPrivateDidParseSample(double frameDuration)
11381138
m_bufferedSinceLastMonitor += frameDuration;
11391139
}
11401140

1141-
Ref<GenericPromise> SourceBuffer::sourceBufferPrivateDurationChanged(const MediaTime& duration)
1141+
Ref<MediaPromise> SourceBuffer::sourceBufferPrivateDurationChanged(const MediaTime& duration)
11421142
{
11431143
if (isRemoved())
1144-
return GenericPromise::createAndReject(-1);
1144+
return MediaPromise::createAndReject(PlatformMediaError::BufferRemoved);
11451145

11461146
m_source->setDurationInternal(duration);
11471147
if (m_textTracks)
11481148
m_textTracks->setDuration(duration);
1149-
return GenericPromise::createAndResolve();
1149+
return MediaPromise::createAndResolve();
11501150
}
11511151

11521152
void SourceBuffer::sourceBufferPrivateHighestPresentationTimestampChanged(const MediaTime& timestamp)
@@ -1307,7 +1307,7 @@ void SourceBuffer::setShouldGenerateTimestamps(bool flag)
13071307
m_private->setShouldGenerateTimestamps(flag);
13081308
}
13091309

1310-
Ref<GenericPromise> SourceBuffer::sourceBufferPrivateBufferedChanged(const PlatformTimeRanges& ranges)
1310+
Ref<MediaPromise> SourceBuffer::sourceBufferPrivateBufferedChanged(const PlatformTimeRanges& ranges)
13111311
{
13121312
ASSERT(ranges != m_buffered->ranges(), "sourceBufferPrivateBufferedChanged should only be called if the ranges did change");
13131313
#if ENABLE(MANAGED_MEDIA_SOURCE)
@@ -1325,7 +1325,7 @@ Ref SourceBuffer::sourceBufferPrivateBufferedChanged(const Platf
13251325
#endif
13261326
m_buffered = TimeRanges::create(ranges);
13271327
setBufferedDirty(true);
1328-
return GenericPromise::createAndResolve();
1328+
return MediaPromise::createAndResolve();
13291329
}
13301330

13311331
bool SourceBuffer::isBufferedDirty() const

Source/WebCore/Modules/mediasource/SourceBuffer.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,10 @@ class SourceBuffer
163163
bool virtualHasPendingActivity() const final;
164164

165165
// SourceBufferPrivateClient
166-
Ref<ReceiveResultPromise> sourceBufferPrivateDidReceiveInitializationSegment(InitializationSegment&&) final;
167-
Ref<GenericPromise> sourceBufferPrivateBufferedChanged(const PlatformTimeRanges&) final;
166+
Ref<MediaPromise> sourceBufferPrivateDidReceiveInitializationSegment(InitializationSegment&&) final;
167+
Ref<MediaPromise> sourceBufferPrivateBufferedChanged(const PlatformTimeRanges&) final;
168168
void sourceBufferPrivateHighestPresentationTimestampChanged(const MediaTime&) final;
169-
Ref<GenericPromise> sourceBufferPrivateDurationChanged(const MediaTime& duration) final;
169+
Ref<MediaPromise> sourceBufferPrivateDurationChanged(const MediaTime& duration) final;
170170
void sourceBufferPrivateDidParseSample(double sampleDuration) final;
171171
void sourceBufferPrivateDidDropSample() final;
172172
void sourceBufferPrivateDidReceiveRenderingError(int64_t errorCode) final;
@@ -196,7 +196,7 @@ class SourceBuffer
196196
void scheduleEvent(const AtomString& eventName);
197197

198198
ExceptionOr<void> appendBufferInternal(const unsigned char*, unsigned);
199-
void sourceBufferPrivateAppendComplete(GenericPromise::Result&&);
199+
void sourceBufferPrivateAppendComplete(MediaPromise::Result&&);
200200
void resetParserState();
201201

202202
void setActive(bool);
@@ -261,8 +261,8 @@ class SourceBuffer
261261
bool m_shouldGenerateTimestamps { false };
262262
bool m_pendingInitializationSegmentForChangeType { false };
263263
Ref m_buffered;
264-
NativePromiseRequest<GenericPromise> m_appendBufferPromise;
265-
NativePromiseRequest<GenericPromise> m_removeCodedFramesPromise;
264+
NativePromiseRequest<MediaPromise> m_appendBufferPromise;
265+
NativePromiseRequest<MediaPromise> m_removeCodedFramesPromise;
266266

267267
#if !RELEASE_LOG_DISABLED
268268
Ref<const Logger> m_logger;

Source/WebCore/Sources.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2099,6 +2099,7 @@ platform/Pasteboard.cpp
20992099
platform/PasteboardCustomData.cpp
21002100
platform/PasteboardWriterData.cpp
21012101
platform/PlatformKeyboardEvent.cpp
2102+
platform/PlatformMediaError.cpp
21022103
platform/PlatformScreen.cpp
21032104
platform/PlatformSpeechSynthesisUtterance.cpp
21042105
platform/PlatformSpeechSynthesisVoice.cpp
@@ -2329,7 +2330,6 @@ platform/graphics/RoundedRect.cpp
23292330
platform/graphics/ShadowBlur.cpp
23302331
platform/graphics/SourceBrush.cpp
23312332
platform/graphics/SourceBufferPrivate.cpp
2332-
platform/graphics/SourceBufferPrivateClient.cpp
23332333
platform/graphics/SourceImage.cpp
23342334
platform/graphics/StringTruncator.cpp
23352335
platform/graphics/SystemFontDatabase.cpp

0 commit comments

Comments
 (0)