Changeset 247192 in webkit
- Timestamp:
- Jul 6, 2019 1:14:16 AM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r247190 r247192 1 2019-07-06 Chris Fleizach <cfleizach@apple.com> 2 3 AX: CrashTracer: com.apple.WebKit.WebContent at WebKit: WebKit::WebSpeechSynthesisClient::speak 4 https://bugs.webkit.org/show_bug.cgi?id=199435 5 6 Reviewed by Ryosuke Niwa. 7 8 Ensure we don't access null observers in speech callbacks. 9 10 * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp: 11 (WebKit::WebSpeechSynthesisClient::voiceList): 12 (WebKit::WebSpeechSynthesisClient::speak): 13 (WebKit::WebSpeechSynthesisClient::pause): 14 (WebKit::WebSpeechSynthesisClient::resume): 15 * WebProcess/WebPage/WebPage.cpp: 16 (WebKit::WebPage::speakingErrorOccurred): 17 (WebKit::WebPage::boundaryEventOccurred): 18 (WebKit::WebPage::voicesDidChange): 19 1 20 2019-07-05 Chris Dumez <cdumez@apple.com> 2 21 -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp
r245178 r247192 44 44 45 45 m_voices.clear(); 46 for (auto& voice : voiceList) {46 for (auto& voice : voiceList) 47 47 m_voices.append(WebCore::PlatformSpeechSynthesisVoice::create(voice.voiceURI, voice.name, voice.lang, voice.localService, voice.defaultLang)); 48 49 }50 48 return m_voices; 49 } 50 51 WebCore::SpeechSynthesisClientObserver* WebSpeechSynthesisClient::corePageObserver() const 52 { 53 if (m_page.corePage() && m_page.corePage()->speechSynthesisClient() && m_page.corePage()->speechSynthesisClient()->observer()) 54 return m_page.corePage()->speechSynthesisClient()->observer().get(); 55 return nullptr; 51 56 } 52 57 … … 54 59 { 55 60 WTF::CompletionHandler<void()> completionHandler = [this, weakThis = makeWeakPtr(*this)]() mutable { 56 if (weakThis) 57 m_page.corePage()->speechSynthesisClient()->observer()->didFinishSpeaking(); 61 if (!weakThis) 62 return; 63 if (auto observer = corePageObserver()) 64 observer->didFinishSpeaking(); 58 65 }; 59 66 … … 66 73 67 74 m_page.sendWithAsyncReply(Messages::WebPageProxy::SpeechSynthesisSpeak(utterance->text(), utterance->lang(), utterance->volume(), utterance->rate(), utterance->pitch(), utterance->startTime(), voiceURI, name, lang, localService, isDefault), WTFMove(completionHandler)); 68 69 m_page.corePage()->speechSynthesisClient()->observer()->didStartSpeaking();75 if (auto observer = corePageObserver()) 76 observer->didStartSpeaking(); 70 77 } 71 78 … … 78 85 { 79 86 WTF::CompletionHandler<void()> completionHandler = [this, weakThis = makeWeakPtr(*this)]() mutable { 80 if (weakThis) 81 m_page.corePage()->speechSynthesisClient()->observer()->didPauseSpeaking(); 87 if (!weakThis) 88 return; 89 if (auto observer = corePageObserver()) 90 observer->didPauseSpeaking(); 82 91 }; 83 92 … … 88 97 { 89 98 WTF::CompletionHandler<void()> completionHandler = [this, weakThis = makeWeakPtr(*this)]() mutable { 90 if (weakThis) 91 m_page.corePage()->speechSynthesisClient()->observer()->didResumeSpeaking(); 99 if (!weakThis) 100 return; 101 if (auto observer = corePageObserver()) 102 observer->didResumeSpeaking(); 92 103 }; 93 104 -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebSpeechSynthesisClient.h
r243002 r247192 50 50 void pause() override; 51 51 void resume() override; 52 52 private: 53 53 void setObserver(WeakPtr<WebCore::SpeechSynthesisClientObserver> observer) override { m_observer = observer; } 54 54 WeakPtr<WebCore::SpeechSynthesisClientObserver> observer() const override { return m_observer; } 55 56 WebCore::SpeechSynthesisClientObserver* corePageObserver() const; 55 57 56 57 private:58 58 WebPage& m_page; 59 59 WeakPtr<WebCore::SpeechSynthesisClientObserver> m_observer; -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r247161 r247192 6585 6585 void WebPage::speakingErrorOccurred() 6586 6586 { 6587 corePage()->speechSynthesisClient()->observer()->speakingErrorOccurred(); 6587 if (auto observer = corePage()->speechSynthesisClient()->observer()) 6588 observer->speakingErrorOccurred(); 6588 6589 } 6589 6590 6590 6591 void WebPage::boundaryEventOccurred(bool wordBoundary, unsigned charIndex) 6591 6592 { 6592 corePage()->speechSynthesisClient()->observer()->boundaryEventOccurred(wordBoundary, charIndex); 6593 if (auto observer = corePage()->speechSynthesisClient()->observer()) 6594 observer->boundaryEventOccurred(wordBoundary, charIndex); 6593 6595 } 6594 6596 6595 6597 void WebPage::voicesDidChange() 6596 6598 { 6597 corePage()->speechSynthesisClient()->observer()->voicesChanged(); 6599 if (auto observer = corePage()->speechSynthesisClient()->observer()) 6600 observer->voicesChanged(); 6598 6601 } 6599 6602 #endif
Note: See TracChangeset
for help on using the changeset viewer.