Title: [273347] branches/safari-611-branch
Revision
273347
Author
alanc...@apple.com
Date
2021-02-23 14:51:16 -0800 (Tue, 23 Feb 2021)

Log Message

Cherry-pick r272165. rdar://problem/74032536

    Use user media permission prompt for speech recognition
    https://bugs.webkit.org/show_bug.cgi?id=221082
    rdar://problem/73372499

    Patch by Sihui Liu <sihui_...@appe.com> on 2021-02-01
    Reviewed by Youenn Fablet.

    Source/WebCore:

    Add frame identifier to SpeechRecognitionRequest as it is needed for checking user media permission.

    Updated existing tests for changed behavior.

    * Modules/speech/SpeechRecognition.cpp:
    (WebCore::SpeechRecognition::startRecognition):
    * Modules/speech/SpeechRecognitionConnection.h:
    * Modules/speech/SpeechRecognitionRequest.h:
    (WebCore::SpeechRecognitionRequest::frameIdentifier const):
    * Modules/speech/SpeechRecognitionRequestInfo.h:
    (WebCore::SpeechRecognitionRequestInfo::encode const):
    (WebCore::SpeechRecognitionRequestInfo::decode):
    * page/DummySpeechRecognitionProvider.h:

    Source/WebKit:

    Make SpeechRecognitionPermissionManager ask UserMediaPermissionRequestManagerProxy for user permission on
    microphone.

    * UIProcess/SpeechRecognitionPermissionManager.cpp:
    (WebKit::SpeechRecognitionPermissionManager::request):
    (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
    (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
    * UIProcess/SpeechRecognitionPermissionManager.h:
    * UIProcess/SpeechRecognitionPermissionRequest.h:
    (WebKit::SpeechRecognitionPermissionRequest::create):
    (WebKit::SpeechRecognitionPermissionRequest::frameIdentifier const):
    (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
    * UIProcess/SpeechRecognitionServer.cpp:
    (WebKit::SpeechRecognitionServer::start):
    (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
    * UIProcess/SpeechRecognitionServer.h:
    * UIProcess/SpeechRecognitionServer.messages.in:
    * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
    (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
    (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
    (WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):
    * UIProcess/UserMediaPermissionRequestManagerProxy.h:
    * UIProcess/UserMediaPermissionRequestProxy.cpp:
    (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
    * UIProcess/UserMediaPermissionRequestProxy.h:
    (WebKit::UserMediaPermissionRequestProxy::create):
    (WebKit::UserMediaPermissionRequestProxy::decisionCompletionHandler):
    * UIProcess/WebPageProxy.cpp:
    (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
    (WebKit::WebPageProxy::requestUserMediaPermissionForSpeechRecognition):
    * UIProcess/WebPageProxy.h:
    * UIProcess/WebProcessProxy.cpp:
    (WebKit::WebProcessProxy::createSpeechRecognitionServer):
    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp:
    (WebKit::WebSpeechRecognitionConnection::start):
    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h:

    Tools:

    * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
    (-[SpeechRecognitionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):

    LayoutTests:

    * fast/speechrecognition/permission-error.html:
    * fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt:
    * fast/speechrecognition/start-recognition-in-removed-iframe.html:

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@272165 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-611-branch/LayoutTests/ChangeLog (273346 => 273347)


--- branches/safari-611-branch/LayoutTests/ChangeLog	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/LayoutTests/ChangeLog	2021-02-23 22:51:16 UTC (rev 273347)
@@ -1,5 +1,96 @@
 2021-02-17  Ruben Turcios  <rubent...@apple.com>
 
+        Cherry-pick r272165. rdar://problem/74032536
+
+    Use user media permission prompt for speech recognition
+    https://bugs.webkit.org/show_bug.cgi?id=221082
+    rdar://problem/73372499
+    
+    Patch by Sihui Liu <sihui_...@appe.com> on 2021-02-01
+    Reviewed by Youenn Fablet.
+    
+    Source/WebCore:
+    
+    Add frame identifier to SpeechRecognitionRequest as it is needed for checking user media permission.
+    
+    Updated existing tests for changed behavior.
+    
+    * Modules/speech/SpeechRecognition.cpp:
+    (WebCore::SpeechRecognition::startRecognition):
+    * Modules/speech/SpeechRecognitionConnection.h:
+    * Modules/speech/SpeechRecognitionRequest.h:
+    (WebCore::SpeechRecognitionRequest::frameIdentifier const):
+    * Modules/speech/SpeechRecognitionRequestInfo.h:
+    (WebCore::SpeechRecognitionRequestInfo::encode const):
+    (WebCore::SpeechRecognitionRequestInfo::decode):
+    * page/DummySpeechRecognitionProvider.h:
+    
+    Source/WebKit:
+    
+    Make SpeechRecognitionPermissionManager ask UserMediaPermissionRequestManagerProxy for user permission on
+    microphone.
+    
+    * UIProcess/SpeechRecognitionPermissionManager.cpp:
+    (WebKit::SpeechRecognitionPermissionManager::request):
+    (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+    (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+    * UIProcess/SpeechRecognitionPermissionManager.h:
+    * UIProcess/SpeechRecognitionPermissionRequest.h:
+    (WebKit::SpeechRecognitionPermissionRequest::create):
+    (WebKit::SpeechRecognitionPermissionRequest::frameIdentifier const):
+    (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+    * UIProcess/SpeechRecognitionServer.cpp:
+    (WebKit::SpeechRecognitionServer::start):
+    (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+    * UIProcess/SpeechRecognitionServer.h:
+    * UIProcess/SpeechRecognitionServer.messages.in:
+    * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+    (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
+    (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
+    (WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):
+    * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+    * UIProcess/UserMediaPermissionRequestProxy.cpp:
+    (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
+    * UIProcess/UserMediaPermissionRequestProxy.h:
+    (WebKit::UserMediaPermissionRequestProxy::create):
+    (WebKit::UserMediaPermissionRequestProxy::decisionCompletionHandler):
+    * UIProcess/WebPageProxy.cpp:
+    (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+    (WebKit::WebPageProxy::requestUserMediaPermissionForSpeechRecognition):
+    * UIProcess/WebPageProxy.h:
+    * UIProcess/WebProcessProxy.cpp:
+    (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp:
+    (WebKit::WebSpeechRecognitionConnection::start):
+    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h:
+    
+    Tools:
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+    (-[SpeechRecognitionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
+    
+    LayoutTests:
+    
+    * fast/speechrecognition/permission-error.html:
+    * fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt:
+    * fast/speechrecognition/start-recognition-in-removed-iframe.html:
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@272165 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-02-01  Sihui Liu  <sihui_...@appe.com>
+
+            Use user media permission prompt for speech recognition
+            https://bugs.webkit.org/show_bug.cgi?id=221082
+            rdar://problem/73372499
+
+            Reviewed by Youenn Fablet.
+
+            * fast/speechrecognition/permission-error.html:
+            * fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt:
+            * fast/speechrecognition/start-recognition-in-removed-iframe.html:
+
+2021-02-17  Ruben Turcios  <rubent...@apple.com>
+
         Cherry-pick r272490. rdar://problem/74409784
 
     Add support for aria-sort change notifications.

Modified: branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error.html (273346 => 273347)


--- branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error.html	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error.html	2021-02-23 22:51:16 UTC (rev 273347)
@@ -7,7 +7,7 @@
 
 if (window.testRunner) {
     jsTestIsAsync = true;
-    testRunner.setIsSpeechRecognitionPermissionGranted(false);
+    testRunner.setUserMediaPermission(false);
 }
 
 shouldNotThrow("recognition = new webkitSpeechRecognition()");

Modified: branches/safari-611-branch/LayoutTests/fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt (273346 => 273347)


--- branches/safari-611-branch/LayoutTests/fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/LayoutTests/fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt	2021-02-23 22:51:16 UTC (rev 273347)
@@ -4,7 +4,7 @@
 
 
 PASS iframe.parentNode.removeChild(iframe) did not throw exception.
-PASS iframe.contentWindow.startRecognition() did not throw exception.
+PASS iframe.contentWindow.startRecognition() threw exception UnknownError: Recognition is not in a valid frame.
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: branches/safari-611-branch/LayoutTests/fast/speechrecognition/start-recognition-in-removed-iframe.html (273346 => 273347)


--- branches/safari-611-branch/LayoutTests/fast/speechrecognition/start-recognition-in-removed-iframe.html	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/LayoutTests/fast/speechrecognition/start-recognition-in-removed-iframe.html	2021-02-23 22:51:16 UTC (rev 273347)
@@ -12,7 +12,7 @@
 function test()
 {
     iframe = document.getElementsByTagName('iframe')[0];
-    shouldNotThrow("iframe.contentWindow.startRecognition()");
+    shouldThrow("iframe.contentWindow.startRecognition()");
 }
 
 function removeFrame()

Modified: branches/safari-611-branch/Source/WebCore/ChangeLog (273346 => 273347)


--- branches/safari-611-branch/Source/WebCore/ChangeLog	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebCore/ChangeLog	2021-02-23 22:51:16 UTC (rev 273347)
@@ -1,5 +1,106 @@
 2021-02-17  Ruben Turcios  <rubent...@apple.com>
 
+        Cherry-pick r272165. rdar://problem/74032536
+
+    Use user media permission prompt for speech recognition
+    https://bugs.webkit.org/show_bug.cgi?id=221082
+    rdar://problem/73372499
+    
+    Patch by Sihui Liu <sihui_...@appe.com> on 2021-02-01
+    Reviewed by Youenn Fablet.
+    
+    Source/WebCore:
+    
+    Add frame identifier to SpeechRecognitionRequest as it is needed for checking user media permission.
+    
+    Updated existing tests for changed behavior.
+    
+    * Modules/speech/SpeechRecognition.cpp:
+    (WebCore::SpeechRecognition::startRecognition):
+    * Modules/speech/SpeechRecognitionConnection.h:
+    * Modules/speech/SpeechRecognitionRequest.h:
+    (WebCore::SpeechRecognitionRequest::frameIdentifier const):
+    * Modules/speech/SpeechRecognitionRequestInfo.h:
+    (WebCore::SpeechRecognitionRequestInfo::encode const):
+    (WebCore::SpeechRecognitionRequestInfo::decode):
+    * page/DummySpeechRecognitionProvider.h:
+    
+    Source/WebKit:
+    
+    Make SpeechRecognitionPermissionManager ask UserMediaPermissionRequestManagerProxy for user permission on
+    microphone.
+    
+    * UIProcess/SpeechRecognitionPermissionManager.cpp:
+    (WebKit::SpeechRecognitionPermissionManager::request):
+    (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+    (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+    * UIProcess/SpeechRecognitionPermissionManager.h:
+    * UIProcess/SpeechRecognitionPermissionRequest.h:
+    (WebKit::SpeechRecognitionPermissionRequest::create):
+    (WebKit::SpeechRecognitionPermissionRequest::frameIdentifier const):
+    (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+    * UIProcess/SpeechRecognitionServer.cpp:
+    (WebKit::SpeechRecognitionServer::start):
+    (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+    * UIProcess/SpeechRecognitionServer.h:
+    * UIProcess/SpeechRecognitionServer.messages.in:
+    * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+    (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
+    (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
+    (WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):
+    * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+    * UIProcess/UserMediaPermissionRequestProxy.cpp:
+    (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
+    * UIProcess/UserMediaPermissionRequestProxy.h:
+    (WebKit::UserMediaPermissionRequestProxy::create):
+    (WebKit::UserMediaPermissionRequestProxy::decisionCompletionHandler):
+    * UIProcess/WebPageProxy.cpp:
+    (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+    (WebKit::WebPageProxy::requestUserMediaPermissionForSpeechRecognition):
+    * UIProcess/WebPageProxy.h:
+    * UIProcess/WebProcessProxy.cpp:
+    (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp:
+    (WebKit::WebSpeechRecognitionConnection::start):
+    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h:
+    
+    Tools:
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+    (-[SpeechRecognitionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
+    
+    LayoutTests:
+    
+    * fast/speechrecognition/permission-error.html:
+    * fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt:
+    * fast/speechrecognition/start-recognition-in-removed-iframe.html:
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@272165 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-02-01  Sihui Liu  <sihui_...@appe.com>
+
+            Use user media permission prompt for speech recognition
+            https://bugs.webkit.org/show_bug.cgi?id=221082
+            rdar://problem/73372499
+
+            Reviewed by Youenn Fablet.
+
+            Add frame identifier to SpeechRecognitionRequest as it is needed for checking user media permission.
+
+            Updated existing tests for changed behavior.
+
+            * Modules/speech/SpeechRecognition.cpp:
+            (WebCore::SpeechRecognition::startRecognition):
+            * Modules/speech/SpeechRecognitionConnection.h:
+            * Modules/speech/SpeechRecognitionRequest.h:
+            (WebCore::SpeechRecognitionRequest::frameIdentifier const):
+            * Modules/speech/SpeechRecognitionRequestInfo.h:
+            (WebCore::SpeechRecognitionRequestInfo::encode const):
+            (WebCore::SpeechRecognitionRequestInfo::decode):
+            * page/DummySpeechRecognitionProvider.h:
+
+2021-02-17  Ruben Turcios  <rubent...@apple.com>
+
         Cherry-pick r271636. rdar://problem/74452635
 
     Update media state for active speech recognition as it uses audio capture

Modified: branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognition.cpp (273346 => 273347)


--- branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognition.cpp	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognition.cpp	2021-02-23 22:51:16 UTC (rev 273347)
@@ -71,7 +71,13 @@
         return Exception { UnknownError, "Recognition does not have a valid connection"_s };
 
     auto& document = downcast<Document>(*scriptExecutionContext());
-    m_connection->start(identifier(), m_lang, m_continuous, m_interimResults, m_maxAlternatives, ClientOrigin { document.topOrigin().data(), document.securityOrigin().data() });
+    auto* frame = document.frame();
+    if (!frame)
+        return Exception { UnknownError, "Recognition is not in a valid frame"_s };
+
+    auto optionalFrameIdentifier = document.frameID();
+    auto frameIdentifier = optionalFrameIdentifier ? *optionalFrameIdentifier : FrameIdentifier { };
+    m_connection->start(identifier(), m_lang, m_continuous, m_interimResults, m_maxAlternatives, ClientOrigin { document.topOrigin().data(), document.securityOrigin().data() }, frameIdentifier);
     m_state = State::Starting;
     return { };
 }

Modified: branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionConnection.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionConnection.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionConnection.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include "FrameIdentifier.h"
 #include "SpeechRecognitionConnectionClientIdentifier.h"
 
 namespace WebCore {
@@ -38,7 +39,7 @@
     virtual ~SpeechRecognitionConnection() { }
     virtual void registerClient(SpeechRecognitionConnectionClient&) = 0;
     virtual void unregisterClient(SpeechRecognitionConnectionClient&) = 0;
-    virtual void start(SpeechRecognitionConnectionClientIdentifier, const String& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, ClientOrigin&&) = 0;
+    virtual void start(SpeechRecognitionConnectionClientIdentifier, const String& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, ClientOrigin&&, FrameIdentifier) = 0;
     virtual void stop(SpeechRecognitionConnectionClientIdentifier) = 0;
     virtual void abort(SpeechRecognitionConnectionClientIdentifier) = 0;
     virtual void didReceiveUpdate(SpeechRecognitionUpdate&&) = 0;

Modified: branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionRequest.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionRequest.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionRequest.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -41,6 +41,7 @@
     bool interimResults() const { return m_info.interimResults; }
     uint64_t maxAlternatives() const { return m_info.maxAlternatives; }
     const ClientOrigin clientOrigin() const { return m_info.clientOrigin; }
+    FrameIdentifier frameIdentifier() const { return m_info.frameIdentifier; }
 
 private:
     SpeechRecognitionRequestInfo m_info;

Modified: branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionRequestInfo.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionRequestInfo.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebCore/Modules/speech/SpeechRecognitionRequestInfo.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -26,6 +26,7 @@
 #pragma once
 
 #include "ClientOrigin.h"
+#include "FrameIdentifier.h"
 #include "SpeechRecognitionConnectionClientIdentifier.h"
 
 namespace WebCore {
@@ -37,6 +38,7 @@
     bool interimResults { false };
     uint64_t maxAlternatives { 1 };
     ClientOrigin clientOrigin;
+    FrameIdentifier frameIdentifier;
 
     template<class Encoder> void encode(Encoder&) const;
     template<class Decoder> static Optional<SpeechRecognitionRequestInfo> decode(Decoder&);
@@ -45,7 +47,7 @@
 template<class Encoder>
 void SpeechRecognitionRequestInfo::encode(Encoder& encoder) const
 {
-    encoder << clientIdentifier << lang << continuous << interimResults << maxAlternatives << clientOrigin;
+    encoder << clientIdentifier << lang << continuous << interimResults << maxAlternatives << clientOrigin << frameIdentifier;
 }
 
 template<class Decoder>
@@ -81,6 +83,11 @@
     if (!clientOrigin)
         return WTF::nullopt;
 
+    Optional<FrameIdentifier> frameIdentifier;
+    decoder >> frameIdentifier;
+    if (!frameIdentifier)
+        return WTF::nullopt;
+
     return {{
         WTFMove(*clientIdentifier),
         WTFMove(*lang),
@@ -87,7 +94,8 @@
         WTFMove(*continuous),
         WTFMove(*interimResults),
         WTFMove(*maxAlternatives),
-        WTFMove(*clientOrigin)
+        WTFMove(*clientOrigin),
+        WTFMove(*frameIdentifier)
     }};
 }
 

Modified: branches/safari-611-branch/Source/WebCore/page/DummySpeechRecognitionProvider.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebCore/page/DummySpeechRecognitionProvider.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebCore/page/DummySpeechRecognitionProvider.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -40,7 +40,7 @@
         }
         void registerClient(SpeechRecognitionConnectionClient&) final { }
         void unregisterClient(SpeechRecognitionConnectionClient&) final { }
-        void start(SpeechRecognitionConnectionClientIdentifier, const String&, bool, bool, uint64_t, ClientOrigin&&) final { }
+        void start(SpeechRecognitionConnectionClientIdentifier, const String&, bool, bool, uint64_t, ClientOrigin&&, FrameIdentifier) final { }
         void stop(SpeechRecognitionConnectionClientIdentifier) final { }
         void abort(SpeechRecognitionConnectionClientIdentifier) final { }
         void didReceiveUpdate(SpeechRecognitionUpdate&&) final { }

Modified: branches/safari-611-branch/Source/WebKit/ChangeLog (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/ChangeLog	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/ChangeLog	2021-02-23 22:51:16 UTC (rev 273347)
@@ -1,5 +1,129 @@
 2021-02-17  Ruben Turcios  <rubent...@apple.com>
 
+        Cherry-pick r272165. rdar://problem/74032536
+
+    Use user media permission prompt for speech recognition
+    https://bugs.webkit.org/show_bug.cgi?id=221082
+    rdar://problem/73372499
+    
+    Patch by Sihui Liu <sihui_...@appe.com> on 2021-02-01
+    Reviewed by Youenn Fablet.
+    
+    Source/WebCore:
+    
+    Add frame identifier to SpeechRecognitionRequest as it is needed for checking user media permission.
+    
+    Updated existing tests for changed behavior.
+    
+    * Modules/speech/SpeechRecognition.cpp:
+    (WebCore::SpeechRecognition::startRecognition):
+    * Modules/speech/SpeechRecognitionConnection.h:
+    * Modules/speech/SpeechRecognitionRequest.h:
+    (WebCore::SpeechRecognitionRequest::frameIdentifier const):
+    * Modules/speech/SpeechRecognitionRequestInfo.h:
+    (WebCore::SpeechRecognitionRequestInfo::encode const):
+    (WebCore::SpeechRecognitionRequestInfo::decode):
+    * page/DummySpeechRecognitionProvider.h:
+    
+    Source/WebKit:
+    
+    Make SpeechRecognitionPermissionManager ask UserMediaPermissionRequestManagerProxy for user permission on
+    microphone.
+    
+    * UIProcess/SpeechRecognitionPermissionManager.cpp:
+    (WebKit::SpeechRecognitionPermissionManager::request):
+    (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+    (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+    * UIProcess/SpeechRecognitionPermissionManager.h:
+    * UIProcess/SpeechRecognitionPermissionRequest.h:
+    (WebKit::SpeechRecognitionPermissionRequest::create):
+    (WebKit::SpeechRecognitionPermissionRequest::frameIdentifier const):
+    (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+    * UIProcess/SpeechRecognitionServer.cpp:
+    (WebKit::SpeechRecognitionServer::start):
+    (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+    * UIProcess/SpeechRecognitionServer.h:
+    * UIProcess/SpeechRecognitionServer.messages.in:
+    * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+    (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
+    (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
+    (WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):
+    * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+    * UIProcess/UserMediaPermissionRequestProxy.cpp:
+    (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
+    * UIProcess/UserMediaPermissionRequestProxy.h:
+    (WebKit::UserMediaPermissionRequestProxy::create):
+    (WebKit::UserMediaPermissionRequestProxy::decisionCompletionHandler):
+    * UIProcess/WebPageProxy.cpp:
+    (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+    (WebKit::WebPageProxy::requestUserMediaPermissionForSpeechRecognition):
+    * UIProcess/WebPageProxy.h:
+    * UIProcess/WebProcessProxy.cpp:
+    (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp:
+    (WebKit::WebSpeechRecognitionConnection::start):
+    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h:
+    
+    Tools:
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+    (-[SpeechRecognitionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
+    
+    LayoutTests:
+    
+    * fast/speechrecognition/permission-error.html:
+    * fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt:
+    * fast/speechrecognition/start-recognition-in-removed-iframe.html:
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@272165 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-02-01  Sihui Liu  <sihui_...@appe.com>
+
+            Use user media permission prompt for speech recognition
+            https://bugs.webkit.org/show_bug.cgi?id=221082
+            rdar://problem/73372499
+
+            Reviewed by Youenn Fablet.
+
+            Make SpeechRecognitionPermissionManager ask UserMediaPermissionRequestManagerProxy for user permission on
+            microphone.
+
+            * UIProcess/SpeechRecognitionPermissionManager.cpp:
+            (WebKit::SpeechRecognitionPermissionManager::request):
+            (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+            (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+            * UIProcess/SpeechRecognitionPermissionManager.h:
+            * UIProcess/SpeechRecognitionPermissionRequest.h:
+            (WebKit::SpeechRecognitionPermissionRequest::create):
+            (WebKit::SpeechRecognitionPermissionRequest::frameIdentifier const):
+            (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+            * UIProcess/SpeechRecognitionServer.cpp:
+            (WebKit::SpeechRecognitionServer::start):
+            (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+            * UIProcess/SpeechRecognitionServer.h:
+            * UIProcess/SpeechRecognitionServer.messages.in:
+            * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+            (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
+            (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
+            (WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):
+            * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+            * UIProcess/UserMediaPermissionRequestProxy.cpp:
+            (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
+            * UIProcess/UserMediaPermissionRequestProxy.h:
+            (WebKit::UserMediaPermissionRequestProxy::create):
+            (WebKit::UserMediaPermissionRequestProxy::decisionCompletionHandler):
+            * UIProcess/WebPageProxy.cpp:
+            (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+            (WebKit::WebPageProxy::requestUserMediaPermissionForSpeechRecognition):
+            * UIProcess/WebPageProxy.h:
+            * UIProcess/WebProcessProxy.cpp:
+            (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+            * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp:
+            (WebKit::WebSpeechRecognitionConnection::start):
+            * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h:
+
+2021-02-17  Ruben Turcios  <rubent...@apple.com>
+
         Cherry-pick r271636. rdar://problem/74452635
 
     Update media state for active speech recognition as it uses audio capture

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.cpp (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.cpp	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.cpp	2021-02-23 22:51:16 UTC (rev 273347)
@@ -75,9 +75,9 @@
         request->complete(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "Permission manager has exited"_s });
 }
     
-void SpeechRecognitionPermissionManager::request(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(Optional<SpeechRecognitionError>&&)>&& completiontHandler)
+void SpeechRecognitionPermissionManager::request(const String& lang, const WebCore::ClientOrigin& origin, WebCore::FrameIdentifier frameIdentifier, SpeechRecognitionPermissionRequestCallback&& completiontHandler)
 {
-    m_requests.append(SpeechRecognitionPermissionRequest::create(lang, origin, WTFMove(completiontHandler)));
+    m_requests.append(SpeechRecognitionPermissionRequest::create(lang, origin, frameIdentifier, WTFMove(completiontHandler)));
     if (m_requests.size() == 1)
         startNextRequest();
 }
@@ -125,15 +125,6 @@
 #endif
     }
 
-    // We currently don't allow third-party access.
-    if (m_userPermissionCheck == CheckResult::Unknown) {
-        auto clientOrigin = m_requests.first()->origin();
-        auto requestingOrigin = clientOrigin.clientOrigin.securityOrigin();
-        auto topOrigin = clientOrigin.topOrigin.securityOrigin();
-        if (!requestingOrigin->isSameOriginAs(topOrigin))
-            m_userPermissionCheck = CheckResult::Denied;
-    }
-
     if (m_userPermissionCheck == CheckResult::Denied) {
         completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "User permission check has failed"_s });
         return;
@@ -225,6 +216,7 @@
 
     auto& currentRequest = m_requests.first();
     auto clientOrigin = currentRequest->origin();
+    auto requestingOrigin = clientOrigin.clientOrigin.securityOrigin();
     auto topOrigin = clientOrigin.topOrigin.securityOrigin();
     auto decisionHandler = [this, weakThis = makeWeakPtr(*this)](bool granted) {
         if (!weakThis)
@@ -238,7 +230,7 @@
 
         continueProcessingRequest();
     };
-    m_page.uiClient().decidePolicyForSpeechRecognitionPermissionRequest(m_page, API::SecurityOrigin::create(topOrigin.get()).get(), WTFMove(decisionHandler));
+    m_page.requestUserMediaPermissionForSpeechRecognition(currentRequest->frameIdentifier(), requestingOrigin, topOrigin, WTFMove(decisionHandler));
 }
 
 void SpeechRecognitionPermissionManager::decideByDefaultAction(const WebCore::SecurityOrigin& origin, CompletionHandler<void(bool)>&& completionHandler)

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -39,7 +39,7 @@
     enum class CheckResult { Denied, Granted, Unknown };
     explicit SpeechRecognitionPermissionManager(WebPageProxy&);
     ~SpeechRecognitionPermissionManager();
-    void request(const String& lang, const WebCore::ClientOrigin&, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&&);
+    void request(const String& lang, const WebCore::ClientOrigin&, WebCore::FrameIdentifier, SpeechRecognitionPermissionRequestCallback&&);
 
     void decideByDefaultAction(const WebCore::SecurityOrigin&, CompletionHandler<void(bool)>&&);
     WebPageProxy& page() { return m_page; }

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionRequest.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionRequest.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionRequest.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -27,16 +27,19 @@
 
 #include "APIObject.h"
 #include <WebCore/ClientOrigin.h>
+#include <WebCore/FrameIdentifier.h>
 #include <WebCore/SpeechRecognitionError.h>
 #include <wtf/CompletionHandler.h>
 
 namespace WebKit {
 
+using SpeechRecognitionPermissionRequestCallback = CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>;
+
 class SpeechRecognitionPermissionRequest : public RefCounted<SpeechRecognitionPermissionRequest> {
 public:
-    static Ref<SpeechRecognitionPermissionRequest> create(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&& completionHandler)
+    static Ref<SpeechRecognitionPermissionRequest> create(const String& lang, const WebCore::ClientOrigin& origin, WebCore::FrameIdentifier frameIdentifier, SpeechRecognitionPermissionRequestCallback&& completionHandler)
     {
-        return adoptRef(*new SpeechRecognitionPermissionRequest(lang, origin, WTFMove(completionHandler)));
+        return adoptRef(*new SpeechRecognitionPermissionRequest(lang, origin, frameIdentifier, WTFMove(completionHandler)));
     }
 
     void complete(Optional<WebCore::SpeechRecognitionError>&& error)
@@ -47,17 +50,20 @@
 
     const WebCore::ClientOrigin& origin() const { return m_origin; }
     const String& lang() const { return m_lang; }
+    WebCore::FrameIdentifier frameIdentifier() const { return m_frameIdentifier; }
 
 private:
-    SpeechRecognitionPermissionRequest(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&& completionHandler)
+    SpeechRecognitionPermissionRequest(const String& lang, const WebCore::ClientOrigin& origin, WebCore::FrameIdentifier frameIdentifier, SpeechRecognitionPermissionRequestCallback&& completionHandler)
         : m_lang(lang)
         , m_origin(origin)
+        , m_frameIdentifier(frameIdentifier)
         , m_completionHandler(WTFMove(completionHandler))
     { }
 
     String m_lang;
     WebCore::ClientOrigin m_origin;
-    CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)> m_completionHandler;
+    WebCore::FrameIdentifier m_frameIdentifier;
+    SpeechRecognitionPermissionRequestCallback m_completionHandler;
 };
 
 class SpeechRecognitionPermissionCallback : public API::ObjectImpl<API::Object::Type::SpeechRecognitionPermissionCallback> {

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.cpp (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.cpp	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.cpp	2021-02-23 22:51:16 UTC (rev 273347)
@@ -26,7 +26,6 @@
 #include "config.h"
 #include "SpeechRecognitionServer.h"
 
-#include "SpeechRecognitionPermissionRequest.h"
 #include "UserMediaProcessManager.h"
 #include "WebProcessProxy.h"
 #include "WebSpeechRecognitionConnectionMessages.h"
@@ -52,11 +51,11 @@
 {
 }
 
-void SpeechRecognitionServer::start(WebCore::SpeechRecognitionConnectionClientIdentifier clientIdentifier, String&& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, WebCore::ClientOrigin&& origin)
+void SpeechRecognitionServer::start(WebCore::SpeechRecognitionConnectionClientIdentifier clientIdentifier, String&& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, WebCore::ClientOrigin&& origin, WebCore::FrameIdentifier frameIdentifier)
 {
     MESSAGE_CHECK(clientIdentifier);
     ASSERT(!m_requests.contains(clientIdentifier));
-    auto requestInfo = WebCore::SpeechRecognitionRequestInfo { clientIdentifier, WTFMove(lang), continuous, interimResults, maxAlternatives, WTFMove(origin) };
+    auto requestInfo = WebCore::SpeechRecognitionRequestInfo { clientIdentifier, WTFMove(lang), continuous, interimResults, maxAlternatives, WTFMove(origin), frameIdentifier };
     auto& newRequest = m_requests.add(clientIdentifier, makeUnique<WebCore::SpeechRecognitionRequest>(WTFMove(requestInfo))).iterator->value;
 
     requestPermissionForRequest(*newRequest);
@@ -64,7 +63,7 @@
 
 void SpeechRecognitionServer::requestPermissionForRequest(WebCore::SpeechRecognitionRequest& request)
 {
-    m_permissionChecker(request.lang(), request.clientOrigin(), [this, weakThis = makeWeakPtr(this), weakRequest = makeWeakPtr(request)](auto error) mutable {
+    m_permissionChecker(request.lang(), request.clientOrigin(), request.frameIdentifier(), [this, weakThis = makeWeakPtr(this), weakRequest = makeWeakPtr(request)](auto error) mutable {
         if (!weakThis)
             return;
 

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -27,6 +27,7 @@
 
 #include "MessageReceiver.h"
 #include "MessageSender.h"
+#include "SpeechRecognitionPermissionRequest.h"
 #include <WebCore/PageIdentifier.h>
 #include <WebCore/SpeechRecognitionError.h>
 #include <WebCore/SpeechRecognitionRequest.h>
@@ -45,7 +46,7 @@
 class WebProcessProxy;
 
 using SpeechRecognitionServerIdentifier = WebCore::PageIdentifier;
-using SpeechRecognitionPermissionChecker = Function<void(const String&, const WebCore::ClientOrigin&, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&&)>;
+using SpeechRecognitionPermissionChecker = Function<void(const String&, const WebCore::ClientOrigin&, WebCore::FrameIdentifier, SpeechRecognitionPermissionRequestCallback&&)>;
 using SpeechRecognitionCheckIfMockSpeechRecognitionEnabled = Function<bool()>;
 
 class SpeechRecognitionServer : public CanMakeWeakPtr<SpeechRecognitionServer>, public IPC::MessageReceiver, private IPC::MessageSender {
@@ -58,7 +59,7 @@
     SpeechRecognitionServer(Ref<IPC::Connection>&&, SpeechRecognitionServerIdentifier, SpeechRecognitionPermissionChecker&&, SpeechRecognitionCheckIfMockSpeechRecognitionEnabled&&);
 #endif
 
-    void start(WebCore::SpeechRecognitionConnectionClientIdentifier, String&& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, WebCore::ClientOrigin&&);
+    void start(WebCore::SpeechRecognitionConnectionClientIdentifier, String&& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, WebCore::ClientOrigin&&, WebCore::FrameIdentifier);
     void stop(WebCore::SpeechRecognitionConnectionClientIdentifier);
     void abort(WebCore::SpeechRecognitionConnectionClientIdentifier);
     void invalidate(WebCore::SpeechRecognitionConnectionClientIdentifier);

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.messages.in (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.messages.in	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.messages.in	2021-02-23 22:51:16 UTC (rev 273347)
@@ -24,7 +24,7 @@
  */
  
  messages -> SpeechRecognitionServer NotRefCounted {
-    Start(WebCore::SpeechRecognitionConnectionClientIdentifier identifier, String lang, bool continuous, bool interimResults, uint64_t maxAlternatives, struct WebCore::ClientOrigin origin)
+    Start(WebCore::SpeechRecognitionConnectionClientIdentifier identifier, String lang, bool continuous, bool interimResults, uint64_t maxAlternatives, struct WebCore::ClientOrigin origin, WebCore::FrameIdentifier frameIdentifier)
     Stop(WebCore::SpeechRecognitionConnectionClientIdentifier identifier)
     Abort(WebCore::SpeechRecognitionConnectionClientIdentifier identifier)
     Invalidate(WebCore::SpeechRecognitionConnectionClientIdentifier identifier)

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2021-02-23 22:51:16 UTC (rev 273347)
@@ -213,6 +213,11 @@
     if (reason == UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::PermissionDenied)
         m_deniedRequests.append(DeniedRequest { request.mainFrameID(), request.userMediaDocumentSecurityOrigin(), request.topLevelDocumentSecurityOrigin(), request.requiresAudioCapture(), request.requiresVideoCapture(), request.requiresDisplayCapture() });
 
+    if (auto callback = request.decisionCompletionHandler()) {
+        callback(false);
+        return;
+    }
+
 #if ENABLE(MEDIA_STREAM)
     if (m_pregrantedRequests.isEmpty() && request.userRequest().audioConstraints.isValid)
         RealtimeMediaSourceCenter::singleton().audioCaptureFactory().removeExtensiveObserver(*this);
@@ -234,6 +239,12 @@
 #if ENABLE(MEDIA_STREAM)
     ALWAYS_LOG(LOGIDENTIFIER, request.userMediaID(), ", video: ", request.videoDevice().label(), ", audio: ", request.audioDevice().label());
 
+    if (auto callback = request.decisionCompletionHandler()) {
+        m_grantedRequests.append(makeRef(request));
+        callback(true);
+        return;
+    }
+
     auto& userMediaDocumentSecurityOrigin = request.userMediaDocumentSecurityOrigin();
     auto& topLevelDocumentSecurityOrigin = request.topLevelDocumentSecurityOrigin();
     m_page.websiteDataStore().deviceIdHashSaltStorage().deviceIdHashSaltForOrigin(userMediaDocumentSecurityOrigin, topLevelDocumentSecurityOrigin, [this, weakThis = makeWeakPtr(*this), request = makeRef(request)](String&&) mutable {
@@ -597,6 +608,33 @@
     m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *webFrame, WTFMove(userMediaOrigin), WTFMove(topLevelOrigin), *m_currentUserMediaRequest);
 }
 
+void UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition(WebCore::FrameIdentifier frameIdentifier, const WebCore::SecurityOrigin& requestingOrigin, const WebCore::SecurityOrigin& topOrigin, const WebCore::CaptureDevice& device, CompletionHandler<void(bool)>&& completionHandler)
+{
+    auto* frame = m_page.process().webFrame(frameIdentifier);
+    if (!frame || !SecurityOrigin::createFromString(m_page.pageLoadState().activeURL())->isSameSchemeHostPort(topOrigin)) {
+        completionHandler(false);
+        return;
+    }
+
+    auto request = UserMediaPermissionRequestProxy::create(*this, 0, frameIdentifier, frameIdentifier, requestingOrigin.isolatedCopy(), topOrigin.isolatedCopy(), Vector<WebCore::CaptureDevice> { device }, { }, { }, WTFMove(completionHandler));
+
+    auto action = ""
+    if (action == RequestAction::Deny) {
+        completionHandler(false);
+        return;
+    }
+    
+    if (action == RequestAction::Grant) {
+        completionHandler(true);
+        return;
+    }
+
+    auto apiRequestingOrigin = API::SecurityOrigin::create(requestingOrigin);
+    auto apiTopOrigin = API::SecurityOrigin::create(topOrigin);
+    m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *frame, WTFMove(apiRequestingOrigin), WTFMove(apiTopOrigin), request.get());
+}
+
+
 #if !PLATFORM(COCOA)
 void UserMediaPermissionRequestManagerProxy::requestSystemValidation(const WebPageProxy&, UserMediaPermissionRequestProxy&, CompletionHandler<void(bool)>&& callback)
 {

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -96,6 +96,8 @@
     void setMockCaptureDevicesEnabledOverride(Optional<bool>);
     bool hasPendingCapture() const { return m_hasPendingCapture; }
 
+    void checkUserMediaPermissionForSpeechRecognition(WebCore::FrameIdentifier, const WebCore::SecurityOrigin&, const WebCore::SecurityOrigin&, const WebCore::CaptureDevice&, CompletionHandler<void(bool)>&&);
+
 private:
 #if !RELEASE_LOG_DISABLED
     const Logger& logger() const final;

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.cpp (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.cpp	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.cpp	2021-02-23 22:51:16 UTC (rev 273347)
@@ -31,7 +31,7 @@
 namespace WebKit {
 using namespace WebCore;
 
-UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, FrameIdentifier mainFrameID, FrameIdentifier frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, WebCore::MediaStreamRequest&& request)
+UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, FrameIdentifier mainFrameID, FrameIdentifier frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, WebCore::MediaStreamRequest&& request, CompletionHandler<void(bool)>&& decisionCompletionHandler)
     : m_manager(&manager)
     , m_userMediaID(userMediaID)
     , m_mainFrameID(mainFrameID)
@@ -41,6 +41,7 @@
     , m_eligibleVideoDevices(WTFMove(videoDevices))
     , m_eligibleAudioDevices(WTFMove(audioDevices))
     , m_request(WTFMove(request))
+    , m_decisionCompletionHandler(WTFMove(decisionCompletionHandler))
 {
 }
 
@@ -99,6 +100,8 @@
 void UserMediaPermissionRequestProxy::invalidate()
 {
     m_manager = nullptr;
+    if (m_decisionCompletionHandler)
+        m_decisionCompletionHandler(false);
 }
 
 Vector<String> UserMediaPermissionRequestProxy::videoDeviceUIDs() const

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -23,6 +23,7 @@
 #include <WebCore/CaptureDevice.h>
 #include <WebCore/FrameIdentifier.h>
 #include <WebCore/MediaStreamRequest.h>
+#include <wtf/CompletionHandler.h>
 #include <wtf/Vector.h>
 #include <wtf/text/WTFString.h>
 
@@ -36,9 +37,9 @@
 
 class UserMediaPermissionRequestProxy : public API::ObjectImpl<API::Object::Type::UserMediaPermissionRequest> {
 public:
-    static Ref<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, WebCore::FrameIdentifier mainFrameID, WebCore::FrameIdentifier frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, WebCore::MediaStreamRequest&& request)
+    static Ref<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, WebCore::FrameIdentifier mainFrameID, WebCore::FrameIdentifier frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, WebCore::MediaStreamRequest&& request, CompletionHandler<void(bool)>&& decisionCompletionHandler = { })
     {
-        return adoptRef(*new UserMediaPermissionRequestProxy(manager, userMediaID, mainFrameID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDevices), WTFMove(videoDevices), WTFMove(request)));
+        return adoptRef(*new UserMediaPermissionRequestProxy(manager, userMediaID, mainFrameID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDevices), WTFMove(videoDevices), WTFMove(request), WTFMove(decisionCompletionHandler)));
     }
 
     void allow(const String& audioDeviceUID, const String& videoDeviceUID);
@@ -89,8 +90,10 @@
 #endif
     void doDefaultAction();
 
+    CompletionHandler<void(bool)> decisionCompletionHandler() { return std::exchange(m_decisionCompletionHandler, { }); }
+
 private:
-    UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, WebCore::FrameIdentifier mainFrameID, WebCore::FrameIdentifier, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, WebCore::MediaStreamRequest&&);
+    UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, WebCore::FrameIdentifier mainFrameID, WebCore::FrameIdentifier, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, WebCore::MediaStreamRequest&&, CompletionHandler<void(bool)>&&);
 
     UserMediaPermissionRequestManagerProxy* m_manager;
     uint64_t m_userMediaID;
@@ -103,6 +106,7 @@
     WebCore::MediaStreamRequest m_request;
     bool m_hasPersistentAccess { false };
     String m_deviceIdentifierHashSalt;
+    CompletionHandler<void(bool)> m_decisionCompletionHandler;
 };
 
 String convertEnumerationToString(UserMediaPermissionRequestProxy::UserMediaAccessDenialReason);

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.cpp (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-02-23 22:51:16 UTC (rev 273347)
@@ -10295,12 +10295,12 @@
     });
 }
 
-void WebPageProxy::requestSpeechRecognitionPermission(const String& lang, const WebCore::ClientOrigin& clientOrigin, CompletionHandler<void(Optional<SpeechRecognitionError>&&)>&& completionHandler)
+void WebPageProxy::requestSpeechRecognitionPermission(const String& lang, const WebCore::ClientOrigin& clientOrigin, WebCore::FrameIdentifier frameIdentifier, CompletionHandler<void(Optional<SpeechRecognitionError>&&)>&& completionHandler)
 {
     if (!m_speechRecognitionPermissionManager)
         m_speechRecognitionPermissionManager = makeUnique<SpeechRecognitionPermissionManager>(*this);
 
-    m_speechRecognitionPermissionManager->request(lang, clientOrigin, WTFMove(completionHandler));
+    m_speechRecognitionPermissionManager->request(lang, clientOrigin, frameIdentifier, WTFMove(completionHandler));
 }
 
 void WebPageProxy::requestSpeechRecognitionPermissionByDefaultAction(const WebCore::SecurityOrigin& origin, CompletionHandler<void(bool)>&& completionHandler)
@@ -10313,8 +10313,21 @@
     m_speechRecognitionPermissionManager->decideByDefaultAction(origin, WTFMove(completionHandler));
 }
 
+void WebPageProxy::requestUserMediaPermissionForSpeechRecognition(FrameIdentifier frameIdentifier, const WebCore::SecurityOrigin& requestingOrigin, const WebCore::SecurityOrigin& topOrigin, CompletionHandler<void(bool)>&& completionHandler)
+{
 #if ENABLE(MEDIA_STREAM)
+    auto captureDevice = SpeechRecognitionCaptureSource::findCaptureDevice();
+    if (!captureDevice)
+        completionHandler(false);
 
+    userMediaPermissionRequestManager().checkUserMediaPermissionForSpeechRecognition(frameIdentifier, requestingOrigin, topOrigin, *captureDevice, WTFMove(completionHandler));
+#else
+    completionHandler(false);
+#endif
+}
+
+#if ENABLE(MEDIA_STREAM)
+
 WebCore::CaptureSourceOrError WebPageProxy::createRealtimeMediaSourceForSpeechRecognition()
 {
     if (preferences().captureAudioInGPUProcessEnabled())

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -52,6 +52,7 @@
 #include "SandboxExtension.h"
 #include "ShareableBitmap.h"
 #include "ShareableResource.h"
+#include "SpeechRecognitionPermissionRequest.h"
 #include "SuspendedPageProxy.h"
 #include "SyntheticEditingCommandType.h"
 #include "SystemPreviewController.h"
@@ -1812,8 +1813,9 @@
     void setMediaCaptureReportingDelay(Seconds captureReportingDelay) { m_mediaCaptureReportingDelay = captureReportingDelay; }
     size_t suspendMediaPlaybackCounter() { return m_suspendMediaPlaybackCounter; }
 
-    void requestSpeechRecognitionPermission(const String& lang, const WebCore::ClientOrigin&, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&&);
+    void requestSpeechRecognitionPermission(const String& lang, const WebCore::ClientOrigin&, WebCore::FrameIdentifier, SpeechRecognitionPermissionRequestCallback&&);
     void requestSpeechRecognitionPermissionByDefaultAction(const WebCore::SecurityOrigin&, CompletionHandler<void(bool)>&&);
+    void requestUserMediaPermissionForSpeechRecognition(WebCore::FrameIdentifier, const WebCore::SecurityOrigin&, const WebCore::SecurityOrigin&, CompletionHandler<void(bool)>&&);
 
     void syncIfMockDevicesEnabledChanged();
 

Modified: branches/safari-611-branch/Source/WebKit/UIProcess/WebProcessProxy.cpp (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/UIProcess/WebProcessProxy.cpp	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/WebProcessProxy.cpp	2021-02-23 22:51:16 UTC (rev 273347)
@@ -1728,13 +1728,13 @@
 
     ASSERT(!m_speechRecognitionServerMap.contains(identifier));
     auto& speechRecognitionServer = m_speechRecognitionServerMap.add(identifier, nullptr).iterator->value;
-    auto permissionChecker = [weakPage = makeWeakPtr(targetPage)](auto& lang, auto& origin, auto&& completionHandler) mutable {
+    auto permissionChecker = [weakPage = makeWeakPtr(targetPage)](auto& lang, auto& origin, auto frameIdentifier, auto&& completionHandler) mutable {
         if (!weakPage) {
             completionHandler(WebCore::SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "Page no longer exists"_s });
             return;
         }
 
-        weakPage->requestSpeechRecognitionPermission(lang, origin, WTFMove(completionHandler));
+        weakPage->requestSpeechRecognitionPermission(lang, origin, frameIdentifier, WTFMove(completionHandler));
     };
     auto checkIfMockCaptureDevicesEnabled = [weakPage = makeWeakPtr(targetPage)]() {
         return weakPage && weakPage->preferences().mockCaptureDevicesEnabled();

Modified: branches/safari-611-branch/Source/WebKit/WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp	2021-02-23 22:51:16 UTC (rev 273347)
@@ -27,6 +27,7 @@
 #include "WebSpeechRecognitionConnection.h"
 
 #include "SpeechRecognitionServerMessages.h"
+#include "WebFrame.h"
 #include "WebProcess.h"
 #include "WebProcessProxyMessages.h"
 #include "WebSpeechRecognitionConnectionMessages.h"
@@ -68,9 +69,9 @@
     m_clientMap.remove(client.identifier());
 }
 
-void WebSpeechRecognitionConnection::start(WebCore::SpeechRecognitionConnectionClientIdentifier clientIdentifier, const String& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, WebCore::ClientOrigin&& clientOrigin)
+void WebSpeechRecognitionConnection::start(WebCore::SpeechRecognitionConnectionClientIdentifier clientIdentifier, const String& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, WebCore::ClientOrigin&& clientOrigin, WebCore::FrameIdentifier frameIdentifier)
 {
-    send(Messages::SpeechRecognitionServer::Start(clientIdentifier, lang, continuous, interimResults, maxAlternatives, WTFMove(clientOrigin)));
+    send(Messages::SpeechRecognitionServer::Start(clientIdentifier, lang, continuous, interimResults, maxAlternatives, WTFMove(clientOrigin), frameIdentifier));
 }
 
 void WebSpeechRecognitionConnection::stop(WebCore::SpeechRecognitionConnectionClientIdentifier clientIdentifier)

Modified: branches/safari-611-branch/Source/WebKit/WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h (273346 => 273347)


--- branches/safari-611-branch/Source/WebKit/WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Source/WebKit/WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h	2021-02-23 22:51:16 UTC (rev 273347)
@@ -47,7 +47,7 @@
 public:
     static Ref<WebSpeechRecognitionConnection> create(SpeechRecognitionConnectionIdentifier);
 
-    void start(WebCore::SpeechRecognitionConnectionClientIdentifier, const String& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, WebCore::ClientOrigin&&) final;
+    void start(WebCore::SpeechRecognitionConnectionClientIdentifier, const String& lang, bool continuous, bool interimResults, uint64_t maxAlternatives, WebCore::ClientOrigin&&, WebCore::FrameIdentifier) final;
     void stop(WebCore::SpeechRecognitionConnectionClientIdentifier) final;
     void abort(WebCore::SpeechRecognitionConnectionClientIdentifier) final;
 

Modified: branches/safari-611-branch/Tools/ChangeLog (273346 => 273347)


--- branches/safari-611-branch/Tools/ChangeLog	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Tools/ChangeLog	2021-02-23 22:51:16 UTC (rev 273347)
@@ -1,5 +1,95 @@
 2021-02-17  Ruben Turcios  <rubent...@apple.com>
 
+        Cherry-pick r272165. rdar://problem/74032536
+
+    Use user media permission prompt for speech recognition
+    https://bugs.webkit.org/show_bug.cgi?id=221082
+    rdar://problem/73372499
+    
+    Patch by Sihui Liu <sihui_...@appe.com> on 2021-02-01
+    Reviewed by Youenn Fablet.
+    
+    Source/WebCore:
+    
+    Add frame identifier to SpeechRecognitionRequest as it is needed for checking user media permission.
+    
+    Updated existing tests for changed behavior.
+    
+    * Modules/speech/SpeechRecognition.cpp:
+    (WebCore::SpeechRecognition::startRecognition):
+    * Modules/speech/SpeechRecognitionConnection.h:
+    * Modules/speech/SpeechRecognitionRequest.h:
+    (WebCore::SpeechRecognitionRequest::frameIdentifier const):
+    * Modules/speech/SpeechRecognitionRequestInfo.h:
+    (WebCore::SpeechRecognitionRequestInfo::encode const):
+    (WebCore::SpeechRecognitionRequestInfo::decode):
+    * page/DummySpeechRecognitionProvider.h:
+    
+    Source/WebKit:
+    
+    Make SpeechRecognitionPermissionManager ask UserMediaPermissionRequestManagerProxy for user permission on
+    microphone.
+    
+    * UIProcess/SpeechRecognitionPermissionManager.cpp:
+    (WebKit::SpeechRecognitionPermissionManager::request):
+    (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+    (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+    * UIProcess/SpeechRecognitionPermissionManager.h:
+    * UIProcess/SpeechRecognitionPermissionRequest.h:
+    (WebKit::SpeechRecognitionPermissionRequest::create):
+    (WebKit::SpeechRecognitionPermissionRequest::frameIdentifier const):
+    (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+    * UIProcess/SpeechRecognitionServer.cpp:
+    (WebKit::SpeechRecognitionServer::start):
+    (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+    * UIProcess/SpeechRecognitionServer.h:
+    * UIProcess/SpeechRecognitionServer.messages.in:
+    * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+    (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
+    (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
+    (WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):
+    * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+    * UIProcess/UserMediaPermissionRequestProxy.cpp:
+    (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
+    * UIProcess/UserMediaPermissionRequestProxy.h:
+    (WebKit::UserMediaPermissionRequestProxy::create):
+    (WebKit::UserMediaPermissionRequestProxy::decisionCompletionHandler):
+    * UIProcess/WebPageProxy.cpp:
+    (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+    (WebKit::WebPageProxy::requestUserMediaPermissionForSpeechRecognition):
+    * UIProcess/WebPageProxy.h:
+    * UIProcess/WebProcessProxy.cpp:
+    (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp:
+    (WebKit::WebSpeechRecognitionConnection::start):
+    * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.h:
+    
+    Tools:
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+    (-[SpeechRecognitionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
+    
+    LayoutTests:
+    
+    * fast/speechrecognition/permission-error.html:
+    * fast/speechrecognition/start-recognition-in-removed-iframe-expected.txt:
+    * fast/speechrecognition/start-recognition-in-removed-iframe.html:
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@272165 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-02-01  Sihui Liu  <sihui_...@appe.com>
+
+            Use user media permission prompt for speech recognition
+            https://bugs.webkit.org/show_bug.cgi?id=221082
+            rdar://problem/73372499
+
+            Reviewed by Youenn Fablet.
+
+            * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+            (-[SpeechRecognitionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
+
+2021-02-17  Ruben Turcios  <rubent...@apple.com>
+
         Cherry-pick r271636. rdar://problem/74452635
 
     Update media state for active speech recognition as it uses audio capture

Modified: branches/safari-611-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm (273346 => 273347)


--- branches/safari-611-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm	2021-02-23 22:51:08 UTC (rev 273346)
+++ branches/safari-611-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm	2021-02-23 22:51:16 UTC (rev 273347)
@@ -60,7 +60,8 @@
 
 - (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorization: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler
 {
-    decisionHandler(YES);
+    permissionRequested = true;
+    decisionHandler(shouldGrantPermissionRequest);
 }
 
 - (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to