Title: [277414] trunk/Source/WebKit
Revision
277414
Author
[email protected]
Date
2021-05-12 17:31:44 -0700 (Wed, 12 May 2021)

Log Message

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:

Modified Paths

Removed Paths

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()
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to