Title: [244146] trunk/Source/WebKit
- Revision
- 244146
- Author
- cdu...@apple.com
- Date
- 2019-04-10 13:44:34 -0700 (Wed, 10 Apr 2019)
Log Message
Unable to run system Safari with trunk WebKit
https://bugs.webkit.org/show_bug.cgi?id=196777
<rdar://problem/49784574>
Reviewed by Alex Christensen.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _initializeWithConfiguration:]):
Add a linkedOnAfter check so that throwing exceptions when related web views use a different
data store only happens for apps rebuilt using recent SDK.
* UIProcess/Cocoa/VersionChecks.h:
* UIProcess/Cocoa/VersionChecks.mm:
(WebKit::linkedOnOrAfter):
- By default, linkedOnOrAfter assumed Safari / MobileSafari is always linked-on-after. To satisfy my
use cases, I introduced a new AssumeSafariIsAlwaysLinkedOnAfter parameter so that this behavior can
be controlled by the caller.
- In the header, DYLD_IOS_VERSION_* / DYLD_MACOS_VERSION_* constants are 0 when building with the
non-internal SDK. As a result, the check instead linkedOnOrAfter() would cause us to always return
true, which was wrong. I therefore updated the check inside linkedOnOrAfter() to special-case the
0 value for sdkVersion.
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (244145 => 244146)
--- trunk/Source/WebKit/ChangeLog 2019-04-10 20:31:04 UTC (rev 244145)
+++ trunk/Source/WebKit/ChangeLog 2019-04-10 20:44:34 UTC (rev 244146)
@@ -1,5 +1,29 @@
2019-04-10 Chris Dumez <cdu...@apple.com>
+ Unable to run system Safari with trunk WebKit
+ https://bugs.webkit.org/show_bug.cgi?id=196777
+ <rdar://problem/49784574>
+
+ Reviewed by Alex Christensen.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _initializeWithConfiguration:]):
+ Add a linkedOnAfter check so that throwing exceptions when related web views use a different
+ data store only happens for apps rebuilt using recent SDK.
+
+ * UIProcess/Cocoa/VersionChecks.h:
+ * UIProcess/Cocoa/VersionChecks.mm:
+ (WebKit::linkedOnOrAfter):
+ - By default, linkedOnOrAfter assumed Safari / MobileSafari is always linked-on-after. To satisfy my
+ use cases, I introduced a new AssumeSafariIsAlwaysLinkedOnAfter parameter so that this behavior can
+ be controlled by the caller.
+ - In the header, DYLD_IOS_VERSION_* / DYLD_MACOS_VERSION_* constants are 0 when building with the
+ non-internal SDK. As a result, the check instead linkedOnOrAfter() would cause us to always return
+ true, which was wrong. I therefore updated the check inside linkedOnOrAfter() to special-case the
+ 0 value for sdkVersion.
+
+2019-04-10 Chris Dumez <cdu...@apple.com>
+
Regression(r240562) Audio sometimes keeps playing in previous process after a process-swap
https://bugs.webkit.org/show_bug.cgi?id=196774
<rdar://problem/49460572>
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (244145 => 244146)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2019-04-10 20:31:04 UTC (rev 244145)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2019-04-10 20:44:34 UTC (rev 244146)
@@ -552,7 +552,7 @@
WKProcessPool *relatedWebViewProcessPool = [relatedWebView->_configuration processPool];
if (processPool && processPool != relatedWebViewProcessPool)
[NSException raise:NSInvalidArgumentException format:@"Related web view %@ has process pool %@ but configuration specifies a different process pool %@", relatedWebView, relatedWebViewProcessPool, configuration.processPool];
- if ([relatedWebView->_configuration websiteDataStore] != [_configuration websiteDataStore])
+ if ([relatedWebView->_configuration websiteDataStore] != [_configuration websiteDataStore] && linkedOnOrAfter(WebKit::SDKVersion::FirstWithExceptionsForRelatedWebViewsUsingDifferentDataStores, WebKit::AssumeSafariIsAlwaysLinkedOnAfter::No))
[NSException raise:NSInvalidArgumentException format:@"Related web view %@ has data store %@ but configuration specifies a different data store %@", relatedWebView, [relatedWebView->_configuration websiteDataStore], [_configuration websiteDataStore]];
[_configuration setProcessPool:relatedWebViewProcessPool];
Modified: trunk/Source/WebKit/UIProcess/Cocoa/VersionChecks.h (244145 => 244146)
--- trunk/Source/WebKit/UIProcess/Cocoa/VersionChecks.h 2019-04-10 20:31:04 UTC (rev 244145)
+++ trunk/Source/WebKit/UIProcess/Cocoa/VersionChecks.h 2019-04-10 20:44:34 UTC (rev 244146)
@@ -39,6 +39,13 @@
#define DYLD_MACOS_VERSION_FIRST_WHERE_DOWNLOAD_ATTRIBUTE_DOES_NOT_OVERRIDE_NAVIGATION_DELEGATE 0
#endif
+#ifndef DYLD_IOS_VERSION_FIRST_WITH_EXCEPTIONS_FOR_RELATED_WEBVIEWS_USING_DIFFERENT_DATA_STORES
+#define DYLD_IOS_VERSION_FIRST_WITH_EXCEPTIONS_FOR_RELATED_WEBVIEWS_USING_DIFFERENT_DATA_STORES 0
+#endif
+#ifndef DYLD_MACOS_VERSION_FIRST_WITH_EXCEPTIONS_FOR_RELATED_WEBVIEWS_USING_DIFFERENT_DATA_STORES
+#define DYLD_MACOS_VERSION_FIRST_WITH_EXCEPTIONS_FOR_RELATED_WEBVIEWS_USING_DIFFERENT_DATA_STORES 0
+#endif
+
#ifndef DYLD_IOS_VERSION_FIRST_WITH_DEVICE_ORIENTATION_AND_MOTION_PERMISSION_API
#define DYLD_IOS_VERSION_FIRST_WITH_DEVICE_ORIENTATION_AND_MOTION_PERMISSION_API 0
#endif
@@ -63,6 +70,7 @@
FirstWhereDownloadAttributeDoesNotOverrideNavigationDelegate = DYLD_IOS_VERSION_FIRST_WHERE_DOWNLOAD_ATTRIBUTE_DOES_NOT_OVERRIDE_NAVIGATION_DELEGATE,
FirstWithDeviceOrientationAndMotionPermissionAPI = DYLD_IOS_VERSION_FIRST_WITH_DEVICE_ORIENTATION_AND_MOTION_PERMISSION_API,
FirstThatDecidesPolicyBeforeLoadingQuickLookPreview = DYLD_IOS_VERSION_FIRST_THAT_DECIDES_POLICY_BEFORE_LOADING_QUICK_LOOK_PREVIEW,
+ FirstWithExceptionsForRelatedWebViewsUsingDifferentDataStores = DYLD_IOS_VERSION_FIRST_WITH_EXCEPTIONS_FOR_RELATED_WEBVIEWS_USING_DIFFERENT_DATA_STORES,
#elif PLATFORM(MAC)
FirstWithNetworkCache = DYLD_MACOSX_VERSION_10_11,
FirstWithExceptionsForDuplicateCompletionHandlerCalls = DYLD_MACOSX_VERSION_10_13,
@@ -71,9 +79,11 @@
FirstWithMainThreadReleaseAssertionInWebPageProxy = DYLD_MACOSX_VERSION_10_14,
FirstWithSnapshotAfterScreenUpdates = DYLD_MACOS_VERSION_FIRST_WITH_SNAPSHOT_AFTER_SCREEN_UPDATES,
FirstWhereDownloadAttributeDoesNotOverrideNavigationDelegate = DYLD_MACOS_VERSION_FIRST_WHERE_DOWNLOAD_ATTRIBUTE_DOES_NOT_OVERRIDE_NAVIGATION_DELEGATE,
+ FirstWithExceptionsForRelatedWebViewsUsingDifferentDataStores = DYLD_MACOS_VERSION_FIRST_WITH_EXCEPTIONS_FOR_RELATED_WEBVIEWS_USING_DIFFERENT_DATA_STORES,
#endif
};
-bool linkedOnOrAfter(SDKVersion);
+enum class AssumeSafariIsAlwaysLinkedOnAfter : bool { No, Yes };
+bool linkedOnOrAfter(SDKVersion, AssumeSafariIsAlwaysLinkedOnAfter = AssumeSafariIsAlwaysLinkedOnAfter::Yes);
}
Modified: trunk/Source/WebKit/UIProcess/Cocoa/VersionChecks.mm (244145 => 244146)
--- trunk/Source/WebKit/UIProcess/Cocoa/VersionChecks.mm 2019-04-10 20:31:04 UTC (rev 244145)
+++ trunk/Source/WebKit/UIProcess/Cocoa/VersionChecks.mm 2019-04-10 20:44:34 UTC (rev 244146)
@@ -34,12 +34,12 @@
static NSString * const WebKitLinkedOnOrAfterEverythingKey = @"WebKitLinkedOnOrAfterEverything";
-bool linkedOnOrAfter(SDKVersion sdkVersion)
+bool linkedOnOrAfter(SDKVersion sdkVersion, AssumeSafariIsAlwaysLinkedOnAfter assumeSafariIsAlwaysLinkedOnAfter)
{
- static bool linkedOnOrAfterEverything;
- static std::once_flag once;
- std::call_once(once, [] {
- bool isSafari = false;
+ static bool linkedOnOrAfterEverything = false;
+ static bool isSafari = false;
+ static std::once_flag once;
+ std::call_once(once, [] {
#if PLATFORM(IOS_FAMILY)
if (WebCore::IOSApplication::isMobileSafari())
isSafari = true;
@@ -48,11 +48,18 @@
isSafari = true;
#endif
- if (isSafari || [[NSUserDefaults standardUserDefaults] boolForKey:WebKitLinkedOnOrAfterEverythingKey])
+ if ([[NSUserDefaults standardUserDefaults] boolForKey:WebKitLinkedOnOrAfterEverythingKey])
linkedOnOrAfterEverything = true;
});
- return linkedOnOrAfterEverything ? true : dyld_get_program_sdk_version() >= static_cast<uint32_t>(sdkVersion);
+ if (UNLIKELY(linkedOnOrAfterEverything))
+ return true;
+
+ if (isSafari && assumeSafariIsAlwaysLinkedOnAfter == AssumeSafariIsAlwaysLinkedOnAfter::Yes)
+ return true;
+
+ auto sdkVersionAsInteger = static_cast<uint32_t>(sdkVersion);
+ return sdkVersionAsInteger && dyld_get_program_sdk_version() >= sdkVersionAsInteger;
}
}
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes