Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 75a01d7e9d12969c5a2b878a6c4c572c9e6fbf27 https://github.com/WebKit/WebKit/commit/75a01d7e9d12969c5a2b878a6c4c572c9e6fbf27 Author: Sihui Liu <sihui_...@apple.com> Date: 2023-08-22 (Tue, 22 Aug 2023)
Changed paths: A LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-gc-expected.txt A LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-gc.html M Source/WebCore/Modules/speech/SpeechSynthesis.cpp M Source/WebCore/Modules/speech/SpeechSynthesis.h M Source/WebCore/Modules/speech/SpeechSynthesisUtterance.cpp M Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h Log Message: ----------- Keep SpeechSynthesisUtterance wrapper alive when utterance is spoken multiple times https://bugs.webkit.org/show_bug.cgi?id=260474 rdar://114203537 Reviewed by Ryosuke Niwa. In 266959@main and 266990@main, we make sure wrapper of SpeechSynthesisUtterance is kept alive when it is being processed. The "alive" period starts from when SpeechSynthesisUtterance is handed to SpeechSynthesis via speak(), and ends when SpeechSynthesisUtterance receives end events or SpeechSynthesisUtterance is removed from SpeechSynthesis. According to existing wpt test SpeechSynthesis-speak-twice.html, it is valid to speak an utterance multiple times, i.e. same utterance can be handed to SpeechSynthesis multiple times, so we should make sure SpeechSynthesisUtterance is kept alive until the last speaking is finished. * LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-gc-expected.txt: Added. * LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-gc.html: Added. * Source/WebCore/Modules/speech/SpeechSynthesis.cpp: (WebCore::SpeechSynthesis::setPlatformSynthesizer): (WebCore::SpeechSynthesis::speaking const): (WebCore::SpeechSynthesis::startSpeakingImmediately): (WebCore::SpeechSynthesis::speak): (WebCore::SpeechSynthesis::cancel): (WebCore::SpeechSynthesis::didStartSpeaking): (WebCore::SpeechSynthesis::didFinishSpeaking): (WebCore::SpeechSynthesis::didPauseSpeaking): (WebCore::SpeechSynthesis::didResumeSpeaking): (WebCore::SpeechSynthesis::speakingErrorOccurred): (WebCore::SpeechSynthesis::boundaryEventOccurred): (WebCore::SpeechSynthesis::protectedCurrentSpeechUtterance): (WebCore::SpeechSynthesis::clearUtteranceQueue): Deleted. * Source/WebCore/Modules/speech/SpeechSynthesis.h: * Source/WebCore/Modules/speech/SpeechSynthesisUtterance.cpp: (WebCore::SpeechSynthesisUtterance::eventOccurred): (WebCore::SpeechSynthesisUtterance::errorEventOccurred): (WebCore::SpeechSynthesisUtterance::incrementActivityCountForEventDispatch): (WebCore::SpeechSynthesisUtterance::decrementActivityCountForEventDispatch): (WebCore::SpeechSynthesisUtterance::virtualHasPendingActivity const): (WebCore::SpeechSynthesisUtterance::dispatchEventAndUpdateState): Deleted. (WebCore::SpeechSynthesisUtterance::setIsActiveForEventDispatch): Deleted. * Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h: (WebCore::SpeechSynthesisUtteranceActivity::SpeechSynthesisUtteranceActivity): (WebCore::SpeechSynthesisUtteranceActivity::~SpeechSynthesisUtteranceActivity): (WebCore::SpeechSynthesisUtteranceActivity::utterance): Canonical link: https://commits.webkit.org/267161@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes