Diff
Modified: branches/safari-611-branch/LayoutTests/ChangeLog (273250 => 273251)
--- branches/safari-611-branch/LayoutTests/ChangeLog 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/LayoutTests/ChangeLog 2021-02-22 17:54:38 UTC (rev 273251)
@@ -1,5 +1,65 @@
2021-02-17 Ruben Turcios <[email protected]>
+ Cherry-pick r271381. rdar://problem/74451875
+
+ Make SpeechRecognition permission error more informative
+ https://bugs.webkit.org/show_bug.cgi?id=220436
+
+ Patch by Sihui Liu <[email protected]> on 2021-01-11
+ Reviewed by Youenn Fablet.
+
+ Source/WebKit:
+
+ Make SpeechRecognitionPermissionManager complete requests with an optional SpeechRecognitionError instead of a
+ boolean value.
+
+ * UIProcess/SpeechRecognitionPermissionManager.cpp:
+ (WebKit::SpeechRecognitionPermissionManager::~SpeechRecognitionPermissionManager):
+ (WebKit::SpeechRecognitionPermissionManager::request):
+ (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+ (WebKit::SpeechRecognitionPermissionManager::continueProcessingRequest):
+ (WebKit::SpeechRecognitionPermissionManager::completeCurrentRequest):
+ (WebKit::SpeechRecognitionPermissionManager::requestSpeechRecognitionServiceAccess):
+ (WebKit::SpeechRecognitionPermissionManager::requestMicrophoneAccess):
+ (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+ * UIProcess/SpeechRecognitionPermissionManager.h:
+ * UIProcess/SpeechRecognitionPermissionRequest.h:
+ (WebKit::SpeechRecognitionPermissionRequest::create):
+ (WebKit::SpeechRecognitionPermissionRequest::complete):
+ (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+ * UIProcess/SpeechRecognitionServer.cpp:
+ (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+ * UIProcess/SpeechRecognitionServer.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+
+ Tools:
+
+ * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+ (TestWebKitAPI::TEST):
+
+ LayoutTests:
+
+ * fast/speechrecognition/permission-error-expected.txt:
+ * fast/speechrecognition/permission-error.html:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@271381 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-01-11 Sihui Liu <[email protected]>
+
+ Make SpeechRecognition permission error more informative
+ https://bugs.webkit.org/show_bug.cgi?id=220436
+
+ Reviewed by Youenn Fablet.
+
+ * fast/speechrecognition/permission-error-expected.txt:
+ * fast/speechrecognition/permission-error.html:
+
+2021-02-17 Ruben Turcios <[email protected]>
+
Cherry-pick r272067. rdar://problem/74444347
Support for aria-current state changed notifications.
Modified: branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error-expected.txt (273250 => 273251)
--- branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error-expected.txt 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error-expected.txt 2021-02-22 17:54:38 UTC (rev 273251)
@@ -6,7 +6,7 @@
PASS recognition = new webkitSpeechRecognition() did not throw exception.
PASS recognition.start() did not throw exception.
PASS event.error is "not-allowed"
-PASS event.message is "Permission check failed"
+PASS event.message is "User permission check has failed"
PASS successfullyParsed is true
TEST COMPLETE
Modified: branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error.html (273250 => 273251)
--- branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error.html 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/LayoutTests/fast/speechrecognition/permission-error.html 2021-02-22 17:54:38 UTC (rev 273251)
@@ -14,7 +14,7 @@
shouldNotThrow("recognition.start()");
recognition._onerror_ = (event) => {
shouldBeEqualToString("event.error", "not-allowed");
- shouldBeEqualToString("event.message", "Permission check failed");
+ shouldBeEqualToString("event.message", "User permission check has failed");
finishJSTest();
}
Modified: branches/safari-611-branch/Source/WebKit/ChangeLog (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/ChangeLog 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/ChangeLog 2021-02-22 17:54:38 UTC (rev 273251)
@@ -1,5 +1,88 @@
2021-02-17 Ruben Turcios <[email protected]>
+ Cherry-pick r271381. rdar://problem/74451875
+
+ Make SpeechRecognition permission error more informative
+ https://bugs.webkit.org/show_bug.cgi?id=220436
+
+ Patch by Sihui Liu <[email protected]> on 2021-01-11
+ Reviewed by Youenn Fablet.
+
+ Source/WebKit:
+
+ Make SpeechRecognitionPermissionManager complete requests with an optional SpeechRecognitionError instead of a
+ boolean value.
+
+ * UIProcess/SpeechRecognitionPermissionManager.cpp:
+ (WebKit::SpeechRecognitionPermissionManager::~SpeechRecognitionPermissionManager):
+ (WebKit::SpeechRecognitionPermissionManager::request):
+ (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+ (WebKit::SpeechRecognitionPermissionManager::continueProcessingRequest):
+ (WebKit::SpeechRecognitionPermissionManager::completeCurrentRequest):
+ (WebKit::SpeechRecognitionPermissionManager::requestSpeechRecognitionServiceAccess):
+ (WebKit::SpeechRecognitionPermissionManager::requestMicrophoneAccess):
+ (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+ * UIProcess/SpeechRecognitionPermissionManager.h:
+ * UIProcess/SpeechRecognitionPermissionRequest.h:
+ (WebKit::SpeechRecognitionPermissionRequest::create):
+ (WebKit::SpeechRecognitionPermissionRequest::complete):
+ (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+ * UIProcess/SpeechRecognitionServer.cpp:
+ (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+ * UIProcess/SpeechRecognitionServer.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+
+ Tools:
+
+ * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+ (TestWebKitAPI::TEST):
+
+ LayoutTests:
+
+ * fast/speechrecognition/permission-error-expected.txt:
+ * fast/speechrecognition/permission-error.html:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@271381 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-01-11 Sihui Liu <[email protected]>
+
+ Make SpeechRecognition permission error more informative
+ https://bugs.webkit.org/show_bug.cgi?id=220436
+
+ Reviewed by Youenn Fablet.
+
+ Make SpeechRecognitionPermissionManager complete requests with an optional SpeechRecognitionError instead of a
+ boolean value.
+
+ * UIProcess/SpeechRecognitionPermissionManager.cpp:
+ (WebKit::SpeechRecognitionPermissionManager::~SpeechRecognitionPermissionManager):
+ (WebKit::SpeechRecognitionPermissionManager::request):
+ (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+ (WebKit::SpeechRecognitionPermissionManager::continueProcessingRequest):
+ (WebKit::SpeechRecognitionPermissionManager::completeCurrentRequest):
+ (WebKit::SpeechRecognitionPermissionManager::requestSpeechRecognitionServiceAccess):
+ (WebKit::SpeechRecognitionPermissionManager::requestMicrophoneAccess):
+ (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+ * UIProcess/SpeechRecognitionPermissionManager.h:
+ * UIProcess/SpeechRecognitionPermissionRequest.h:
+ (WebKit::SpeechRecognitionPermissionRequest::create):
+ (WebKit::SpeechRecognitionPermissionRequest::complete):
+ (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+ * UIProcess/SpeechRecognitionServer.cpp:
+ (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+ * UIProcess/SpeechRecognitionServer.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+
+2021-02-17 Ruben Turcios <[email protected]>
+
Cherry-pick r272504. rdar://problem/74409474
NetworkRTCSocketCocoa extractDataMessages should not read too much data
Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.cpp (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.cpp 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.cpp 2021-02-22 17:54:38 UTC (rev 273251)
@@ -72,10 +72,10 @@
SpeechRecognitionPermissionManager::~SpeechRecognitionPermissionManager()
{
for (auto& request : m_requests)
- request->complete(SpeechRecognitionPermissionDecision::Deny);
+ request->complete(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "Permission manager has exited"_s });
}
-void SpeechRecognitionPermissionManager::request(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(SpeechRecognitionPermissionDecision)>&& completiontHandler)
+void SpeechRecognitionPermissionManager::request(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(Optional<SpeechRecognitionError>&&)>&& completiontHandler)
{
m_requests.append(SpeechRecognitionPermissionRequest::create(lang, origin, WTFMove(completiontHandler)));
if (m_requests.size() == 1)
@@ -94,34 +94,35 @@
{
#if PLATFORM(COOCA)
if (!checkSandboxRequirementForType(MediaPermissionType::Audio)) {
- completeCurrentRequest(SpeechRecognitionPermissionDecision::Deny);
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "Sandbox check has failed"_s });
return;
}
#endif
- // TCC status may have changed between requests.
- m_microphoneCheck = computeMicrophoneAccess();
- m_speechRecognitionServiceCheck = computeSpeechRecognitionServiceAccess();
-
m_page.syncIfMockDevicesEnabledChanged();
- bool mockCaptureDevicesEnabled = m_page.preferences().mockCaptureDevicesEnabled();
- if (mockCaptureDevicesEnabled) {
+ if (m_page.preferences().mockCaptureDevicesEnabled()) {
m_microphoneCheck = CheckResult::Granted;
m_speechRecognitionServiceCheck = CheckResult::Granted;
- }
+ } else {
+ // TCC status may have changed between requests.
+ m_microphoneCheck = computeMicrophoneAccess();
+ if (m_microphoneCheck == CheckResult::Denied) {
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "Microphone permission check has failed"_s });
+ return;
+ }
+ m_speechRecognitionServiceCheck = computeSpeechRecognitionServiceAccess();
+ if (m_speechRecognitionServiceCheck == CheckResult::Denied) {
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::ServiceNotAllowed, "Speech recognition service permission check has failed"_s });
+ return;
+ }
+
#if HAVE(SPEECHRECOGNIZER)
- if (!mockCaptureDevicesEnabled && m_speechRecognitionServiceCheck != CheckResult::Denied) {
- // Speech recognition service can be unavailable when user does not enable dictation in system settings.
- // Let's avoid prompting user in that case.
- if (!checkSpeechRecognitionServiceAvailability(m_requests.first()->lang()))
- m_speechRecognitionServiceCheck = CheckResult::Denied;
- }
+ if (!checkSpeechRecognitionServiceAvailability(m_requests.first()->lang())) {
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::ServiceNotAllowed, "Speech recognition service is not available"_s });
+ return;
+ }
#endif
-
- if (m_microphoneCheck == CheckResult::Denied || m_speechRecognitionServiceCheck == CheckResult::Denied) {
- completeCurrentRequest(SpeechRecognitionPermissionDecision::Deny);
- return;
}
// We currently don't allow third-party access.
@@ -134,7 +135,7 @@
}
if (m_userPermissionCheck == CheckResult::Denied) {
- completeCurrentRequest(SpeechRecognitionPermissionDecision::Deny);
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "User permission check has failed"_s });
return;
}
@@ -162,18 +163,18 @@
ASSERT(m_userPermissionCheck == CheckResult::Granted);
if (!m_page.isViewVisible()) {
- completeCurrentRequest(SpeechRecognitionPermissionDecision::Deny);
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "Page is not visible to user" });
return;
}
- completeCurrentRequest(SpeechRecognitionPermissionDecision::Grant);
+ completeCurrentRequest();
}
-void SpeechRecognitionPermissionManager::completeCurrentRequest(SpeechRecognitionPermissionDecision decision)
+void SpeechRecognitionPermissionManager::completeCurrentRequest(Optional<SpeechRecognitionError>&& error)
{
ASSERT(!m_requests.isEmpty());
auto currentRequest = m_requests.takeFirst();
- currentRequest->complete(decision);
+ currentRequest->complete(WTFMove(error));
startNextRequest();
}
@@ -189,7 +190,7 @@
m_speechRecognitionServiceCheck = authorized ? CheckResult::Granted : CheckResult::Denied;
if (m_speechRecognitionServiceCheck == CheckResult::Denied) {
- completeCurrentRequest(SpeechRecognitionPermissionDecision::Deny);
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::ServiceNotAllowed, "Speech recognition service permission check has failed"_s });
return;
}
@@ -209,7 +210,7 @@
m_microphoneCheck = authorized ? CheckResult::Granted : CheckResult::Denied;
if (m_microphoneCheck == CheckResult::Denied) {
- completeCurrentRequest(SpeechRecognitionPermissionDecision::Deny);
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "Microphone permission check has failed"_s });
return;
}
@@ -231,7 +232,7 @@
m_userPermissionCheck = granted ? CheckResult::Granted : CheckResult::Denied;
if (m_userPermissionCheck == CheckResult::Denied) {
- completeCurrentRequest(SpeechRecognitionPermissionDecision::Deny);
+ completeCurrentRequest(SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "User permission check has failed"_s });
return;
}
@@ -240,8 +241,6 @@
m_page.uiClient().decidePolicyForSpeechRecognitionPermissionRequest(m_page, API::SecurityOrigin::create(topOrigin.get()).get(), WTFMove(decisionHandler));
}
-
-
void SpeechRecognitionPermissionManager::decideByDefaultAction(const WebCore::SecurityOrigin& origin, CompletionHandler<void(bool)>&& completionHandler)
{
#if PLATFORM(COCOA)
Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.h (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.h 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionManager.h 2021-02-22 17:54:38 UTC (rev 273251)
@@ -39,7 +39,7 @@
enum class CheckResult { Denied, Granted, Unknown };
explicit SpeechRecognitionPermissionManager(WebPageProxy&);
~SpeechRecognitionPermissionManager();
- void request(const String& lang, const WebCore::ClientOrigin&, CompletionHandler<void(SpeechRecognitionPermissionDecision)>&&);
+ void request(const String& lang, const WebCore::ClientOrigin&, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&&);
void decideByDefaultAction(const WebCore::SecurityOrigin&, CompletionHandler<void(bool)>&&);
WebPageProxy& page() { return m_page; }
@@ -48,7 +48,7 @@
void startNextRequest();
void startProcessingRequest();
void continueProcessingRequest();
- void completeCurrentRequest(SpeechRecognitionPermissionDecision);
+ void completeCurrentRequest(Optional<WebCore::SpeechRecognitionError>&& = WTF::nullopt);
void requestMicrophoneAccess();
void requestSpeechRecognitionServiceAccess();
void requestUserPermission();
Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionRequest.h (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionRequest.h 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionPermissionRequest.h 2021-02-22 17:54:38 UTC (rev 273251)
@@ -27,23 +27,22 @@
#include "APIObject.h"
#include <WebCore/ClientOrigin.h>
+#include <WebCore/SpeechRecognitionError.h>
#include <wtf/CompletionHandler.h>
namespace WebKit {
-enum class SpeechRecognitionPermissionDecision : bool { Deny, Grant };
-
class SpeechRecognitionPermissionRequest : public RefCounted<SpeechRecognitionPermissionRequest> {
public:
- static Ref<SpeechRecognitionPermissionRequest> create(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(SpeechRecognitionPermissionDecision)>&& completionHandler)
+ static Ref<SpeechRecognitionPermissionRequest> create(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&& completionHandler)
{
return adoptRef(*new SpeechRecognitionPermissionRequest(lang, origin, WTFMove(completionHandler)));
}
- void complete(SpeechRecognitionPermissionDecision decision)
+ void complete(Optional<WebCore::SpeechRecognitionError>&& error)
{
auto completionHandler = std::exchange(m_completionHandler, { });
- completionHandler(decision);
+ completionHandler(WTFMove(error));
}
const WebCore::ClientOrigin& origin() const { return m_origin; }
@@ -50,7 +49,7 @@
const String& lang() const { return m_lang; }
private:
- SpeechRecognitionPermissionRequest(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(SpeechRecognitionPermissionDecision)>&& completionHandler)
+ SpeechRecognitionPermissionRequest(const String& lang, const WebCore::ClientOrigin& origin, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&& completionHandler)
: m_lang(lang)
, m_origin(origin)
, m_completionHandler(WTFMove(completionHandler))
@@ -58,7 +57,7 @@
String m_lang;
WebCore::ClientOrigin m_origin;
- CompletionHandler<void(SpeechRecognitionPermissionDecision)> m_completionHandler;
+ CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)> m_completionHandler;
};
class SpeechRecognitionPermissionCallback : public API::ObjectImpl<API::Object::Type::SpeechRecognitionPermissionCallback> {
Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.cpp (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.cpp 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.cpp 2021-02-22 17:54:38 UTC (rev 273251)
@@ -64,7 +64,7 @@
void SpeechRecognitionServer::requestPermissionForRequest(WebCore::SpeechRecognitionRequest& request)
{
- m_permissionChecker(request.lang(), request.clientOrigin(), [this, weakThis = makeWeakPtr(this), weakRequest = makeWeakPtr(request)](auto decision) mutable {
+ m_permissionChecker(request.lang(), request.clientOrigin(), [this, weakThis = makeWeakPtr(this), weakRequest = makeWeakPtr(request)](auto error) mutable {
if (!weakThis)
return;
@@ -72,10 +72,9 @@
return;
auto identifier = weakRequest->clientIdentifier();
- if (decision == SpeechRecognitionPermissionDecision::Deny) {
+ if (error) {
m_requests.remove(identifier);
- auto error = WebCore::SpeechRecognitionError { WebCore::SpeechRecognitionErrorType::NotAllowed, "Permission check failed"_s };
- sendUpdate(identifier, WebCore::SpeechRecognitionUpdateType::Error, error);
+ sendUpdate(identifier, WebCore::SpeechRecognitionUpdateType::Error, WTFMove(error));
return;
}
Modified: branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.h (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.h 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/SpeechRecognitionServer.h 2021-02-22 17:54:38 UTC (rev 273251)
@@ -43,10 +43,9 @@
namespace WebKit {
class WebProcessProxy;
-enum class SpeechRecognitionPermissionDecision : bool;
using SpeechRecognitionServerIdentifier = WebCore::PageIdentifier;
-using SpeechRecognitionPermissionChecker = Function<void(const String&, const WebCore::ClientOrigin&, CompletionHandler<void(SpeechRecognitionPermissionDecision)>&&)>;
+using SpeechRecognitionPermissionChecker = Function<void(const String&, const WebCore::ClientOrigin&, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&&)>;
using SpeechRecognitionCheckIfMockSpeechRecognitionEnabled = Function<bool()>;
class SpeechRecognitionServer : public CanMakeWeakPtr<SpeechRecognitionServer>, public IPC::MessageReceiver, private IPC::MessageSender {
Modified: branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.cpp (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-02-22 17:54:38 UTC (rev 273251)
@@ -10295,7 +10295,7 @@
});
}
-void WebPageProxy::requestSpeechRecognitionPermission(const String& lang, const WebCore::ClientOrigin& clientOrigin, CompletionHandler<void(SpeechRecognitionPermissionDecision)>&& completionHandler)
+void WebPageProxy::requestSpeechRecognitionPermission(const String& lang, const WebCore::ClientOrigin& clientOrigin, CompletionHandler<void(Optional<SpeechRecognitionError>&&)>&& completionHandler)
{
if (!m_speechRecognitionPermissionManager)
m_speechRecognitionPermissionManager = makeUnique<SpeechRecognitionPermissionManager>(*this);
Modified: branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.h (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.h 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/WebPageProxy.h 2021-02-22 17:54:38 UTC (rev 273251)
@@ -264,6 +264,7 @@
struct PrewarmInformation;
struct SecurityOriginData;
struct ShareData;
+struct SpeechRecognitionError;
struct TextAlternativeWithRange;
struct TextCheckingResult;
struct ViewportAttributes;
@@ -367,7 +368,6 @@
enum class CreateNewGroupForHighlight : bool;
enum class NegotiatedLegacyTLS : bool;
enum class ProcessSwapRequestedByClient : bool;
-enum class SpeechRecognitionPermissionDecision : bool;
enum class UndoOrRedo : bool;
enum class WebContentMode : uint8_t;
@@ -1812,7 +1812,7 @@
void setMediaCaptureReportingDelay(Seconds captureReportingDelay) { m_mediaCaptureReportingDelay = captureReportingDelay; }
size_t suspendMediaPlaybackCounter() { return m_suspendMediaPlaybackCounter; }
- void requestSpeechRecognitionPermission(const String& lang, const WebCore::ClientOrigin&, CompletionHandler<void(SpeechRecognitionPermissionDecision)>&&);
+ void requestSpeechRecognitionPermission(const String& lang, const WebCore::ClientOrigin&, CompletionHandler<void(Optional<WebCore::SpeechRecognitionError>&&)>&&);
void requestSpeechRecognitionPermissionByDefaultAction(const WebCore::SecurityOrigin&, CompletionHandler<void(bool)>&&);
void syncIfMockDevicesEnabledChanged();
Modified: branches/safari-611-branch/Source/WebKit/UIProcess/WebProcessProxy.cpp (273250 => 273251)
--- branches/safari-611-branch/Source/WebKit/UIProcess/WebProcessProxy.cpp 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Source/WebKit/UIProcess/WebProcessProxy.cpp 2021-02-22 17:54:38 UTC (rev 273251)
@@ -1730,7 +1730,7 @@
auto& speechRecognitionServer = m_speechRecognitionServerMap.add(identifier, nullptr).iterator->value;
auto permissionChecker = [weakPage = makeWeakPtr(targetPage)](auto& lang, auto& origin, auto&& completionHandler) mutable {
if (!weakPage) {
- completionHandler(SpeechRecognitionPermissionDecision::Deny);
+ completionHandler(WebCore::SpeechRecognitionError { SpeechRecognitionErrorType::NotAllowed, "Page no longer exists"_s });
return;
}
Modified: branches/safari-611-branch/Tools/ChangeLog (273250 => 273251)
--- branches/safari-611-branch/Tools/ChangeLog 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Tools/ChangeLog 2021-02-22 17:54:38 UTC (rev 273251)
@@ -1,5 +1,65 @@
2021-02-17 Ruben Turcios <[email protected]>
+ Cherry-pick r271381. rdar://problem/74451875
+
+ Make SpeechRecognition permission error more informative
+ https://bugs.webkit.org/show_bug.cgi?id=220436
+
+ Patch by Sihui Liu <[email protected]> on 2021-01-11
+ Reviewed by Youenn Fablet.
+
+ Source/WebKit:
+
+ Make SpeechRecognitionPermissionManager complete requests with an optional SpeechRecognitionError instead of a
+ boolean value.
+
+ * UIProcess/SpeechRecognitionPermissionManager.cpp:
+ (WebKit::SpeechRecognitionPermissionManager::~SpeechRecognitionPermissionManager):
+ (WebKit::SpeechRecognitionPermissionManager::request):
+ (WebKit::SpeechRecognitionPermissionManager::startProcessingRequest):
+ (WebKit::SpeechRecognitionPermissionManager::continueProcessingRequest):
+ (WebKit::SpeechRecognitionPermissionManager::completeCurrentRequest):
+ (WebKit::SpeechRecognitionPermissionManager::requestSpeechRecognitionServiceAccess):
+ (WebKit::SpeechRecognitionPermissionManager::requestMicrophoneAccess):
+ (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
+ * UIProcess/SpeechRecognitionPermissionManager.h:
+ * UIProcess/SpeechRecognitionPermissionRequest.h:
+ (WebKit::SpeechRecognitionPermissionRequest::create):
+ (WebKit::SpeechRecognitionPermissionRequest::complete):
+ (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
+ * UIProcess/SpeechRecognitionServer.cpp:
+ (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
+ * UIProcess/SpeechRecognitionServer.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::requestSpeechRecognitionPermission):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::createSpeechRecognitionServer):
+
+ Tools:
+
+ * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+ (TestWebKitAPI::TEST):
+
+ LayoutTests:
+
+ * fast/speechrecognition/permission-error-expected.txt:
+ * fast/speechrecognition/permission-error.html:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@271381 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-01-11 Sihui Liu <[email protected]>
+
+ Make SpeechRecognition permission error more informative
+ https://bugs.webkit.org/show_bug.cgi?id=220436
+
+ Reviewed by Youenn Fablet.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+ (TestWebKitAPI::TEST):
+
+2021-02-17 Ruben Turcios <[email protected]>
+
Cherry-pick r272067. rdar://problem/74444347
Support for aria-current state changed notifications.
Modified: branches/safari-611-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm (273250 => 273251)
--- branches/safari-611-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm 2021-02-22 17:54:32 UTC (rev 273250)
+++ branches/safari-611-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm 2021-02-22 17:54:38 UTC (rev 273251)
@@ -119,7 +119,7 @@
receivedScriptMessage = false;
[webView loadTestPageNamed:@"speechrecognition-user-permission-persistence"];
TestWebKitAPI::Util::run(&receivedScriptMessage);
- EXPECT_WK_STREQ(@"Error: not-allowed - Permission check failed", [lastScriptMessage body]);
+ EXPECT_WK_STREQ(@"Error: not-allowed - User permission check has failed", [lastScriptMessage body]);
EXPECT_TRUE(permissionRequested);
// Permission result is remembered.
@@ -127,7 +127,7 @@
receivedScriptMessage = false;
[webView stringByEvaluatingJavaScript:@"start()"];
TestWebKitAPI::Util::run(&receivedScriptMessage);
- EXPECT_WK_STREQ(@"Error: not-allowed - Permission check failed", [lastScriptMessage body]);
+ EXPECT_WK_STREQ(@"Error: not-allowed - User permission check has failed", [lastScriptMessage body]);
EXPECT_FALSE(permissionRequested);
// Permission result will be cleared after document changes.
@@ -231,7 +231,7 @@
receivedScriptMessage = false;
[webView evaluateJavaScript:@"start()" completionHandler:nil];
TestWebKitAPI::Util::run(&receivedScriptMessage);
- EXPECT_WK_STREQ(@"Error: not-allowed - Permission check failed", [lastScriptMessage body]);
+ EXPECT_WK_STREQ(@"Error: not-allowed - Page is not visible to user", [lastScriptMessage body]);
}
TEST(WebKit2, SpeechRecognitionPageIsDestroyed)