WebCore::HTMLMediaElement::mediaCanStart crashes
https://bugs.webkit.org/show_bug.cgi?id=209950
Reviewed by Jer Noble.
Source/WebCore:
Use WeakHashSet instead of HashSet to record MediaCanStartListeners in Document.
* dom/Document.cpp:
(WebCore::Document::addMediaCanStartListener):
(WebCore::Document::removeMediaCanStartListener):
(WebCore::Document::takeAnyMediaCanStartListener):
* dom/Document.h:
* page/MediaCanStartListener.h:
Source/WebKit:
UserMediaPermissionRequestManager does not need to inherit from
CanMakeWeakPtr<UserMediaPermissionRequestManager> because its
parent class MediaCanStartListener supports WeakPtr now.
* WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@259447 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index bd665f0..9a1cf0b 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,19 @@
+2020-04-03 Peng Liu <peng.liu6@apple.com>
+
+ WebCore::HTMLMediaElement::mediaCanStart crashes
+ https://bugs.webkit.org/show_bug.cgi?id=209950
+
+ Reviewed by Jer Noble.
+
+ Use WeakHashSet instead of HashSet to record MediaCanStartListeners in Document.
+
+ * dom/Document.cpp:
+ (WebCore::Document::addMediaCanStartListener):
+ (WebCore::Document::removeMediaCanStartListener):
+ (WebCore::Document::takeAnyMediaCanStartListener):
+ * dom/Document.h:
+ * page/MediaCanStartListener.h:
+
2020-04-03 Simon Fraser <simon.fraser@apple.com>
Flesh out enclosingScrollableArea() implementations
diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp
index 5f88252..3ef9459 100644
--- a/Source/WebCore/dom/Document.cpp
+++ b/Source/WebCore/dom/Document.cpp
@@ -6422,19 +6422,25 @@
void Document::addMediaCanStartListener(MediaCanStartListener& listener)
{
- ASSERT(!m_mediaCanStartListeners.contains(&listener));
- m_mediaCanStartListeners.add(&listener);
+ ASSERT(!m_mediaCanStartListeners.contains(listener));
+ m_mediaCanStartListeners.add(listener);
}
void Document::removeMediaCanStartListener(MediaCanStartListener& listener)
{
- ASSERT(m_mediaCanStartListeners.contains(&listener));
- m_mediaCanStartListeners.remove(&listener);
+ ASSERT(m_mediaCanStartListeners.contains(listener));
+ m_mediaCanStartListeners.remove(listener);
}
MediaCanStartListener* Document::takeAnyMediaCanStartListener()
{
- return m_mediaCanStartListeners.takeAny();
+ if (m_mediaCanStartListeners.computesEmpty())
+ return nullptr;
+
+ MediaCanStartListener* listener = m_mediaCanStartListeners.begin().get();
+ m_mediaCanStartListeners.remove(*listener);
+
+ return listener;
}
#if ENABLE(DEVICE_ORIENTATION) && PLATFORM(IOS_FAMILY)
diff --git a/Source/WebCore/dom/Document.h b/Source/WebCore/dom/Document.h
index 4f6e089..839afcd 100644
--- a/Source/WebCore/dom/Document.h
+++ b/Source/WebCore/dom/Document.h
@@ -1825,7 +1825,7 @@
RenderPtr<RenderView> m_renderView;
- HashSet<MediaCanStartListener*> m_mediaCanStartListeners;
+ WeakHashSet<MediaCanStartListener> m_mediaCanStartListeners;
#if ENABLE(FULLSCREEN_API)
UniqueRef<FullscreenManager> m_fullscreenManager;
diff --git a/Source/WebCore/page/MediaCanStartListener.h b/Source/WebCore/page/MediaCanStartListener.h
index 975a3ad..5a6c9b2 100644
--- a/Source/WebCore/page/MediaCanStartListener.h
+++ b/Source/WebCore/page/MediaCanStartListener.h
@@ -25,11 +25,13 @@
#pragma once
+#include <wtf/WeakPtr.h>
+
namespace WebCore {
class Document;
-class MediaCanStartListener {
+class MediaCanStartListener : public CanMakeWeakPtr<MediaCanStartListener> {
public:
virtual void mediaCanStart(Document&) = 0;
protected:
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 4adb1c8..41351f2 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,16 @@
+2020-04-03 Peng Liu <peng.liu6@apple.com>
+
+ WebCore::HTMLMediaElement::mediaCanStart crashes
+ https://bugs.webkit.org/show_bug.cgi?id=209950
+
+ Reviewed by Jer Noble.
+
+ UserMediaPermissionRequestManager does not need to inherit from
+ CanMakeWeakPtr<UserMediaPermissionRequestManager> because its
+ parent class MediaCanStartListener supports WeakPtr now.
+
+ * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
+
2020-04-02 John Wilander <wilander@apple.com>
Add SPI to configure WebsiteDataStores with a URL for standalone web applications and use it to disable first-party website data removal in ITP
diff --git a/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h b/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h
index 3ce4191..047afa2 100644
--- a/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h
+++ b/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h
@@ -34,7 +34,7 @@
class WebPage;
-class UserMediaPermissionRequestManager : public CanMakeWeakPtr<UserMediaPermissionRequestManager>, private WebCore::MediaCanStartListener {
+class UserMediaPermissionRequestManager : private WebCore::MediaCanStartListener {
WTF_MAKE_FAST_ALLOCATED;
public:
explicit UserMediaPermissionRequestManager(WebPage&);