Title: [274374] trunk
Revision
274374
Author
mmaxfi...@apple.com
Date
2021-03-12 16:00:59 -0800 (Fri, 12 Mar 2021)

Log Message

[macOS] MobileAsset fonts are broken in Reader mode in Safari
https://bugs.webkit.org/show_bug.cgi?id=223062

Reviewed by Simon Fraser.

Source/WebCore/PAL:

* pal/spi/cf/CoreTextSPI.h:

Source/WebKit:

Here is an ASCII-art description of how various kinds of installed fonts work in WebKit:

+----------------------++-----------------------------------------+-----------------------------------------+
|                      || Safari                                  | Normal WKWebViews                       |
+======================++=========================================+=========================================+
| Preinstalled Fonts   || Just works                              | Just works                              |
+----------------------++-----------------------------------------+-----------------------------------------+
| MobileAsset Fonts    || Needs access to mobileassetd            | Needs access to mobileassetd but not    |
|                      || (and fontd for any subsequent requests  | fontd.                                  |
|                      || after the first MobileAsset font is     |                                         |
|                      || used)                                   | App calls _grantAccessToAssetServices() |
|                      ||                                         | to vend the sandbox extension           |
|                      || App calls _grantAccessToAssetServices() |                                         |
|                      || to vend the sandbox extension to        | And then the app needs to use           |
|                      || mobileassetd                            | InjectedBundle to activate the fonts in |
|                      ||                                         | the web process                         |
|                      || Web process also needs a call to        |                                         |
|                      || CTFontManagerEnableAllUserFonts() and a |                                         |
|                      || sandbox extension to access fontd       |                                         |
|                      ||                                         |                                         |
|                      || After this call is made, font requests  |                                         |
|                      || go through fontd (like for normal       |                                         |
|                      || WKWebViews)                             |                                         |
|                      ||                                         |                                         |
|                      || And then the app needs to use           |                                         |
|                      || InjectedBundle to activate the fonts in |                                         |
|                      || the web process                         |                                         |
+----------------------++-----------------------------------------+-----------------------------------------+
| User-installed Fonts || Intentionally doesn't work              | Needs access to fontd.                  |
|                      ||                                         |                                         |
|                      ||                                         | Just works (we already vend the sandbox |
|                      ||                                         | extension upon WKWebView creation)      |
+----------------------++-----------------------------------------+-----------------------------------------+

The part that this patch fixes is the "Web process also needs a call to CTFontManagerEnableAllUserFonts()
and a sandbox extension to access fontd" under MobileAsset Fonts / Safari.

>From looking at this chart, it becomes clear that a new message is necessary that does:
1. Adds a sandbox extension so the web process can access fontd
2. Calls CTFontManagerEnableAllUserFonts() to cause platform font routines to use fontd

So that's exactly what this patch does. It adds new WKWebView SPI,
_switchFromStaticFontRegistryToUserFontRegistry, which does these two things.

Even when we start using fontd, that doesn't allow user-installed fonts in WebKit in Safari, because we'll still
continue to use kCTFontUserInstalledAttribute / kCTFontFallbackOptionAttribute, just like we do in Big Sur.

Test: WebKit.MobileAssetSandboxCheck

* UIProcess/API/C/WKPreferencesRefPrivate.h: Correct the comment.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _switchFromStaticFontRegistryToUserFontRegistry]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::switchFromStaticFontRegistryToUserFontRegistry):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::creationParameters):
(WebKit::customizedReaderConfiguration): Deleted.
(WebKit::disableStaticFontRegistry): Deleted.
* UIProcess/WebPageProxy.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::~WebPage):
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):
* WebProcess/glib/WebProcessGLib.cpp:
(WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):
* WebProcess/playstation/WebProcessPlayStation.cpp:
(WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):
* WebProcess/win/WebProcessWin.cpp:
(WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):

Tools:

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit/FontRegistrySandboxCheck.mm: Copied from Source/WebKit/WebProcess/playstation/WebProcessPlayStation.cpp.
(TEST):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/PAL/ChangeLog (274373 => 274374)


--- trunk/Source/WebCore/PAL/ChangeLog	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebCore/PAL/ChangeLog	2021-03-13 00:00:59 UTC (rev 274374)
@@ -1,3 +1,12 @@
+2021-03-12  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        [macOS] MobileAsset fonts are broken in Reader mode in Safari
+        https://bugs.webkit.org/show_bug.cgi?id=223062
+
+        Reviewed by Simon Fraser.
+
+        * pal/spi/cf/CoreTextSPI.h:
+
 2021-03-10  Devin Rousso  <drou...@apple.com>
 
         Add plumbing for `defaultPlaybackRate` to AVKit

Modified: trunk/Source/WebCore/PAL/pal/spi/cf/CoreTextSPI.h (274373 => 274374)


--- trunk/Source/WebCore/PAL/pal/spi/cf/CoreTextSPI.h	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebCore/PAL/pal/spi/cf/CoreTextSPI.h	2021-03-13 00:00:59 UTC (rev 274374)
@@ -130,6 +130,7 @@
 CTFontDescriptorRef CTFontDescriptorCreateLastResort();
 
 CFArrayRef CTFontManagerCreateFontDescriptorsFromData(CFDataRef);
+bool CTFontManagerEnableAllUserFonts(bool postFontChangeNotification);
 
 void CTParagraphStyleSetCompositionLanguage(CTParagraphStyleRef, CTCompositionLanguage);
 

Modified: trunk/Source/WebKit/ChangeLog (274373 => 274374)


--- trunk/Source/WebKit/ChangeLog	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/ChangeLog	2021-03-13 00:00:59 UTC (rev 274374)
@@ -1,3 +1,83 @@
+2021-03-12  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        [macOS] MobileAsset fonts are broken in Reader mode in Safari
+        https://bugs.webkit.org/show_bug.cgi?id=223062
+
+        Reviewed by Simon Fraser.
+
+        Here is an ASCII-art description of how various kinds of installed fonts work in WebKit:
+
+        +----------------------++-----------------------------------------+-----------------------------------------+
+        |                      || Safari                                  | Normal WKWebViews                       |
+        +======================++=========================================+=========================================+
+        | Preinstalled Fonts   || Just works                              | Just works                              |
+        +----------------------++-----------------------------------------+-----------------------------------------+
+        | MobileAsset Fonts    || Needs access to mobileassetd            | Needs access to mobileassetd but not    |
+        |                      || (and fontd for any subsequent requests  | fontd.                                  |
+        |                      || after the first MobileAsset font is     |                                         |
+        |                      || used)                                   | App calls _grantAccessToAssetServices() |
+        |                      ||                                         | to vend the sandbox extension           |
+        |                      || App calls _grantAccessToAssetServices() |                                         |
+        |                      || to vend the sandbox extension to        | And then the app needs to use           |
+        |                      || mobileassetd                            | InjectedBundle to activate the fonts in |
+        |                      ||                                         | the web process                         |
+        |                      || Web process also needs a call to        |                                         |
+        |                      || CTFontManagerEnableAllUserFonts() and a |                                         |
+        |                      || sandbox extension to access fontd       |                                         |
+        |                      ||                                         |                                         |
+        |                      || After this call is made, font requests  |                                         |
+        |                      || go through fontd (like for normal       |                                         |
+        |                      || WKWebViews)                             |                                         |
+        |                      ||                                         |                                         |
+        |                      || And then the app needs to use           |                                         |
+        |                      || InjectedBundle to activate the fonts in |                                         |
+        |                      || the web process                         |                                         |
+        +----------------------++-----------------------------------------+-----------------------------------------+
+        | User-installed Fonts || Intentionally doesn't work              | Needs access to fontd.                  |
+        |                      ||                                         |                                         |
+        |                      ||                                         | Just works (we already vend the sandbox |
+        |                      ||                                         | extension upon WKWebView creation)      |
+        +----------------------++-----------------------------------------+-----------------------------------------+
+
+        The part that this patch fixes is the "Web process also needs a call to CTFontManagerEnableAllUserFonts()
+        and a sandbox extension to access fontd" under MobileAsset Fonts / Safari.
+
+        From looking at this chart, it becomes clear that a new message is necessary that does:
+        1. Adds a sandbox extension so the web process can access fontd
+        2. Calls CTFontManagerEnableAllUserFonts() to cause platform font routines to use fontd
+
+        So that's exactly what this patch does. It adds new WKWebView SPI,
+        _switchFromStaticFontRegistryToUserFontRegistry, which does these two things.
+
+        Even when we start using fontd, that doesn't allow user-installed fonts in WebKit in Safari, because we'll still
+        continue to use kCTFontUserInstalledAttribute / kCTFontFallbackOptionAttribute, just like we do in Big Sur.
+
+        Test: WebKit.MobileAssetSandboxCheck
+
+        * UIProcess/API/C/WKPreferencesRefPrivate.h: Correct the comment.
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _switchFromStaticFontRegistryToUserFontRegistry]):
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
+        (WebKit::WebPageProxy::switchFromStaticFontRegistryToUserFontRegistry):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::creationParameters):
+        (WebKit::customizedReaderConfiguration): Deleted.
+        (WebKit::disableStaticFontRegistry): Deleted.
+        * UIProcess/WebPageProxy.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::~WebPage):
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):
+        * WebProcess/glib/WebProcessGLib.cpp:
+        (WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):
+        * WebProcess/playstation/WebProcessPlayStation.cpp:
+        (WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):
+        * WebProcess/win/WebProcessWin.cpp:
+        (WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):
+
 2021-03-12  Youenn Fablet  <you...@apple.com>
 
         Enable video capture in GPUProcess by default on iOS

