⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 273784 in webkit


Ignore:
Timestamp:
Mar 2, 2021, 7:05:42 PM (6 years ago)
Author:
mmaxfield@apple.com
Message:

REGRESSION(r270691): It's impossible to use MobileAsset fonts on macOS
​https://bugs.webkit.org/show_bug.cgi?id=222582
<rdar://problem/74877450>

Reviewed by Per Arne Vollan.

Source/WebKit:

Simply apply the iOS codepath to macOS.

There is also an additional change here to the Mac sandbox.
On Big Sur and earlier, before this patch, com.apple.mobileassetd was allowed,
and com.apple.mobileassetd.v2 was disallowed. After this patch, they both are
allowed, but only with the com.apple.webkit.extension.mach extension.
On other OSes, before this patch, nothing was allowed, whereas after this patch,
only com.apple.mobileassetd.v2 is allowed with the com.apple.webkit.extension.mach
extension.

Test: WebKit.MobileAssetSandboxCheck

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _grantAccessToAssetServices]):
(-[WKWebView _revokeAccessToAssetServices]):

  • UIProcess/API/Cocoa/WKWebViewPrivate.h:
  • UIProcess/API/ios/WKWebViewIOS.mm:

(-[WKWebView _grantAccessToAssetServices]): Deleted.
(-[WKWebView _revokeAccessToAssetServices]): Deleted.

  • UIProcess/Cocoa/WebPageProxyCocoa.mm:

(WebKit::WebPageProxy::grantAccessToAssetServices):
(WebKit::WebPageProxy::revokeAccessToAssetServices):

  • UIProcess/WebPageProxy.h:
  • UIProcess/ios/WebPageProxyIOS.mm:

(WebKit::WebPageProxy::grantAccessToAssetServices): Deleted.
(WebKit::WebPageProxy::revokeAccessToAssetServices): Deleted.

  • WebProcess/WebProcess.h:
  • WebProcess/WebProcess.messages.in:
  • WebProcess/cocoa/WebProcessCocoa.mm:

(WebKit::WebProcess::revokeAccessToAssetServices):

  • WebProcess/com.apple.WebProcess.sb.in:
  • WebProcess/glib/WebProcessGLib.cpp:

(WebKit::WebProcess::grantAccessToAssetServices):
(WebKit::WebProcess::revokeAccessToAssetServices):

  • WebProcess/playstation/WebProcessPlayStation.cpp:

(WebKit::WebProcess::grantAccessToAssetServices):
(WebKit::WebProcess::revokeAccessToAssetServices):

  • WebProcess/win/WebProcessWin.cpp:

(WebKit::WebProcess::grantAccessToAssetServices):
(WebKit::WebProcess::revokeAccessToAssetServices):

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKit/MobileAssetSandboxCheck.mm: Copied from Source/WebKit/WebProcess/win/WebProcessWin.cpp.

(TEST):

