[webkit-changes] [WebKit/WebKit] 078916: [macOS] Disable suspension when local notification...

Chris Dumez noreply at github.com
Mon May 1 17:26:46 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0789169e66412b631fddd23369aa42a65592721a
      https://github.com/WebKit/WebKit/commit/0789169e66412b631fddd23369aa42a65592721a
  Author: Chris Dumez <cdumez at apple.com>
  Date:   2023-05-01 (Mon, 01 May 2023)

  Changed paths:
    M LayoutTests/imported/w3c/web-platform-tests/permissions/all-permissions-expected.txt
    M Source/WebCore/Modules/permissions/PermissionName.h
    M Source/WebCore/Modules/permissions/PermissionName.idl
    M Source/WebCore/Modules/permissions/Permissions.cpp
    M Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.h
    M Source/WebKit/Shared/Notifications/NotificationManagerMessageHandler.h
    M Source/WebKit/Shared/Notifications/NotificationManagerMessageHandler.messages.in
    M Source/WebKit/UIProcess/Cocoa/ProcessAssertionCocoa.mm
    M Source/WebKit/UIProcess/Notifications/ServiceWorkerNotificationHandler.h
    M Source/WebKit/UIProcess/Notifications/WebNotificationManagerMessageHandler.cpp
    M Source/WebKit/UIProcess/Notifications/WebNotificationManagerMessageHandler.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/WebProcess/Notifications/WebNotificationManager.cpp
    M Source/WebKit/WebProcess/Notifications/WebNotificationManager.h
    M Source/WebKit/WebProcess/WebCoreSupport/WebNotificationClient.cpp

  Log Message:
  -----------
  [macOS] Disable suspension when local notifications are granted
https://bugs.webkit.org/show_bug.cgi?id=256095
rdar://107012193

Reviewed by Geoffrey Garen.

On macOS, we now disable process suspension if a tab using this process is likely
to use local notifications. In particular, we disable suspension if either:
- A notification has been shown
- The page called navigator.permissions.query({ name: "notifications" }) and it returned true.
- The page accessed Notification.permission and it returned "granted".
- The page requested permission via Notification.requestPermission() and it was granted.

This gets reset whenever a new main frame load commits inside the page.

Before this change, our behavior was to restart the 8 minute suspension timer whenever
a local notification was shown.

* Source/WebCore/Modules/permissions/PermissionName.h:
* Source/WebCore/Modules/permissions/PermissionName.idl:
* Source/WebCore/Modules/permissions/Permissions.cpp:
(WebCore::Permissions::toPermissionName):
* Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.h:
* Source/WebKit/Shared/Notifications/NotificationManagerMessageHandler.h:
* Source/WebKit/Shared/Notifications/NotificationManagerMessageHandler.messages.in:
* Source/WebKit/UIProcess/Notifications/ServiceWorkerNotificationHandler.h:
* Source/WebKit/UIProcess/Notifications/WebNotificationManagerMessageHandler.cpp:
(WebKit::WebNotificationManagerMessageHandler::pageWasNotifiedOfNotificationPermission):
* Source/WebKit/UIProcess/Notifications/WebNotificationManagerMessageHandler.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::ProcessActivityState::takeLikelyToUseNotificationsActivity):
(WebKit::WebPageProxy::ProcessActivityState::dropLikelyToUseNotificationsActivity):
(WebKit::WebPageProxy::ProcessActivityState::reset):
(WebKit::WebPageProxy::didCommitLoadForFrame):
(WebKit::WebPageProxy::queryPermission):
(WebKit::WebPageProxy::pageWillLikelyUseNotifications):
(WebKit::WebPageProxy::showNotification):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/WebProcess/Notifications/WebNotificationManager.cpp:
(WebKit::sendMessage):
(WebKit::sendNotificationMessage):
(WebKit::sendNotificationMessageWithAsyncReply):
(WebKit::WebNotificationManager::policyForOrigin const):
(WebKit::WebNotificationManager::sendNotificationMessage): Deleted.
(WebKit::WebNotificationManager::sendNotificationMessageWithAsyncReply): Deleted.
* Source/WebKit/WebProcess/Notifications/WebNotificationManager.h:
* Source/WebKit/WebProcess/WebCoreSupport/WebNotificationClient.cpp:
(WebKit::WebNotificationClient::checkPermission):

Canonical link: https://commits.webkit.org/263565@main




More information about the webkit-changes mailing list