Diff
Modified: trunk/Source/WebKit/ChangeLog (277413 => 277414)
--- trunk/Source/WebKit/ChangeLog 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/ChangeLog 2021-05-13 00:31:44 UTC (rev 277414)
@@ -1,3 +1,52 @@
+2021-05-12 Chris Dumez <[email protected]>
+
+ Simplify / Modernize Notification permission implementation
+ https://bugs.webkit.org/show_bug.cgi?id=225711
+
+ Reviewed by Alex Christensen.
+
+ Simplify / Modernize Notification permission implementation. The main change was
+ adopting sendWithAsyncReply() for the IPC instead of using 2 separate IPC messages
+ for the request and the decision. As a result, we don't have to deal with request
+ identifiers.
+
+ No new tests, no behavior change and covered by existing API tests.
+
+ * Sources.txt:
+ * UIProcess/API/APIUIClient.h:
+ (API::UIClient::decidePolicyForNotificationPermissionRequest):
+ * UIProcess/API/C/WKNotificationPermissionRequest.cpp:
+ (WKNotificationPermissionRequestAllow):
+ (WKNotificationPermissionRequestDeny):
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageSetPageUIClient):
+ * UIProcess/API/glib/WebKitNotificationPermissionRequest.cpp:
+ (webkitNotificationPermissionRequestAllow):
+ (webkitNotificationPermissionRequestDeny):
+ * UIProcess/API/glib/WebKitUIClient.cpp:
+ * UIProcess/Cocoa/UIDelegate.h:
+ * UIProcess/Cocoa/UIDelegate.mm:
+ (WebKit::UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest):
+ * UIProcess/Notifications/NotificationPermissionRequest.h:
+ (WebKit::NotificationPermissionRequest::create):
+ (WebKit::NotificationPermissionRequest::~NotificationPermissionRequest):
+ (WebKit::NotificationPermissionRequest::didReceiveDecision):
+ (WebKit::NotificationPermissionRequest::NotificationPermissionRequest):
+ * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp: Removed.
+ * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.h: Removed.
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::resetState):
+ (WebKit::WebPageProxy::requestNotificationPermission):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebKit.xcodeproj/project.pbxproj:
+ * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
+ (WebKit::NotificationPermissionRequestManager::startRequest):
+ * WebProcess/Notifications/NotificationPermissionRequestManager.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
2021-05-12 Ada Chan <[email protected]>
[WebXR] Implement XRDeviceProxy::submitFrame
Modified: trunk/Source/WebKit/Sources.txt (277413 => 277414)
--- trunk/Source/WebKit/Sources.txt 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/Sources.txt 2021-05-13 00:31:44 UTC (rev 277414)
@@ -469,7 +469,6 @@
UIProcess/Media/MediaUsageManager.cpp
UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp
-UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp
UIProcess/Notifications/WebNotification.cpp
UIProcess/Notifications/WebNotificationManagerProxy.cpp
UIProcess/Notifications/WebNotificationProvider.cpp
Modified: trunk/Source/WebKit/UIProcess/API/APIUIClient.h (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/API/APIUIClient.h 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/API/APIUIClient.h 2021-05-13 00:31:44 UTC (rev 277414)
@@ -54,7 +54,6 @@
namespace WebKit {
class NativeWebKeyboardEvent;
class NativeWebWheelEvent;
-class NotificationPermissionRequest;
class UserMediaPermissionRequestProxy;
class WebColorPickerResultListenerProxy;
class WebFrameProxy;
@@ -137,7 +136,7 @@
virtual void decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, const WebKit::FrameInfoData&, Function<void(bool)>&) { }
virtual void decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy& request) { request.doDefaultAction(); }
virtual void checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy& request) { request.deny(); }
- virtual void decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy&, SecurityOrigin&, Function<void(bool)>&& completionHandler) { completionHandler(false); }
+ virtual void decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy&, SecurityOrigin&, CompletionHandler<void(bool allowed)>&& completionHandler) { completionHandler(false); }
virtual void requestStorageAccessConfirm(WebKit::WebPageProxy&, WebKit::WebFrameProxy*, const WebCore::RegistrableDomain& requestingDomain, const WebCore::RegistrableDomain& currentDomain, CompletionHandler<void(bool)>&& completionHandler) { completionHandler(true); }
// Printing.
Modified: trunk/Source/WebKit/UIProcess/API/C/WKNotificationPermissionRequest.cpp (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/API/C/WKNotificationPermissionRequest.cpp 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/API/C/WKNotificationPermissionRequest.cpp 2021-05-13 00:31:44 UTC (rev 277414)
@@ -38,10 +38,10 @@
void WKNotificationPermissionRequestAllow(WKNotificationPermissionRequestRef notificationPermissionRequest)
{
- return toImpl(notificationPermissionRequest)->allow();
+ return toImpl(notificationPermissionRequest)->didReceiveDecision(true);
}
void WKNotificationPermissionRequestDeny(WKNotificationPermissionRequestRef notificationPermissionRequest)
{
- return toImpl(notificationPermissionRequest)->deny();
+ return toImpl(notificationPermissionRequest)->didReceiveDecision(false);
}
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2021-05-13 00:31:44 UTC (rev 277414)
@@ -62,6 +62,7 @@
#include "NativeWebKeyboardEvent.h"
#include "NativeWebWheelEvent.h"
#include "NavigationActionData.h"
+#include "NotificationPermissionRequest.h"
#include "PageClient.h"
#include "PluginInformation.h"
#include "PrintInfo.h"
@@ -1988,7 +1989,7 @@
m_client.checkUserMediaPermissionForOrigin(toAPI(&page), toAPI(&frame), toAPI(&userMediaDocumentOrigin), toAPI(&topLevelDocumentOrigin), toAPI(&request), m_client.base.clientInfo);
}
- void decidePolicyForNotificationPermissionRequest(WebPageProxy& page, API::SecurityOrigin& origin, Function<void(bool)>&& completionHandler) final
+ void decidePolicyForNotificationPermissionRequest(WebPageProxy& page, API::SecurityOrigin& origin, CompletionHandler<void(bool allowed)>&& completionHandler) final
{
if (!m_client.decidePolicyForNotificationPermissionRequest)
return completionHandler(false);
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitNotificationPermissionRequest.cpp (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitNotificationPermissionRequest.cpp 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitNotificationPermissionRequest.cpp 2021-05-13 00:31:44 UTC (rev 277414)
@@ -64,7 +64,7 @@
if (priv->madeDecision)
return;
- priv->request->allow();
+ priv->request->didReceiveDecision(true);
priv->madeDecision = true;
}
@@ -78,7 +78,7 @@
if (priv->madeDecision)
return;
- priv->request->deny();
+ priv->request->didReceiveDecision(false);
priv->madeDecision = true;
}
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp 2021-05-13 00:31:44 UTC (rev 277414)
@@ -22,6 +22,7 @@
#include "APIUIClient.h"
#include "DrawingAreaProxy.h"
+#include "NotificationPermissionRequest.h"
#include "WebKitDeviceInfoPermissionRequestPrivate.h"
#include "WebKitFileChooserRequestPrivate.h"
#include "WebKitGeolocationPermissionRequestPrivate.h"
@@ -305,7 +306,7 @@
webkitWebViewMakePermissionRequest(m_webView, WEBKIT_PERMISSION_REQUEST(deviceInfoPermissionRequest.get()));
}
- void decidePolicyForNotificationPermissionRequest(WebPageProxy&, API::SecurityOrigin&, Function<void(bool)>&& completionHandler) final
+ void decidePolicyForNotificationPermissionRequest(WebPageProxy&, API::SecurityOrigin&, CompletionHandler<void(bool allowed)>&& completionHandler) final
{
GRefPtr<WebKitNotificationPermissionRequest> notificationPermissionRequest = adoptGRef(webkitNotificationPermissionRequestCreate(NotificationPermissionRequest::create(WTFMove(completionHandler)).ptr()));
webkitWebViewMakePermissionRequest(m_webView, WEBKIT_PERMISSION_REQUEST(notificationPermissionRequest.get()));
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2021-05-13 00:31:44 UTC (rev 277414)
@@ -117,7 +117,7 @@
float footerHeight(WebPageProxy&, WebFrameProxy&) final;
void drawHeader(WebPageProxy&, WebFrameProxy&, WebCore::FloatRect&&) final;
void drawFooter(WebPageProxy&, WebFrameProxy&, WebCore::FloatRect&&) final;
- void decidePolicyForNotificationPermissionRequest(WebPageProxy&, API::SecurityOrigin&, Function<void(bool)>&&) final;
+ void decidePolicyForNotificationPermissionRequest(WebPageProxy&, API::SecurityOrigin&, CompletionHandler<void(bool allowed)>&&) final;
void unavailablePluginButtonClicked(WebPageProxy&, WKPluginUnavailabilityReason, API::Dictionary&) final;
void mouseDidMoveOverElement(WebPageProxy&, const WebHitTestResultData&, OptionSet<WebEvent::Modifier>, API::Object*);
void didClickAutoFillButton(WebPageProxy&, API::Object*) final;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2021-05-13 00:31:44 UTC (rev 277414)
@@ -946,7 +946,7 @@
[(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate->m_webView.get().get() saveDataToFile:wrapper(data) suggestedFilename:suggestedFilename mimeType:mimeType originatingURL:originatingURL];
}
-void UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy&, API::SecurityOrigin& securityOrigin, WTF::Function<void(bool)>&& completionHandler)
+void UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy&, API::SecurityOrigin& securityOrigin, CompletionHandler<void(bool allowed)>&& completionHandler)
{
if (!m_uiDelegate)
return completionHandler(false);
Modified: trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequest.h (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequest.h 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequest.h 2021-05-13 00:31:44 UTC (rev 277414)
@@ -26,37 +26,35 @@
#pragma once
#include "APIObject.h"
-#include <wtf/Function.h>
+#include <wtf/CompletionHandler.h>
namespace WebKit {
-class NotificationPermissionRequestManagerProxy;
-
class NotificationPermissionRequest : public API::ObjectImpl<API::Object::Type::NotificationPermissionRequest> {
public:
- static Ref<NotificationPermissionRequest> create(Function<void(bool)>&& completionHandler)
+ static Ref<NotificationPermissionRequest> create(CompletionHandler<void(bool)>&& completionHandler)
{
return adoptRef(*new NotificationPermissionRequest(WTFMove(completionHandler)));
}
-
- void allow()
+
+ ~NotificationPermissionRequest()
{
- if (auto completionHandler = std::exchange(m_completionHandler, nullptr))
- completionHandler(true);
+ didReceiveDecision(false);
}
-
- void deny()
+
+ void didReceiveDecision(bool allowed)
{
- if (auto completionHandler = std::exchange(m_completionHandler, nullptr))
- completionHandler(false);
+ if (m_completionHandler)
+ m_completionHandler(allowed);
}
private:
- NotificationPermissionRequest(Function<void(bool)>&& completionHandler)
+ explicit NotificationPermissionRequest(CompletionHandler<void(bool)>&& completionHandler)
: m_completionHandler(WTFMove(completionHandler))
- { }
+ {
+ }
- Function<void(bool)> m_completionHandler;
+ CompletionHandler<void(bool)> m_completionHandler;
};
} // namespace WebKit
Deleted: trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp 2021-05-13 00:31:44 UTC (rev 277414)
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "NotificationPermissionRequestManagerProxy.h"
-
-#include "NotificationPermissionRequest.h"
-#include "WebPageMessages.h"
-#include "WebPageProxy.h"
-#include "WebProcessProxy.h"
-
-namespace WebKit {
-
-NotificationPermissionRequestManagerProxy::NotificationPermissionRequestManagerProxy(WebPageProxy& page)
- : m_page(page)
-{
-}
-
-void NotificationPermissionRequestManagerProxy::invalidateRequests()
-{
- auto pendingRequests = std::exchange(m_pendingRequests, { });
- for (auto& request : pendingRequests.values())
- request->deny();
-}
-
-Ref<NotificationPermissionRequest> NotificationPermissionRequestManagerProxy::createRequest(uint64_t notificationID)
-{
- auto request = NotificationPermissionRequest::create([this, notificationID, page = makeRef(m_page)](bool allowed) {
- m_pendingRequests.take(notificationID);
- page->send(Messages::WebPage::DidReceiveNotificationPermissionDecision(notificationID, allowed));
- });
- m_pendingRequests.add(notificationID, request.ptr());
- return request;
-}
-
-} // namespace WebKit
Deleted: trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequestManagerProxy.h (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequestManagerProxy.h 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/Notifications/NotificationPermissionRequestManagerProxy.h 2021-05-13 00:31:44 UTC (rev 277414)
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "NotificationPermissionRequest.h"
-#include <wtf/HashMap.h>
-#include <wtf/RefPtr.h>
-
-namespace WebKit {
-
-class WebPageProxy;
-
-class NotificationPermissionRequestManagerProxy {
-public:
- explicit NotificationPermissionRequestManagerProxy(WebPageProxy&);
-
- void invalidateRequests();
-
- // Create a request to be presented to the user.
- Ref<NotificationPermissionRequest> createRequest(uint64_t notificationID);
-
-private:
- HashMap<uint64_t, RefPtr<NotificationPermissionRequest>> m_pendingRequests;
- WebPageProxy& m_page;
-};
-
-} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-05-13 00:31:44 UTC (rev 277414)
@@ -482,7 +482,6 @@
, m_fullscreenClient(makeUnique<API::FullscreenClient>())
#endif
, m_geolocationPermissionRequestManager(*this)
- , m_notificationPermissionRequestManager(*this)
#if PLATFORM(IOS_FAMILY)
, m_audibleActivityTimer(RunLoop::main(), this, &WebPageProxy::clearAudibleActivity)
#endif
@@ -7632,8 +7631,6 @@
m_geolocationPermissionRequestManager.invalidateRequests();
#endif
- m_notificationPermissionRequestManager.invalidateRequests();
-
setToolTip({ });
m_mainFrameHasHorizontalScrollbar = false;
@@ -8447,20 +8444,10 @@
#endif // ENABLE(MEDIA_CONTROLS_CONTEXT_MENUS) && USE(UICONTEXTMENU)
-void WebPageProxy::requestNotificationPermission(uint64_t requestID, const String& originString)
+void WebPageProxy::requestNotificationPermission(const String& originString, CompletionHandler<void(bool allowed)>&& completionHandler)
{
- if (!isRequestIDValid(requestID))
- return;
-
auto origin = API::SecurityOrigin::createFromString(originString);
- auto request = m_notificationPermissionRequestManager.createRequest(requestID);
-
- m_uiClient->decidePolicyForNotificationPermissionRequest(*this, origin.get(), [request = WTFMove(request)](bool allowed) {
- if (allowed)
- request->allow();
- else
- request->deny();
- });
+ m_uiClient->decidePolicyForNotificationPermissionRequest(*this, origin.get(), WTFMove(completionHandler));
}
void WebPageProxy::showNotification(const String& title, const String& body, const String& iconURL, const String& tag, const String& lang, WebCore::NotificationDirection dir, const String& originString, uint64_t notificationID)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2021-05-13 00:31:44 UTC (rev 277414)
@@ -42,7 +42,6 @@
#include "MediaKeySystemPermissionRequestManagerProxy.h"
#include "MediaPlaybackState.h"
#include "MessageSender.h"
-#include "NotificationPermissionRequestManagerProxy.h"
#include "PDFPluginIdentifier.h"
#include "PageLoadState.h"
#include "PasteboardAccessIntent.h"
@@ -2129,7 +2128,7 @@
RefPtr<API::Navigation> launchProcessForReload();
- void requestNotificationPermission(uint64_t notificationID, const String& originString);
+ void requestNotificationPermission(const String& originString, CompletionHandler<void(bool allowed)>&&);
void showNotification(const String& title, const String& body, const String& iconURL, const String& tag, const String& lang, WebCore::NotificationDirection, const String& originString, uint64_t notificationID);
void cancelNotification(uint64_t notificationID);
void clearNotifications(const Vector<uint64_t>& notificationIDs);
@@ -2600,7 +2599,6 @@
RefPtr<WebOpenPanelResultListenerProxy> m_openPanelResultListener;
GeolocationPermissionRequestManagerProxy m_geolocationPermissionRequestManager;
- NotificationPermissionRequestManagerProxy m_notificationPermissionRequestManager;
#if ENABLE(MEDIA_STREAM)
std::unique_ptr<UserMediaPermissionRequestManagerProxy> m_userMediaPermissionRequestManager;
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (277413 => 277414)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2021-05-13 00:31:44 UTC (rev 277414)
@@ -281,7 +281,7 @@
#endif
# Notification messages
- RequestNotificationPermission(uint64_t requestID, String originIdentifier)
+ RequestNotificationPermission(String originIdentifier) -> (bool allowed) Async
ShowNotification(String title, String body, String iconURL, String tag, String lang, enum:uint8_t WebCore::NotificationDirection dir, String originIdentifier, uint64_t notificationID)
CancelNotification(uint64_t notificationID)
ClearNotifications(Vector<uint64_t> notificationIDs)
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (277413 => 277414)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-05-13 00:31:44 UTC (rev 277414)
@@ -822,7 +822,6 @@
31A2EC49148997C200810D71 /* WebNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A2EC42148997BE00810D71 /* WebNotification.h */; };
31A2EC4B148997C200810D71 /* WebNotificationManagerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A2EC44148997BF00810D71 /* WebNotificationManagerProxy.h */; };
31A2EC4E148997C200810D71 /* WebNotificationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A2EC47148997C100810D71 /* WebNotificationProvider.h */; };
- 31A2EC521489981900810D71 /* NotificationPermissionRequestManagerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A2EC511489981500810D71 /* NotificationPermissionRequestManagerProxy.h */; };
31A2EC5614899C0900810D71 /* NotificationPermissionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A2EC531489982500810D71 /* NotificationPermissionRequest.h */; };
31A2EC74148D59CA00810D71 /* WKNotificationPermissionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A2EC72148D59BB00810D71 /* WKNotificationPermissionRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
31A505FA1680025500A930EB /* WebContextClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A505F81680025500A930EB /* WebContextClient.h */; };
@@ -3576,8 +3575,6 @@
31A2EC44148997BF00810D71 /* WebNotificationManagerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNotificationManagerProxy.h; sourceTree = "<group>"; };
31A2EC46148997C000810D71 /* WebNotificationProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebNotificationProvider.cpp; sourceTree = "<group>"; };
31A2EC47148997C100810D71 /* WebNotificationProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNotificationProvider.h; sourceTree = "<group>"; };
- 31A2EC4F1489980500810D71 /* NotificationPermissionRequestManagerProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NotificationPermissionRequestManagerProxy.cpp; sourceTree = "<group>"; };
- 31A2EC511489981500810D71 /* NotificationPermissionRequestManagerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationPermissionRequestManagerProxy.h; sourceTree = "<group>"; };
31A2EC531489982500810D71 /* NotificationPermissionRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationPermissionRequest.h; sourceTree = "<group>"; };
31A2EC72148D59BB00810D71 /* WKNotificationPermissionRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKNotificationPermissionRequest.h; sourceTree = "<group>"; };
31A2EC75148D65BB00810D71 /* WKNotificationPermissionRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKNotificationPermissionRequest.cpp; sourceTree = "<group>"; };
@@ -7837,8 +7834,6 @@
isa = PBXGroup;
children = (
31A2EC531489982500810D71 /* NotificationPermissionRequest.h */,
- 31A2EC4F1489980500810D71 /* NotificationPermissionRequestManagerProxy.cpp */,
- 31A2EC511489981500810D71 /* NotificationPermissionRequestManagerProxy.h */,
31A2EC41148997BE00810D71 /* WebNotification.cpp */,
31A2EC42148997BE00810D71 /* WebNotification.h */,
31A2EC43148997BE00810D71 /* WebNotificationManagerProxy.cpp */,
@@ -12110,7 +12105,6 @@
570DAAAE23026F5C00E8FC04 /* NfcService.h in Headers */,
31A2EC5614899C0900810D71 /* NotificationPermissionRequest.h in Headers */,
3131261F148FF82C00BA2A39 /* NotificationPermissionRequestManager.h in Headers */,
- 31A2EC521489981900810D71 /* NotificationPermissionRequestManagerProxy.h in Headers */,
1A2D848B127F6A49001EB962 /* NPIdentifierData.h in Headers */,
1AE4976811FF658E0048B464 /* NPJSObject.h in Headers */,
1A2D82A5127F4EAB001EB962 /* NPObjectMessageReceiver.h in Headers */,
Modified: trunk/Source/WebKit/WebProcess/Notifications/NotificationPermissionRequestManager.cpp (277413 => 277414)
--- trunk/Source/WebKit/WebProcess/Notifications/NotificationPermissionRequestManager.cpp 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/WebProcess/Notifications/NotificationPermissionRequestManager.cpp 2021-05-13 00:31:44 UTC (rev 277414)
@@ -43,14 +43,6 @@
namespace WebKit {
using namespace WebCore;
-#if ENABLE(NOTIFICATIONS)
-static uint64_t generateRequestID()
-{
- static uint64_t uniqueRequestID = 1;
- return uniqueRequestID++;
-}
-#endif
-
Ref<NotificationPermissionRequestManager> NotificationPermissionRequestManager::create(WebPage* page)
{
return adoptRef(*new NotificationPermissionRequestManager(page));
@@ -82,11 +74,15 @@
if (!addResult.isNewEntry)
return;
- uint64_t requestID = generateRequestID();
- m_idToOriginMap.set(requestID, securityOrigin);
+ m_page->sendWithAsyncReply(Messages::WebPageProxy::RequestNotificationPermission(securityOrigin.toString()), [this, protectedThis = makeRef(*this), callback = WTFMove(callback), securityOrigin](bool allowed) mutable {
+ WebProcess::singleton().supplement<WebNotificationManager>()->didUpdateNotificationDecision(securityOrigin.toString(), allowed);
- // FIXME: This should use sendWithAsyncReply().
- m_page->send(Messages::WebPageProxy::RequestNotificationPermission(requestID, securityOrigin.toString()));
+ auto callbacks = m_requestsPerOrigin.take(securityOrigin);
+ for (auto& callback : callbacks) {
+ if (callback)
+ callback->handleEvent(allowed ? NotificationClient::Permission::Granted : NotificationClient::Permission::Denied);
+ }
+ });
}
#endif
@@ -120,27 +116,4 @@
#endif
}
-void NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision(uint64_t requestID, bool allowed)
-{
-#if ENABLE(NOTIFICATIONS)
- if (!isRequestIDValid(requestID))
- return;
-
- auto origin = m_idToOriginMap.take(requestID);
- if (origin.isEmpty())
- return;
-
- WebProcess::singleton().supplement<WebNotificationManager>()->didUpdateNotificationDecision(origin.toString(), allowed);
-
- auto callbacks = m_requestsPerOrigin.take(origin);
- for (auto& callback : callbacks) {
- if (callback)
- callback->handleEvent(allowed ? NotificationClient::Permission::Granted : NotificationClient::Permission::Denied);
- }
-#else
- UNUSED_PARAM(requestID);
- UNUSED_PARAM(allowed);
-#endif
-}
-
} // namespace WebKit
Modified: trunk/Source/WebKit/WebProcess/Notifications/NotificationPermissionRequestManager.h (277413 => 277414)
--- trunk/Source/WebKit/WebProcess/Notifications/NotificationPermissionRequestManager.h 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/WebProcess/Notifications/NotificationPermissionRequestManager.h 2021-05-13 00:31:44 UTC (rev 277414)
@@ -57,14 +57,11 @@
void setPermissionLevelForTesting(const String& originString, bool allowed);
void removeAllPermissionsForTesting();
- void didReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed);
-
private:
NotificationPermissionRequestManager(WebPage*);
#if ENABLE(NOTIFICATIONS)
HashMap<WebCore::SecurityOriginData, Vector<RefPtr<WebCore::NotificationPermissionCallback>>> m_requestsPerOrigin;
- HashMap<uint64_t, WebCore::SecurityOriginData> m_idToOriginMap;
WebPage* m_page;
#endif
};
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (277413 => 277414)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2021-05-13 00:31:44 UTC (rev 277414)
@@ -4654,11 +4654,6 @@
}
#endif
-void WebPage::didReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed)
-{
- notificationPermissionRequestManager()->didReceiveNotificationPermissionDecision(notificationID, allowed);
-}
-
#if ENABLE(MEDIA_STREAM)
void WebPage::userMediaAccessWasGranted(uint64_t userMediaID, WebCore::CaptureDevice&& audioDevice, WebCore::CaptureDevice&& videoDevice, String&& mediaDeviceIdentifierHashSalt, SandboxExtension::Handle&& handle, CompletionHandler<void()>&& completionHandler)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (277413 => 277414)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2021-05-13 00:31:44 UTC (rev 277414)
@@ -1736,8 +1736,6 @@
void didReceiveGeolocationPermissionDecision(GeolocationIdentifier, const String& authorizationToken);
- void didReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed);
-
#if ENABLE(MEDIA_STREAM)
void userMediaAccessWasGranted(uint64_t userMediaID, WebCore::CaptureDevice&& audioDeviceUID, WebCore::CaptureDevice&& videoDeviceUID, String&& mediaDeviceIdentifierHashSalt, SandboxExtension::Handle&&, CompletionHandler<void()>&&);
void userMediaAccessWasDenied(uint64_t userMediaID, uint64_t reason, String&& invalidConstraint);
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (277413 => 277414)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2021-05-13 00:21:32 UTC (rev 277413)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2021-05-13 00:31:44 UTC (rev 277414)
@@ -393,9 +393,6 @@
SuspendAllMediaPlayback() -> () Async
ResumeAllMediaPlayback() -> () Async
- # Notification
- DidReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed)
-
FreezeLayerTreeDueToSwipeAnimation()
UnfreezeLayerTreeDueToSwipeAnimation()