Modified: trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h (274373 => 274374)


--- trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h	2021-03-13 00:00:59 UTC (rev 274374)
@@ -547,7 +547,7 @@
 WK_EXPORT void WKPreferencesSetCSSOMViewScrollingAPIEnabled(WKPreferencesRef, bool);
 WK_EXPORT bool WKPreferencesGetCSSOMViewScrollingAPIEnabled(WKPreferencesRef);
 
-// Defaults to false.
+// Defaults to true.
 WK_EXPORT void WKPreferencesSetShouldAllowUserInstalledFonts(WKPreferencesRef, bool flag);
 WK_EXPORT bool WKPreferencesGetShouldAllowUserInstalledFonts(WKPreferencesRef);
 

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (274373 => 274374)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-03-13 00:00:59 UTC (rev 274374)
@@ -2239,6 +2239,12 @@
         _page->revokeAccessToAssetServices();
 }
 
+- (void)_switchFromStaticFontRegistryToUserFontRegistry
+{
+    if (_page)
+        _page->switchFromStaticFontRegistryToUserFontRegistry();
+}
+
 - (NSArray *)_certificateChain
 {
     if (WebKit::WebFrameProxy* mainFrame = _page->mainFrame())

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (274373 => 274374)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2021-03-13 00:00:59 UTC (rev 274374)
@@ -451,6 +451,16 @@
 - (void)_grantAccessToAssetServices WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(14.0));
 - (void)_revokeAccessToAssetServices WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(14.0));
 
