Title: [264604] trunk
Revision
264604
Author
[email protected]
Date
2020-07-20 09:58:12 -0700 (Mon, 20 Jul 2020)

Log Message

GenerateCertificateAsync should be called on signaling thread
https://bugs.webkit.org/show_bug.cgi?id=214447

Reviewed by Geoffrey Garen.

Source/WebCore:

As per debug assert, GenerateCertificateAsync is expected to be called in the signaling thread.
Covered by unskipped test.

* Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:
(WebCore::LibWebRTCCertificateGenerator::generateCertificate):
* platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
(WebCore::LibWebRTCProvider::prepareCertificateGenerator):
We can pass generator to a background thread as it is allocated once and does not get freed.
* platform/mediastream/libwebrtc/LibWebRTCProvider.h:

LayoutTests:

* platform/mac-wk2/TestExpectations:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (264603 => 264604)


--- trunk/LayoutTests/ChangeLog	2020-07-20 16:26:54 UTC (rev 264603)
+++ trunk/LayoutTests/ChangeLog	2020-07-20 16:58:12 UTC (rev 264604)
@@ -1,3 +1,12 @@
+2020-07-20  Youenn Fablet  <[email protected]>
+
+        GenerateCertificateAsync should be called on signaling thread
+        https://bugs.webkit.org/show_bug.cgi?id=214447
+
+        Reviewed by Geoffrey Garen.
+
+        * platform/mac-wk2/TestExpectations:
+
 2020-07-20  Commit Queue  <[email protected]>
 
         Unreviewed, reverting r264596.

Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (264603 => 264604)


--- trunk/LayoutTests/platform/mac-wk2/TestExpectations	2020-07-20 16:26:54 UTC (rev 264603)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations	2020-07-20 16:58:12 UTC (rev 264604)
@@ -1077,6 +1077,5 @@
 webkit.org/b/214478 [ Debug ] storage/indexeddb/structured-clone-private.html [ Skip ]
 webkit.org/b/214478 [ Debug ] storage/indexeddb/structured-clone.html [ Skip ]
 webkit.org/b/214478 [ Debug ] tiled-drawing/scrolling/fast-scroll-iframe-latched-select.html [ Skip ]
-webkit.org/b/214478 [ Debug ] webrtc/certificates-indexeddb.html [ Skip ]
 webkit.org/b/214478 [ Debug ] webrtc/h265.html [ Skip ]
 webkit.org/b/214478 [ Debug ] webrtc/simulcast-h264.html [ Skip ]

Modified: trunk/Source/WebCore/ChangeLog (264603 => 264604)


--- trunk/Source/WebCore/ChangeLog	2020-07-20 16:26:54 UTC (rev 264603)
+++ trunk/Source/WebCore/ChangeLog	2020-07-20 16:58:12 UTC (rev 264604)
@@ -1,3 +1,20 @@
+2020-07-20  Youenn Fablet  <[email protected]>
+
+        GenerateCertificateAsync should be called on signaling thread
+        https://bugs.webkit.org/show_bug.cgi?id=214447
+
+        Reviewed by Geoffrey Garen.
+
+        As per debug assert, GenerateCertificateAsync is expected to be called in the signaling thread.
+        Covered by unskipped test.
+
+        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:
+        (WebCore::LibWebRTCCertificateGenerator::generateCertificate):
+        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
+        (WebCore::LibWebRTCProvider::prepareCertificateGenerator):
+        We can pass generator to a background thread as it is allocated once and does not get freed.
+        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
+
 2020-07-20  Commit Queue  <[email protected]>
 
         Unreviewed, reverting r264596.

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp (264603 => 264604)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp	2020-07-20 16:26:54 UTC (rev 264603)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp	2020-07-20 16:58:12 UTC (rev 264604)
@@ -114,7 +114,9 @@
     if (info.expires)
         expiresMs = static_cast<uint64_t>(*info.expires);
 
-    provider.certificateGenerator().GenerateCertificateAsync(keyParamsFromCertificateType(info), expiresMs, WTFMove(callback));
+    provider.prepareCertificateGenerator([info, expiresMs, callback = WTFMove(callback)](auto& generator) mutable {
+        generator.GenerateCertificateAsync(keyParamsFromCertificateType(info), expiresMs, WTFMove(callback));
+    });
 }
 
 } // namespace LibWebRTCCertificateGenerator

Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp (264603 => 264604)


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp	2020-07-20 16:26:54 UTC (rev 264603)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp	2020-07-20 16:58:12 UTC (rev 264604)
@@ -362,13 +362,16 @@
     return m_factory->CreatePeerConnection(configuration, WTFMove(dependencies));
 }
 
-rtc::RTCCertificateGenerator& LibWebRTCProvider::certificateGenerator()
+void LibWebRTCProvider::prepareCertificateGenerator(Function<void(rtc::RTCCertificateGenerator&)>&& callback)
 {
     auto& factoryAndThreads = getStaticFactoryAndThreads(m_useNetworkThreadWithSocketServer);
     if (!factoryAndThreads.certificateGenerator)
         factoryAndThreads.certificateGenerator = makeUniqueWithoutFastMallocCheck<rtc::RTCCertificateGenerator>(factoryAndThreads.signalingThread.get(), factoryAndThreads.networkThread.get());
 
-    return *factoryAndThreads.certificateGenerator;
+    auto& generator = *factoryAndThreads.certificateGenerator;
+    callOnWebRTCSignalingThread([&generator, callback = WTFMove(callback)]() mutable {
+        callback(generator);
+    });
 }
 
 static inline Optional<cricket::MediaType> typeFromKind(const String& kind)

Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h (264603 => 264604)


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h	2020-07-20 16:26:54 UTC (rev 264603)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h	2020-07-20 16:58:12 UTC (rev 264604)
@@ -111,7 +111,8 @@
     bool isSupportingVP9() const { return m_supportsVP9; }
     virtual void disableNonLocalhostConnections() { m_disableNonLocalhostConnections = true; }
 
-    rtc::RTCCertificateGenerator& certificateGenerator();
+    // Callback is executed on a background thread.
+    void prepareCertificateGenerator(Function<void(rtc::RTCCertificateGenerator&)>&&);
 
     Optional<RTCRtpCapabilities> receiverCapabilities(const String& kind);
     Optional<RTCRtpCapabilities> senderCapabilities(const String& kind);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to