WebCore::createSystemMarketingVersion() and WebKit::systemVersionPlist() have convoluted logic to build the path to SystemVersion.plist and load its contents. Those call sites should be replaced with usage of SPI such as _CFCopySystemVersionDictionary() (which is already being used in PluginBlocklist and WebGLBlocklist)
Created attachment 447149 [details] Patch
<rdar://problem/86780674>
Committed r288451 (246340@main): <https://commits.webkit.org/246340@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 447149 [details].
Comment on attachment 447149 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=447149&action=review > Source/WebCore/platform/cocoa/SystemVersion.mm:27 > #import "SystemVersion.h" > +#import <pal/spi/cf/CFUtilitiesSPI.h> WebKit coding style says there should be a blank line after the file’s own header before the other includes. > Source/WebCore/platform/cocoa/SystemVersion.mm:35 > + CFStringRef productVersion = static_cast<CFStringRef>(CFDictionaryGetValue(systemVersionDictionary.get(), _kCFSystemVersionProductVersionKey)); Typically in newly-written WebKit code we would use auto for the type rather than repeating the same type in both on the left and in the static_cast, and either checked_cf_cast or dynamic_cf_cast instead of static_cast. > Source/WebCore/platform/cocoa/SystemVersion.mm:36 > + return adoptNS([(__bridge NSString *)productVersion copy]); WebKit has bridge_cast for this: return adoptNS([bridge_cast(productVersion) copy]); > Source/WebKit/UIProcess/Inspector/mac/WebInspectorUIProxyMac.mm:793 > + NSDictionary *plist = adoptCF(_CFCopySystemVersionDictionary()).bridgingAutorelease(); We’d like to avoid introducing any autorelease, and there’s no need for it here, we can have a RetainPtr local variable. auto plistCF = adoptCF(_CFCopySystemVersionDictionary()); auto plist = bridge_cast(plistCF.get()); > Source/WebKit/UIProcess/Inspector/mac/WebInspectorUIProxyMac.mm:799 > + result.targetBuildVersion = plist[static_cast<NSString *>(_kCFSystemVersionBuildVersionKey)]; > + result.targetProductVersion = plist[static_cast<NSString *>(_kCFSystemVersionProductUserVisibleVersionKey)]; bridge_cast(_kCFSystemVersionBuildVersionKey) bridge_cast(_kCFSystemVersionProductUserVisibleVersionKey)