+/*! @abstract If the WKWebView was created with _shouldAllowUserInstalledFonts = NO,
+ the web process will automatically use an in-process font registry, and its sandbox
+ will be restricted to forbid access to fontd. Otherwise, the web process will use
+ fontd to look up fonts instead of using the in-process registry, and the web
+ process's sandbox will automatically be extended to allow access to fontd. This
+ method represents a one-time, web-process-wide switch from using the in-process
+ font registry to using fontd, including granting the relevant sandbox extension.
+*/
+- (void)_switchFromStaticFontRegistryToUserFontRegistry WK_API_AVAILABLE(macos(WK_MAC_TBA));
+
 @end
 
 #if TARGET_OS_IPHONE

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm (274373 => 274374)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2021-03-13 00:00:59 UTC (rev 274374)
@@ -642,6 +642,18 @@
     process().send(Messages::WebProcess::RevokeAccessToAssetServices(), 0);
 }
 
+void WebPageProxy::switchFromStaticFontRegistryToUserFontRegistry()
+{
+    process().send(Messages::WebProcess::SwitchFromStaticFontRegistryToUserFontRegistry(fontdMachExtensionHandle()), 0);
+}
+
+SandboxExtension::Handle WebPageProxy::fontdMachExtensionHandle()
+{
+    SandboxExtension::Handle fontMachExtensionHandle;
+    SandboxExtension::createHandleForMachLookup("com.apple.fonts"_s, WTF::nullopt, fontMachExtensionHandle);
+    return fontMachExtensionHandle;
+}
+
 } // namespace WebKit
 
 #if USE(APPLE_INTERNAL_SDK)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (274373 => 274374)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-03-13 00:00:59 UTC (rev 274374)
@@ -7758,35 +7758,6 @@
 }
 #endif
 
-#if HAVE(STATIC_FONT_REGISTRY)
-static bool customizedReaderConfiguration()
-{
-    auto configuration = adoptCF(CFPreferencesCopyAppValue(CFSTR("ReaderConfiguration"), kCFPreferencesCurrentApplication));
-    if (!configuration || CFGetTypeID(configuration.get()) != CFDictionaryGetTypeID())
-        return false;
-    auto fontFamilyNameForLanguageTag = CFDictionaryGetValue(static_cast<CFDictionaryRef>(configuration.get()), CFSTR("fontFamilyNameForLanguageTag"));
-    if (!fontFamilyNameForLanguageTag || CFGetTypeID(fontFamilyNameForLanguageTag) != CFDictionaryGetTypeID())
-        return false;
-    auto fontFamilyNameForLanguageTagDictionary = static_cast<CFDictionaryRef>(fontFamilyNameForLanguageTag);
-    auto count = CFDictionaryGetCount(fontFamilyNameForLanguageTagDictionary);
-    Vector<CFTypeRef> fontFamilyValues(count);
-    CFDictionaryGetKeysAndValues(fontFamilyNameForLanguageTagDictionary, nullptr, fontFamilyValues.data());
-
-    for (auto font : fontFamilyValues) {
-        if (!font || CFGetTypeID(font) != CFStringGetTypeID())
-            continue;
-        if (String(static_cast<CFStringRef>(font)) != "System")
-            return true;
-    }
-    return false;
-}
-
-static bool disableStaticFontRegistry()
-{
-    return CFPreferencesGetAppBooleanValue(CFSTR("WebKitDisableStaticFontRegistry"), kCFPreferencesCurrentApplication, nullptr);
-}
-#endif // HAVE(STATIC_FONT_REGISTRY)
-
 WebPageCreationParameters WebPageProxy::creationParameters(WebProcessProxy& process, DrawingAreaProxy& drawingArea, RefPtr<API::WebsitePolicies>&& websitePolicies)
 {
     WebPageCreationParameters parameters;
@@ -7892,13 +7863,8 @@
     }
 #endif
 #if HAVE(STATIC_FONT_REGISTRY)