Location:
trunk
Files:
16 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r273778 r273784  
     12021-03-02  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        REGRESSION(r270691): It's impossible to use MobileAsset fonts on macOS
     4        https://bugs.webkit.org/show_bug.cgi?id=222582
     5        <rdar://problem/74877450>
     6
     7        Reviewed by Per Arne Vollan.
     8
     9        Simply apply the iOS codepath to macOS.
     10
     11        There is also an additional change here to the Mac sandbox.
     12        On Big Sur and earlier, before this patch, com.apple.mobileassetd was allowed,
     13        and com.apple.mobileassetd.v2 was disallowed. After this patch, they both are
     14        allowed, but only with the com.apple.webkit.extension.mach extension.
     15        On other OSes, before this patch, nothing was allowed, whereas after this patch,
     16        only com.apple.mobileassetd.v2 is allowed with the com.apple.webkit.extension.mach
     17        extension.
     18
     19        Test: WebKit.MobileAssetSandboxCheck
     20
     21        * UIProcess/API/Cocoa/WKWebView.mm:
     22        (-[WKWebView _grantAccessToAssetServices]):
     23        (-[WKWebView _revokeAccessToAssetServices]):
     24        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
     25        * UIProcess/API/ios/WKWebViewIOS.mm:
     26        (-[WKWebView _grantAccessToAssetServices]): Deleted.
     27        (-[WKWebView _revokeAccessToAssetServices]): Deleted.
     28        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
     29        (WebKit::WebPageProxy::grantAccessToAssetServices):
     30        (WebKit::WebPageProxy::revokeAccessToAssetServices):
     31        * UIProcess/WebPageProxy.h:
     32        * UIProcess/ios/WebPageProxyIOS.mm:
     33        (WebKit::WebPageProxy::grantAccessToAssetServices): Deleted.
     34        (WebKit::WebPageProxy::revokeAccessToAssetServices): Deleted.
     35        * WebProcess/WebProcess.h:
     36        * WebProcess/WebProcess.messages.in:
     37        * WebProcess/cocoa/WebProcessCocoa.mm:
     38        (WebKit::WebProcess::revokeAccessToAssetServices):
     39        * WebProcess/com.apple.WebProcess.sb.in:
     40        * WebProcess/glib/WebProcessGLib.cpp:
     41        (WebKit::WebProcess::grantAccessToAssetServices):
     42        (WebKit::WebProcess::revokeAccessToAssetServices):
     43        * WebProcess/playstation/WebProcessPlayStation.cpp:
     44        (WebKit::WebProcess::grantAccessToAssetServices):
     45        (WebKit::WebProcess::revokeAccessToAssetServices):
     46        * WebProcess/win/WebProcessWin.cpp:
     47        (WebKit::WebProcess::grantAccessToAssetServices):
     48        (WebKit::WebProcess::revokeAccessToAssetServices):
     49
    1502021-03-02  Wenson Hsieh  <wenson_hsieh@apple.com>
    251
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r273515 r273784  
    21682168}
    21692169
     2170- (void)_grantAccessToAssetServices
     2171{
     2172    if (_page)
     2173        _page->grantAccessToAssetServices();
     2174}
     2175
     2176- (void)_revokeAccessToAssetServices
     2177{
     2178    if (_page)
     2179        _page->revokeAccessToAssetServices();
     2180}
     2181
    21702182- (NSArray *)_certificateChain
    21712183{
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h

    r273130 r273784  
    433433- (WKNavigation *)loadSimulatedRequest:(NSURLRequest *)request withResponseHTMLString:(NSString *)string WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    434434
     435- (void)_grantAccessToAssetServices WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(14.0));
     436- (void)_revokeAccessToAssetServices WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(14.0));
     437
    435438@end
    436439
    … …  
    537540- (UIView *)_fullScreenPlaceholderView WK_API_AVAILABLE(ios(12.0));
    538541
    539 - (void)_grantAccessToAssetServices WK_API_AVAILABLE(ios(14.0));
    540 - (void)_revokeAccessToAssetServices WK_API_AVAILABLE(ios(14.0));
    541 
    542542- (void)_willOpenAppLink WK_API_AVAILABLE(ios(14.0));
    543543
  • trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm

    r273083 r273784  
    32413241}
    32423242
    3243 - (void)_grantAccessToAssetServices
    3244 {
    3245 #if PLATFORM(IOS)
    3246     if (_page)
    3247         _page->grantAccessToAssetServices();
    3248 #endif
    3249 }
    3250 
    3251 - (void)_revokeAccessToAssetServices
    3252 {
    3253 #if PLATFORM(IOS)
    3254     if (_page)
    3255         _page->revokeAccessToAssetServices();
    3256 #endif
    3257 }
    3258 
    32593243- (void)_willOpenAppLink
    32603244{
  • trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm

    r273286 r273784  
    4343#import "WebPageMessages.h"
    4444#import "WebPasteboardProxy.h"
     45#import "WebProcessMessages.h"
    4546#import "WebProcessProxy.h"
    4647#import "WebsiteDataStore.h"
    … …  
    619620}
    620621
     622void WebPageProxy::grantAccessToAssetServices()
     623{
     624    SandboxExtension::Handle mobileAssetHandleV2;
     625    SandboxExtension::createHandleForMachLookup("com.apple.mobileassetd.v2"_s, WTF::nullopt, mobileAssetHandleV2);
     626    process().send(Messages::WebProcess::GrantAccessToAssetServices(mobileAssetHandleV2), 0);
     627}
     628
     629void WebPageProxy::revokeAccessToAssetServices()
     630{
     631    process().send(Messages::WebProcess::RevokeAccessToAssetServices(), 0);
     632}
     633
    621634} // namespace WebKit
    622635
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r273778 r273784  
    17731773    const NativeWebKeyboardEvent& firstQueuedKeyEvent() const;
    17741774
    1775 #if PLATFORM(IOS)
    17761775    void grantAccessToAssetServices();
    17771776    void revokeAccessToAssetServices();
    1778 #endif
    17791777
    17801778#if PLATFORM(COCOA)
  • trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm

    r272975 r273784  
    15431543#endif
    15441544
    1545 #if PLATFORM(IOS)
    1546 void WebPageProxy::grantAccessToAssetServices()
    1547 {
    1548     SandboxExtension::Handle mobileAssetHandleV2;
    1549     SandboxExtension::createHandleForMachLookup("com.apple.mobileassetd.v2"_s, WTF::nullopt, mobileAssetHandleV2);
    1550     process().send(Messages::WebProcess::GrantAccessToAssetServices(mobileAssetHandleV2), 0);
    1551 }
    1552 
    1553 void WebPageProxy::revokeAccessToAssetServices()
    1554 {
    1555     process().send(Messages::WebProcess::RevokeAccessToAssetServices(), 0);
    1556 }
    1557 #endif
    1558 
    15591545void WebPageProxy::willPerformPasteCommand()
    15601546{
  • trunk/Source/WebKit/WebProcess/WebProcess.h

    r273735 r273784  
    340340#endif
    341341
    342 #if PLATFORM(IOS)
    343342    void grantAccessToAssetServices(WebKit::SandboxExtension::Handle&& mobileAssetV2Handle);
    344343    void revokeAccessToAssetServices();
    345 #endif
    346344
    347345#if PLATFORM(MAC)
    … …  
    703701#endif
    704702
    705 #if PLATFORM(IOS)
    706703    RefPtr<SandboxExtension> m_assetServiceV2Extension;
    707 #endif
    708704
    709705#if PLATFORM(COCOA)
  • trunk/Source/WebKit/WebProcess/WebProcess.messages.in

    r273735 r273784  
    167167#endif
    168168
    169 #if PLATFORM(IOS)
    170169    GrantAccessToAssetServices(WebKit::SandboxExtension::Handle mobileAssetV2Handle)
    171170    RevokeAccessToAssetServices()
    172 #endif
    173171
    174172#if PLATFORM(COCOA)
  • trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm

    r273657 r273784  
    11301130#endif
    11311131
    1132 #if PLATFORM(IOS)
    11331132void WebProcess::grantAccessToAssetServices(WebKit::SandboxExtension::Handle&& mobileAssetV2Handle)
    11341133{
    … …  
    11461145    m_assetServiceV2Extension = nullptr;
    11471146}
    1148 #endif
    11491147
    11501148void WebProcess::setScreenProperties(const ScreenProperties& properties)
  • trunk/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in

    r273510 r273784  
    10991099#if __MAC_OS_X_VERSION_MIN_REQUIRED <= 110000
    11001100(allow mach-lookup
    1101     (global-name "com.apple.mobileassetd")
    1102 )
     1101    (require-all
     1102        (extension "com.apple.webkit.extension.mach")
     1103        (global-name
     1104            "com.apple.mobileassetd"
     1105            "com.apple.mobileassetd.v2"
     1106)))
     1107#else
     1108(allow mach-lookup
     1109    (require-all
     1110        (extension "com.apple.webkit.extension.mach")
     1111        (global-name "com.apple.mobileassetd.v2")
     1112))
    11031113#endif
    11041114
  • trunk/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp

    r271396 r273784  
    129129#endif
    130130
     131void WebProcess::grantAccessToAssetServices(WebKit::SandboxExtension::Handle&&)
     132{
     133}
     134
     135void WebProcess::revokeAccessToAssetServices()
     136{
     137}
     138
    131139} // namespace WebKit
  • trunk/Source/WebKit/WebProcess/playstation/WebProcessPlayStation.cpp

    r254713 r273784  
    4545}
    4646
     47void WebProcess::grantAccessToAssetServices(WebKit::SandboxExtension::Handle&&)
     48{
     49}
     50
     51void WebProcess::revokeAccessToAssetServices()
     52{
     53}
     54
    4755} // namespace WebKit
  • trunk/Source/WebKit/WebProcess/win/WebProcessWin.cpp

    r256720 r273784  
    5252}
    5353
     54void WebProcess::grantAccessToAssetServices(WebKit::SandboxExtension::Handle&&)
     55{
     56}
     57
     58void WebProcess::revokeAccessToAssetServices()
     59{
     60}
     61
    5462} // namespace WebKit
  • trunk/Tools/ChangeLog

    r273776 r273784  
     12021-03-02  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        REGRESSION(r270691): It's impossible to use MobileAsset fonts on macOS
     4        https://bugs.webkit.org/show_bug.cgi?id=222582
     5        <rdar://problem/74877450>
     6
     7        Reviewed by Per Arne Vollan.
     8
     9        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     10        * TestWebKitAPI/Tests/WebKit/MobileAssetSandboxCheck.mm: Copied from Source/WebKit/WebProcess/win/WebProcessWin.cpp.
     11        (TEST):
     12
    1132021-03-02  Sam Weinig  <weinig@apple.com>
    214
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r273776 r273784  
    119119                1CC80CEA2474F249004DC489 /* idempotent-mode-autosizing-only-honors-percentages.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 1CC80CE92474F1F7004DC489 /* idempotent-mode-autosizing-only-honors-percentages.html */; };
    120120                1CE6FAC32320267C00E48F6E /* rich-color-filtered.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 1CE6FAC12320264F00E48F6E /* rich-color-filtered.html */; };
     121                1CF087D825ED7F73004148CB /* MobileAssetSandboxCheck.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CF087D725ED7F73004148CB /* MobileAssetSandboxCheck.mm */; };
    121122                1CF59AE221E68925006E37EC /* ForceLightAppearanceInBundle_Bundle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CF59AE021E68925006E37EC /* ForceLightAppearanceInBundle_Bundle.mm */; };
    122123                1CF59AE321E68932006E37EC /* ForceLightAppearanceInBundle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CF59ADF21E68925006E37EC /* ForceLightAppearanceInBundle.mm */; };
    … …  
    18191820                1CC80CE92474F1F7004DC489 /* idempotent-mode-autosizing-only-honors-percentages.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "idempotent-mode-autosizing-only-honors-percentages.html"; sourceTree = "<group>"; };
    18201821                1CE6FAC12320264F00E48F6E /* rich-color-filtered.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "rich-color-filtered.html"; sourceTree = "<group>"; };
     1822                1CF087D725ED7F73004148CB /* MobileAssetSandboxCheck.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MobileAssetSandboxCheck.mm; sourceTree = "<group>"; };
    18211823                1CF0D3781BBF2F3D00B4EF54 /* WKRetainPtr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKRetainPtr.cpp; sourceTree = "<group>"; };
    18221824                1CF59ADF21E68925006E37EC /* ForceLightAppearanceInBundle.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ForceLightAppearanceInBundle.mm; sourceTree = "<group>"; };
    … …  
    32153217                                E34A6D182412DE390012AB6E /* GrantAccessToPreferencesService.mm */,
    32163218                                E35B908123F60DD0000011FF /* LocalizedDeviceModel.mm */,
     3219                                1CF087D725ED7F73004148CB /* MobileAssetSandboxCheck.mm */,
    32173220                                C104BC1E2547237100C078C9 /* OverrideAppleLanguagesPreference.mm */,
    32183221                                E325C90623E3870200BC7D3B /* PictureInPictureSupport.mm */,
    … …  
    54305433                                51EB126224CA6B66000CB030 /* MicrosoftXboxOne.mm in Sources */,
    54315434                                A5B149DE1F5A19EA00C6DAFF /* MIMETypeRegistry.cpp in Sources */,
     5435                                1CF087D825ED7F73004148CB /* MobileAssetSandboxCheck.mm in Sources */,
    54325436                                51CD1C6C1B38CE4300142CA5 /* ModalAlerts.mm in Sources */,
    54335437                                7C83E0B61D0A64B300FEBCF3 /* ModalAlertsSPI.cpp in Sources */,
  • trunk/Tools/TestWebKitAPI/Tests/WebKit/MobileAssetSandboxCheck.mm

    r273783 r273784  
    11/*
    2  * Copyright (C) 2017 Sony Interactive Entertainment Inc.
     2 * Copyright (C) 2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
    … …  
    2424 */
    2525
    26 #include "config.h"
    27 #include "WebProcess.h"
     26#import "config.h"
    2827
    29 #include <WebCore/SharedBuffer.h>
     28#if WK_HAVE_C_SPI
    3029
    31 RefPtr<WebCore::SharedBuffer> loadResourceIntoBuffer(const char* name)
     30#import "PlatformUtilities.h"
     31#import "TestWKWebView.h"
     32#import <WebKit/WKWebViewPrivate.h>
     33
     34TEST(WebKit, MobileAssetSandboxCheck)
    3235{
    33     return 0;
     36    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     37    auto context = adoptWK(TestWebKitAPI::Util::createContextForInjectedBundleTest("InternalsInjectedBundleTest"));
     38    configuration.get().processPool = (WKProcessPool *)context.get();
     39    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300) configuration:configuration.get() addToWindow:YES]);
     40
     41    auto sandboxAccess = [&] {
     42        return [webView stringByEvaluatingJavaScript:@"window.internals.hasSandboxMachLookupAccessToXPCServiceName('com.apple.WebKit.WebContent', 'com.apple.mobileassetd.v2')"].boolValue;
     43    };
     44
     45    ASSERT_FALSE(sandboxAccess());
     46
     47    [webView _grantAccessToAssetServices];
     48
     49    ASSERT_TRUE(sandboxAccess());
    3450}
    3551
    36 namespace WebKit {
    37 
    38 void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters&)
    39 {
    40 }
    41 
    42 void WebProcess::platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&)
    43 {
    44 }
    45 
    46 void WebProcess::platformTerminate()
    47 {
    48 }
    49 
    50 void WebProcess::platformSetCacheModel(CacheModel)
    51 {
    52 }
    53 
    54 } // namespace WebKit
     52#endif // WK_HAVE_C_SPI
Note: See TracChangeset for help on using the changeset viewer.