Title: [294831] trunk/Source/WebKit/UIProcess
Revision
294831
Author
[email protected]
Date
2022-05-25 15:45:26 -0700 (Wed, 25 May 2022)

Log Message

Prevent NSAttributedString crashes when AppSSO URLs are provided
https://bugs.webkit.org/show_bug.cgi?id=240739
<rdar://93656000>

Reviewed by Chris Dumez.

When NSAttributedString is used in a sandboxed app, it is prevented from checking in with the
AppSSO plugin manager, causing a Sandbox Violation and crash. We don't want NSAttributedString
to ever hand-off to AppSSO, so we should configure it's internal WKWebView to do the right thing.
Reviewed by Chris Dumez.

* Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm:
(+[_WKAttributedStringWebViewCache configuration]): Turn off AppSSO for string uses.
* Source/WebKit/UIProcess/Cocoa/NavigationState.mm:
(WebKit::trySOAuthorization): Use new lazy loading approach.
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::trySOAuthorization): Ditto.
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::WebsiteDataStore):
(WebKit::WebsiteDataStore::soAuthorizationCoordinator): Lazily initialize, and RELEASE_ASSERT
if we somehow reach this code without enabling AppSSO.
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
(WebKit::WebsiteDataStore::soAuthorizationCoordinator): Deleted.

Canonical link: https://commits.webkit.org/250981@main

Modified Paths

Diff

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm (294830 => 294831)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm	2022-05-25 22:36:19 UTC (rev 294830)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm	2022-05-25 22:45:26 UTC (rev 294831)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -144,6 +144,7 @@
         [configuration _setAllowsJavaScriptMarkup:NO];
         [configuration _setAllowsMetaRefresh:NO];
         [configuration _setAttachmentElementEnabled:YES];
+        [configuration preferences]._extensibleSSOEnabled = NO;
         [configuration _setInvisibleAutoplayNotPermitted:YES];
         [configuration _setMediaDataLoadsAutomatically:NO];
         [configuration _setNeedsStorageAccessFromFileURLsQuirk:NO];

Modified: trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm (294830 => 294831)


--- trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm	2022-05-25 22:36:19 UTC (rev 294830)
+++ trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm	2022-05-25 22:45:26 UTC (rev 294831)
@@ -424,7 +424,7 @@
         completionHandler(false);
         return;
     }
-    page.websiteDataStore().soAuthorizationCoordinator().tryAuthorize(WTFMove(navigationAction), page, WTFMove(completionHandler));
+    page.websiteDataStore().soAuthorizationCoordinator(page).tryAuthorize(WTFMove(navigationAction), page, WTFMove(completionHandler));
 #else
     completionHandler(false);
 #endif

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (294830 => 294831)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2022-05-25 22:36:19 UTC (rev 294830)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2022-05-25 22:45:26 UTC (rev 294831)
@@ -5996,7 +5996,7 @@
 static void trySOAuthorization(Ref<API::NavigationAction>&& navigationAction, WebPageProxy& page, NewPageCallback&& newPageCallback, UIClientCallback&& uiClientCallback)
 {
 #if HAVE(APP_SSO)
-    page.websiteDataStore().soAuthorizationCoordinator().tryAuthorize(WTFMove(navigationAction), page, WTFMove(newPageCallback), WTFMove(uiClientCallback));
+    page.websiteDataStore().soAuthorizationCoordinator(page).tryAuthorize(WTFMove(navigationAction), page, WTFMove(newPageCallback), WTFMove(uiClientCallback));
 #else
     uiClientCallback(WTFMove(navigationAction), WTFMove(newPageCallback));
 #endif

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (294830 => 294831)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2022-05-25 22:36:19 UTC (rev 294830)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2022-05-25 22:45:26 UTC (rev 294831)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014-2020 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -135,9 +135,6 @@
     , m_authenticatorManager(makeUniqueRef<AuthenticatorManager>())
 #endif
     , m_client(makeUniqueRef<WebsiteDataStoreClient>())
-#if HAVE(APP_SSO)
-    , m_soAuthorizationCoordinator(makeUniqueRef<SOAuthorizationCoordinator>())
-#endif
     , m_webLockRegistry(WebCore::LocalWebLockRegistry::create())
 {
     WTF::setProcessPrivileges(allPrivileges());
@@ -208,6 +205,17 @@
     return allDataStores().get(sessionID);
 }
 
+#if HAVE(APP_SSO)
+SOAuthorizationCoordinator& WebsiteDataStore::soAuthorizationCoordinator(const WebPageProxy& pageProxy)
+{
+    RELEASE_ASSERT(pageProxy.preferences().isExtensibleSSOEnabled());
+    if (!m_soAuthorizationCoordinator)
+        m_soAuthorizationCoordinator = WTF::makeUnique<SOAuthorizationCoordinator>();
+
+    return *m_soAuthorizationCoordinator;
+}
+#endif
+
 static Ref<NetworkProcessProxy> networkProcessForSession(PAL::SessionID sessionID)
 {
 #if PLATFORM(GTK) || PLATFORM(WPE)

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (294830 => 294831)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2022-05-25 22:36:19 UTC (rev 294830)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2022-05-25 22:45:26 UTC (rev 294831)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014-2020 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -336,7 +336,7 @@
 #endif
 
 #if HAVE(APP_SSO)
-    SOAuthorizationCoordinator& soAuthorizationCoordinator() { return m_soAuthorizationCoordinator.get(); }
+    SOAuthorizationCoordinator& soAuthorizationCoordinator(const WebPageProxy&);
 #endif
 
     static WTF::String defaultServiceWorkerRegistrationDirectory();
@@ -488,7 +488,7 @@
     RefPtr<NetworkProcessProxy> m_networkProcess;
 
 #if HAVE(APP_SSO)
-    UniqueRef<SOAuthorizationCoordinator> m_soAuthorizationCoordinator;
+    std::unique_ptr<SOAuthorizationCoordinator> m_soAuthorizationCoordinator;
 #endif
 #if ENABLE(INTELLIGENT_TRACKING_PREVENTION)
     mutable std::optional<WebCore::ThirdPartyCookieBlockingMode> m_thirdPartyCookieBlockingMode; // Lazily computed.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to