- 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.