-    if (disableStaticFontRegistry()
-        || preferences().shouldAllowUserInstalledFonts()
-        || (WebCore::MacApplication::isSafari() && customizedReaderConfiguration())) {
-        SandboxExtension::Handle fontMachExtensionHandle;
-        SandboxExtension::createHandleForMachLookup("com.apple.fonts"_s, WTF::nullopt, fontMachExtensionHandle);
-        parameters.fontMachExtensionHandle = WTFMove(fontMachExtensionHandle);
-    }
+    if (preferences().shouldAllowUserInstalledFonts())
+        parameters.fontMachExtensionHandle = fontdMachExtensionHandle();
 #endif
 #if HAVE(APP_ACCENT_COLORS)
     parameters.accentColor = pageClient().accentColor();

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (274373 => 274374)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-03-13 00:00:59 UTC (rev 274374)
@@ -1776,6 +1776,7 @@
 
     void grantAccessToAssetServices();
     void revokeAccessToAssetServices();
+    void switchFromStaticFontRegistryToUserFontRegistry();
 
 #if PLATFORM(COCOA)
     void grantAccessToPreferenceService();
@@ -2414,6 +2415,8 @@
 
     static SandboxExtension::HandleArray createNetworkExtensionsSandboxExtensions(WebProcessProxy&);
 
+    static SandboxExtension::Handle fontdMachExtensionHandle();
+
     const Identifier m_identifier;
     WebCore::PageIdentifier m_webPageID;
     WeakPtr<PageClient> m_pageClient;

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (274373 => 274374)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2021-03-13 00:00:59 UTC (rev 274374)
@@ -1013,7 +1013,7 @@
             completionHandler(WTF::nullopt);
     }
 #endif
-    
+
 #if HAVE(STATIC_FONT_REGISTRY)
     if (m_fontExtension)
         m_fontExtension->revoke();

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (274373 => 274374)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2021-03-13 00:00:59 UTC (rev 274374)
@@ -341,6 +341,7 @@
 
     void grantAccessToAssetServices(WebKit::SandboxExtension::Handle&& mobileAssetV2Handle);
     void revokeAccessToAssetServices();
+    void switchFromStaticFontRegistryToUserFontRegistry(WebKit::SandboxExtension::Handle&& fontMachExtensionHandle);
 
 #if PLATFORM(MAC)
     void updatePageScreenProperties();
@@ -701,6 +702,7 @@
 #endif
 
     RefPtr<SandboxExtension> m_assetServiceV2Extension;
+    RefPtr<SandboxExtension> m_fontMachExtension;
 
 #if PLATFORM(COCOA)
     HashCountedSet<String> m_pendingPasteboardWriteCounts;

Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (274373 => 274374)


--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2021-03-13 00:00:59 UTC (rev 274374)
@@ -168,6 +168,7 @@
 
     GrantAccessToAssetServices(WebKit::SandboxExtension::Handle mobileAssetV2Handle)
     RevokeAccessToAssetServices()
+    SwitchFromStaticFontRegistryToUserFontRegistry(WebKit::SandboxExtension::Handle fontMachExtensionHandle)
 
 #if PLATFORM(COCOA)
     UnblockServicesRequiredByAccessibility(WebKit::SandboxExtension::HandleArray handleArray)

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (274373 => 274374)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2021-03-13 00:00:59 UTC (rev 274374)
@@ -135,6 +135,7 @@
 #import "WebSwitchingGPUClient.h"
 #import <WebCore/GraphicsContextGLOpenGLManager.h>
 #import <WebCore/ScrollbarThemeMac.h>
+#import <pal/spi/cf/CoreTextSPI.h>
 #import <pal/spi/mac/HIServicesSPI.h>
 #import <pal/spi/mac/NSScrollerImpSPI.h>
 #endif
@@ -1160,6 +1161,17 @@
     m_assetServiceV2Extension = nullptr;
 }
 
