| Summary: | WebCore::HTMLMediaElement::mediaCanStart crashes | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | WebKit | Reporter: | Peng Liu <peng.liu6> | ||||||
| Component: | Media | Assignee: | Peng Liu <peng.liu6> | ||||||
| Status: | RESOLVED FIXED | ||||||||
| Severity: | Normal | CC: | cdumez, eric.carlson, esprehn+autocc, ews-watchlist, glenn, hta, jer.noble, kangil.han, philipj, sergio, tommyw, webkit-bug-importer | ||||||
| Priority: | P2 | Keywords: | InRadar | ||||||
| Version: | WebKit Nightly Build | ||||||||
| Hardware: | Unspecified | ||||||||
| OS: | Unspecified | ||||||||
| Attachments: |
|
||||||||
|
Description
Peng Liu
2020-04-02 20:14:24 PDT
Created attachment 395343 [details]
Patch
Comment on attachment 395343 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=395343&action=review r=me, with nits. > Source/WebCore/dom/Document.cpp:6426 > void Document::addMediaCanStartListener(MediaCanStartListener& listener) > { > - ASSERT(!m_mediaCanStartListeners.contains(&listener)); > - m_mediaCanStartListeners.add(&listener); > + ASSERT(!m_mediaCanStartListeners.contains(listener)); > + m_mediaCanStartListeners.add(listener); The way I'd do this would be: void Document::addMediaCanStartListener(WeakPtr<MediaCanStartListener>&& listener) { ASSERT(!m_mediaCanStartListeners.contains(listener)); m_mediaCanStartListeners.add(WTFMove(listener)); } This way, MediaCanStartListener doesn't need to directly inherit from CanMakeWeakPtr. > Source/WebCore/dom/Document.cpp:6437 > + if (!m_mediaCanStartListeners.computeSize()) I think this could be: `if (m_mediaCanStartListeners.computeEmpty())`. > Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h:37 > -class UserMediaPermissionRequestManager : public CanMakeWeakPtr<UserMediaPermissionRequestManager>, private WebCore::MediaCanStartListener { > +class UserMediaPermissionRequestManager : private WebCore::MediaCanStartListener { Then this could get reverted. It would mean all the call sites to addMediaCanStartListener() would have to change, though. Comment on attachment 395343 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=395343&action=review >> Source/WebCore/dom/Document.cpp:6426 >> + m_mediaCanStartListeners.add(listener); > > The way I'd do this would be: > > void Document::addMediaCanStartListener(WeakPtr<MediaCanStartListener>&& listener) > { > ASSERT(!m_mediaCanStartListeners.contains(listener)); > m_mediaCanStartListeners.add(WTFMove(listener)); > } > > This way, MediaCanStartListener doesn't need to directly inherit from CanMakeWeakPtr. That's a good idea! Unfortunately it requires us to add WeakHashSet::add(WeakPtr<U>&& value) to the current implementation. >> Source/WebCore/dom/Document.cpp:6437 >> + if (!m_mediaCanStartListeners.computeSize()) > > I think this could be: `if (m_mediaCanStartListeners.computeEmpty())`. Yes, that will work. I chose to use computeSize() because it will clean up nullptrs. >> Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h:37 >> +class UserMediaPermissionRequestManager : private WebCore::MediaCanStartListener { > > Then this could get reverted. > > It would mean all the call sites to addMediaCanStartListener() would have to change, though. Maybe we can do it later after extending WeakHashSet. Created attachment 395349 [details]
Patch for landing (replace computeSize() with computesEmpty())
Committed r259447: <https://trac.webkit.org/changeset/259447> All reviewed patches have been landed. Closing bug and clearing flags on attachment 395349 [details]. |