Title: [270394] trunk/Source/WebCore
Revision
270394
Author
[email protected]
Date
2020-12-03 09:15:41 -0800 (Thu, 03 Dec 2020)

Log Message

MediaSessionHelper::setSharedHelper() hangs when "media in the GPU process" is enabled
https://bugs.webkit.org/show_bug.cgi?id=219466
<rdar://problem/71566601>

Reviewed by Chris Dumez.

The WebProcess will attempt to set a RemoteMediaSessionHelper as the sharedHelper, but calling
MediaSessionHelper::setSharedHelper() will cause a MediaSessionHelperIOS to be created, which in
turn tries to talk to AVSystemController.sharedAVSystemController, which fails due to sandbox
restrictions.

Refactor sharedHelperInstance() to not create a MediaSessionHelperIOS by default, which allows
setSharedHelper to assign a new helper without creating one by default.

* platform/audio/ios/MediaSessionHelperIOS.mm:
(sharedHelperInstance):
(MediaSessionHelper::sharedHelper):
(MediaSessionHelper::resetSharedHelper):
(MediaSessionHelper::setSharedHelper):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (270393 => 270394)


--- trunk/Source/WebCore/ChangeLog	2020-12-03 14:08:10 UTC (rev 270393)
+++ trunk/Source/WebCore/ChangeLog	2020-12-03 17:15:41 UTC (rev 270394)
@@ -1,3 +1,25 @@
+2020-12-03  Jer Noble  <[email protected]>
+
+        MediaSessionHelper::setSharedHelper() hangs when "media in the GPU process" is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=219466
+        <rdar://problem/71566601>
+
+        Reviewed by Chris Dumez.
+
+        The WebProcess will attempt to set a RemoteMediaSessionHelper as the sharedHelper, but calling
+        MediaSessionHelper::setSharedHelper() will cause a MediaSessionHelperIOS to be created, which in
+        turn tries to talk to AVSystemController.sharedAVSystemController, which fails due to sandbox
+        restrictions.
+
+        Refactor sharedHelperInstance() to not create a MediaSessionHelperIOS by default, which allows
+        setSharedHelper to assign a new helper without creating one by default.
+
+        * platform/audio/ios/MediaSessionHelperIOS.mm:
+        (sharedHelperInstance):
+        (MediaSessionHelper::sharedHelper):
+        (MediaSessionHelper::resetSharedHelper):
+        (MediaSessionHelper::setSharedHelper):
+
 2020-12-03  Andres Gonzalez  <[email protected]>
 
         Fix for crash handling NSAccessibilityInsertionPointLineNumberAttribute for text fields in isolated tree mode.

Modified: trunk/Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm (270393 => 270394)


--- trunk/Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm	2020-12-03 14:08:10 UTC (rev 270393)
+++ trunk/Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm	2020-12-03 17:15:41 UTC (rev 270394)
@@ -126,25 +126,30 @@
 #endif
 };
 
-static UniqueRef<MediaSessionHelper>& sharedHelperInstance()
+static std::unique_ptr<MediaSessionHelper>& sharedHelperInstance()
 {
-    static NeverDestroyed<UniqueRef<MediaSessionHelper>> helper = makeUniqueRef<MediaSessionHelperiOS>();
+    static NeverDestroyed<std::unique_ptr<MediaSessionHelper>> helper;
     return helper;
 }
 
 MediaSessionHelper& MediaSessionHelper::sharedHelper()
 {
-    return sharedHelperInstance();
+    auto& helper = sharedHelperInstance();
+    if (!helper)
+        resetSharedHelper();
+
+    ASSERT(helper);
+    return *helper;
 }
 
 void MediaSessionHelper::resetSharedHelper()
 {
-    sharedHelperInstance() = makeUniqueRef<MediaSessionHelperiOS>();
+    sharedHelperInstance() = makeUnique<MediaSessionHelperiOS>();
 }
 
 void MediaSessionHelper::setSharedHelper(UniqueRef<MediaSessionHelper>&& helper)
 {
-    sharedHelperInstance() = WTFMove(helper);
+    sharedHelperInstance() = helper.moveToUniquePtr();
 }
 
 void MediaSessionHelper::addClient(MediaSessionHelperClient& client)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to