[webkit-changes] [WebKit/WebKit] 546db3: [iOS 17+, Sonoma] REGRESSION (267051 at main): Safari...
Wenson Hsieh
noreply at github.com
Tue Aug 22 23:36:40 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 546db343245acbd1394972e65da6c9056fe3b166
https://github.com/WebKit/WebKit/commit/546db343245acbd1394972e65da6c9056fe3b166
Author: Wenson Hsieh <wenson_hsieh at apple.com>
Date: 2023-08-22 (Tue, 22 Aug 2023)
Changed paths:
M Source/WebCore/PAL/pal/cocoa/WebPrivacySoftLink.h
M Source/WebCore/PAL/pal/cocoa/WebPrivacySoftLink.mm
Log Message:
-----------
[iOS 17+, Sonoma] REGRESSION (267051 at main): Safari no longer responds to WebPrivacy list changes
https://bugs.webkit.org/show_bug.cgi?id=260569
rdar://114288616
Reviewed by Aditya Keerthi.
Several API tests in `TestWebKitAPI.AdvancedPrivacyProtections` began to fail after the changes in
267051 at main; in particular, they're failing because I changed the `SOFT_LINK_CONSTANT_FOR_HEADER`
around `WPNotificationUserInfoResourceTypeKey` to `SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER`, the
latter of which never attempts to load will return `nil` unless we call
`PAL::canLoad_WebPrivacy_WPResourceDataChangedNotificationName()` first (the full macro expands to
the following):
```
namespace PAL {
static NSNotificationName constantWebPrivacyWPResourceDataChangedNotificationName;
bool init_WebPrivacy_WPResourceDataChangedNotificationName();
bool init_WebPrivacy_WPResourceDataChangedNotificationName()
{
void* constant = dlsym(WebPrivacyLibrary(), "WPResourceDataChangedNotificationName");
if (!constant)
return false;
constantWebPrivacyWPResourceDataChangedNotificationName = *static_cast<NSNotificationName const *>(constant);
return true;
}
PAL_EXPORT bool canLoad_WebPrivacy_WPResourceDataChangedNotificationName();
bool canLoad_WebPrivacy_WPResourceDataChangedNotificationName()
{
static bool loaded = init_WebPrivacy_WPResourceDataChangedNotificationName();
return loaded;
}
PAL_EXPORT NSNotificationName get_WebPrivacy_WPResourceDataChangedNotificationName();
NSNotificationName get_WebPrivacy_WPResourceDataChangedNotificationName()
{
return constantWebPrivacyWPResourceDataChangedNotificationName;
}
}
```
...in contrast, the original macro `SOFT_LINK_CONSTANT_FOR_HEADER` expands to:
```
namespace PAL {
PAL_EXPORT NSNotificationName get_WebPrivacy_WPResourceDataChangedNotificationName();
NSNotificationName get_WebPrivacy_WPResourceDataChangedNotificationName()
{
static NSNotificationName constantWebPrivacyWPResourceDataChangedNotificationName;
static dispatch_once_t once;
dispatch_once(&once, ^{
void* constant = dlsym(WebPrivacyLibrary(), "WPResourceDataChangedNotificationName");
RELEASE_ASSERT_WITH_MESSAGE(constant, "%s", dlerror());
constantWebPrivacyWPResourceDataChangedNotificationName = *static_cast<NSNotificationName const *>(constant);
});
return constantWebPrivacyWPResourceDataChangedNotificationName;
}
}
```
This exposes a real bug caused by 267051 at main, where we no longer listen for the resource data
changed notification from WebPrivacy in WebKit since the soft-linking helper now always returns
`nil`. Fix this by reverting to the original `SOFT_LINK_CONSTANT_FOR_HEADER` for these two symbols,
which should be fine (i.e. not `RELEASE_ASSERT`) as long as we only ever call them from inside a
`canUseWebPrivacyFramework()` check.
* Source/WebCore/PAL/pal/cocoa/WebPrivacySoftLink.h:
* Source/WebCore/PAL/pal/cocoa/WebPrivacySoftLink.mm:
Canonical link: https://commits.webkit.org/267181@main
More information about the webkit-changes
mailing list