[webkit-reviews] review granted: [Bug 240273] Make sure calling showNotification will extend the service worker lifetime : [Attachment 459145] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu May 12 08:43:29 PDT 2022

Chris Dumez <cdumez at apple.com> has granted youenn fablet <youennf at gmail.com>'s
request for review:
Bug 240273: Make sure calling showNotification will extend the service worker

Attachment 459145: Patch


--- Comment #6 from Chris Dumez <cdumez at apple.com> ---
Comment on attachment 459145
  --> https://bugs.webkit.org/attachment.cgi?id=459145

View in context: https://bugs.webkit.org/attachment.cgi?id=459145&action=review

r=me with comments

> Source/WebCore/Modules/notifications/Notification.cpp:149
> +    auto scope = makeScopeExit([&callback] { callback(); });

I feel like using a CompletionHandlerCallingScope would be much nicer, since
you could WTFMove() here.

> Source/WebCore/Modules/notifications/Notification.cpp:176
> +    scope.release();

And the release() here would give you your completion handler again so you can
capture it in your lambda. It is less error prone.

> Source/WebCore/dom/ScriptExecutionContext.cpp:769
> +CompletionHandler<void()>

Should have "take" in the name since it is actually modifying the underlying

> Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp:84
> +    m_pushEvent = &pushEvent;

Are we sure m_pushEvent was not already initialized to a pushEvent here?

> Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp:86
> +    m_pushEvent = nullptr;

If so, we'd lose that previous pushEvent here. Sometimes we want a "stack"
behavior for this sort of things and restore the previous value of m_pushEvent
rather than clearing it. I don't know if it applies here but if it does, we
should consider using SetForScope instead.

> Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.cpp:106
> +    callback();

Is it really OK here to be calling the callback without we've received the
response to the IPC below? It looks weird.

> Source/WebKit/UIProcess/Notifications/ServiceWorkerNotificationHandler.cpp:59
> +	   callback();

Given how callback is used, I'd recommend a ScopeExit or a

> Source/WebKitLegacy/mac/WebCoreSupport/WebNotificationClient.mm:71
> +    callback();

You are failing to call callback() in the early return case above. I'd suggest
using a ScopeExit or a CompletionHanderCallingScope to avoid such bugs.

> Tools/TestWebKitAPI/TestNotificationProvider.cpp:142
> +bool TestNotificationProvider::hasReceivedNotification() const

I'd suggest inlining those 2 in the header given that those are trivial getter
/ setters.

More information about the webkit-reviews mailing list