Title: [295330] branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess
Revision
295330
Author
alanc...@apple.com
Date
2022-06-06 22:47:34 -0700 (Mon, 06 Jun 2022)

Log Message

Cherry-pick r294831. rdar://problem/93656000

    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

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@294831 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm (295329 => 295330)


--- branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm	2022-06-07 05:47:29 UTC (rev 295329)
+++ branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm	2022-06-07 05:47:34 UTC (rev 295330)
@@ -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: branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/Cocoa/NavigationState.mm (295329 => 295330)


--- branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/Cocoa/NavigationState.mm	2022-06-07 05:47:29 UTC (rev 295329)
+++ branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/Cocoa/NavigationState.mm	2022-06-07 05:47:34 UTC (rev 295330)
@@ -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: branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebPageProxy.cpp (295329 => 295330)


--- branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2022-06-07 05:47:29 UTC (rev 295329)
+++ branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2022-06-07 05:47:34 UTC (rev 295330)
@@ -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: branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (295329 => 295330)


--- branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2022-06-07 05:47:29 UTC (rev 295329)
+++ branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2022-06-07 05:47:34 UTC (rev 295330)
@@ -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: branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (295329 => 295330)


--- branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2022-06-07 05:47:29 UTC (rev 295329)
+++ branches/safari-7614.1.14.10-branch/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2022-06-07 05:47:34 UTC (rev 295330)
@@ -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
@@ -335,7 +335,7 @@
 #endif
 
 #if HAVE(APP_SSO)
-    SOAuthorizationCoordinator& soAuthorizationCoordinator() { return m_soAuthorizationCoordinator.get(); }
+    SOAuthorizationCoordinator& soAuthorizationCoordinator(const WebPageProxy&);
 #endif
 
     static WTF::String defaultServiceWorkerRegistrationDirectory();
@@ -487,7 +487,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
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to