+void WebProcess::switchFromStaticFontRegistryToUserFontRegistry(WebKit::SandboxExtension::Handle&& fontMachExtensionHandle)
+{
+    if (m_fontMachExtension)
+        return;
+    m_fontMachExtension = SandboxExtension::create(WTFMove(fontMachExtensionHandle));
+    m_fontMachExtension->consume();
+#if HAVE(STATIC_FONT_REGISTRY)
+    CTFontManagerEnableAllUserFonts(true);
+#endif
+}
+
 void WebProcess::setScreenProperties(const ScreenProperties& properties)
 {
     WebCore::setScreenProperties(properties);

Modified: trunk/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp (274373 => 274374)


--- trunk/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp	2021-03-13 00:00:59 UTC (rev 274374)
@@ -136,4 +136,8 @@
 {
 }
 
+void WebProcess::switchFromStaticFontRegistryToUserFontRegistry(WebKit::SandboxExtension::Handle&&)
+{
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/playstation/WebProcessPlayStation.cpp (274373 => 274374)


--- trunk/Source/WebKit/WebProcess/playstation/WebProcessPlayStation.cpp	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/WebProcess/playstation/WebProcessPlayStation.cpp	2021-03-13 00:00:59 UTC (rev 274374)
@@ -52,4 +52,8 @@
 {
 }
 
+void WebProcess::switchFromStaticFontRegistryToUserFontRegistry(WebKit::SandboxExtension::Handle&&)
+{
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/win/WebProcessWin.cpp (274373 => 274374)


--- trunk/Source/WebKit/WebProcess/win/WebProcessWin.cpp	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Source/WebKit/WebProcess/win/WebProcessWin.cpp	2021-03-13 00:00:59 UTC (rev 274374)
@@ -59,4 +59,8 @@
 {
 }
 
+void WebProcess::switchFromStaticFontRegistryToUserFontRegistry(WebKit::SandboxExtension::Handle&&)
+{
+}
+
 } // namespace WebKit

Modified: trunk/Tools/ChangeLog (274373 => 274374)


--- trunk/Tools/ChangeLog	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Tools/ChangeLog	2021-03-13 00:00:59 UTC (rev 274374)
@@ -1,3 +1,14 @@
+2021-03-12  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        [macOS] MobileAsset fonts are broken in Reader mode in Safari
+        https://bugs.webkit.org/show_bug.cgi?id=223062
+
+        Reviewed by Simon Fraser.
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKit/FontRegistrySandboxCheck.mm: Copied from Source/WebKit/WebProcess/playstation/WebProcessPlayStation.cpp.
+        (TEST):
+
 2021-03-12  Youenn Fablet  <you...@apple.com>
 
         Enable video capture in GPUProcess by default on iOS

Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (274373 => 274374)


--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2021-03-12 23:52:47 UTC (rev 274373)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2021-03-13 00:00:59 UTC (rev 274374)
@@ -111,6 +111,7 @@
 		1C734B5320788C4800F430EA /* SystemColors.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C734B5220788C4800F430EA /* SystemColors.mm */; };
 		1C79201C234BDD9B001EAF23 /* CopyRTF.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C79201B234BDD9B001EAF23 /* CopyRTF.mm */; };
 		1C7FEB20207C0F2E00D23278 /* BackgroundColor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C7FEB1F207C0F2D00D23278 /* BackgroundColor.mm */; };
+		1C81802725FB09E200608B3E /* FontRegistrySandboxCheck.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C81802625FB09E200608B3E /* FontRegistrySandboxCheck.mm */; };
 		1C90420C2326E03C00BEF91E /* SelectionByWord.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C90420B2326E03C00BEF91E /* SelectionByWord.mm */; };
 		1C9EB8411E380DA1005C6442 /* ComplexTextController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C9EB8401E380DA1005C6442 /* ComplexTextController.cpp */; };
 		1CACADA1230620AE0007D54C /* WKWebViewOpaque.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CACADA0230620AD0007D54C /* WKWebViewOpaque.mm */; };
@@ -1814,6 +1815,7 @@
 		1C734B5220788C4800F430EA /* SystemColors.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SystemColors.mm; sourceTree = "<group>"; };
 		1C79201B234BDD9B001EAF23 /* CopyRTF.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CopyRTF.mm; sourceTree = "<group>"; };
 		1C7FEB1F207C0F2D00D23278 /* BackgroundColor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BackgroundColor.mm; sourceTree = "<group>"; };
+		1C81802625FB09E200608B3E /* FontRegistrySandboxCheck.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FontRegistrySandboxCheck.mm; sourceTree = "<group>"; };
 		1C90420B2326E03C00BEF91E /* SelectionByWord.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SelectionByWord.mm; sourceTree = "<group>"; };
 		1C9EB8401E380DA1005C6442 /* ComplexTextController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComplexTextController.cpp; sourceTree = "<group>"; };
 		1CACADA0230620AD0007D54C /* WKWebViewOpaque.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewOpaque.mm; sourceTree = "<group>"; };
@@ -3217,6 +3219,7 @@
 				C15CBB2F23F1FF1A00300CC7 /* BacklightLevelNotification.mm */,
 				C1692DC923D10DAE006E88F7 /* Battery.mm */,
 				C13D82D82416F13200A62793 /* EnableAccessibility.mm */,
+				1C81802625FB09E200608B3E /* FontRegistrySandboxCheck.mm */,
 				E394AE6E23F2303E005B4936 /* GrantAccessToMobileAssets.mm */,
 				E34A6D182412DE390012AB6E /* GrantAccessToPreferencesService.mm */,
 				E35B908123F60DD0000011FF /* LocalizedDeviceModel.mm */,
@@ -5317,6 +5320,7 @@
 				F4BC0B142146C849002A0478 /* FocusPreservationTests.mm in Sources */,
 				2E92B8FA2164A0C1005B64F0 /* FontAttributes.mm in Sources */,
 				F456AB1C213EDBA300CB2CEF /* FontManagerTests.mm in Sources */,
+				1C81802725FB09E200608B3E /* FontRegistrySandboxCheck.mm in Sources */,
 				1CF59AE321E68932006E37EC /* ForceLightAppearanceInBundle.mm in Sources */,
 				7CCE7EF51A411AE600447C4C /* ForceRepaint.cpp in Sources */,
 				F4FA282A24CD012700618A46 /* FormValidation.mm in Sources */,

Copied: trunk/Tools/TestWebKitAPI/Tests/WebKit/FontRegistrySandboxCheck.mm (from rev 274373, trunk/Source/WebKit/WebProcess/playstation/WebProcessPlayStation.cpp) (0 => 274374)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit/FontRegistrySandboxCheck.mm	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/FontRegistrySandboxCheck.mm	2021-03-13 00:00:59 UTC (rev 274374)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+
+#if WK_HAVE_C_SPI
+
+#import "PlatformUtilities.h"
+#import "TestWKWebView.h"
+#import <WebKit/WKPreferencesPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
+
+TEST(WebKit, FontdSandboxCheck)
+{
+    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    configuration.get().preferences._shouldAllowUserInstalledFonts = NO;
+    auto context = adoptWK(TestWebKitAPI::Util::createContextForInjectedBundleTest("InternalsInjectedBundleTest"));
+    configuration.get().processPool = (WKProcessPool *)context.get();
+    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300) configuration:configuration.get() addToWindow:YES]);
+
+    auto sandboxAccess = [&] {
+        return [webView stringByEvaluatingJavaScript:@"window.internals.hasSandboxMachLookupAccessToXPCServiceName('com.apple.WebKit.WebContent', 'com.apple.fonts')"].boolValue;
+    };
+
+#if HAVE(STATIC_FONT_REGISTRY)
+    ASSERT_FALSE(sandboxAccess());
+#endif
+
+    [webView _switchFromStaticFontRegistryToUserFontRegistry];
+
+    ASSERT_TRUE(sandboxAccess());
+}
+
+#endif // WK_HAVE_C_SPI
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to