Transition "WebKit Library Version" checks to SDK version checks.
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Feb 2017 20:37:34 +0000 (20:37 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Feb 2017 20:37:34 +0000 (20:37 +0000)
<rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056

Reviewed by Geoffrey Garen.

Source/WebKit2:

Library version linkedOnOrAfter checks are error prone since apps may not link directly to WebKit.

We always know what version of the SDK an app was built with, so we should use SDK version checks
whenever possible.

* Shared/Cocoa/CompletionHandlerCallChecker.mm:
(WebKit::shouldThrowExceptionForDuplicateCompletionHandlerCall):

* UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
(-[WKWebViewConfiguration init]):

Add SDKVersion form of the linkedOnOrAfter check, and transition over the current Library Version checks:
* UIProcess/Cocoa/VersionChecks.h:
* UIProcess/Cocoa/VersionChecks.mm:
(WebKit::linkedOnOrAfter):

* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::isNetworkCacheEnabled):

Source/WTF:

* wtf/spi/darwin/dyldSPI.h: Add entries for the iOS 10.3, macOS 10.11, and macOS 10.12.4 SDKs.

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

Source/WTF/ChangeLog
Source/WTF/wtf/spi/darwin/dyldSPI.h
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/Cocoa/CompletionHandlerCallChecker.mm
Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm
Source/WebKit2/UIProcess/Cocoa/VersionChecks.h
Source/WebKit2/UIProcess/Cocoa/VersionChecks.mm
Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm

index cb3f181..41ba83b 100644 (file)
@@ -1,3 +1,12 @@
+2017-02-09  Brady Eidson  <beidson@apple.com>
+
+        Transition "WebKit Library Version" checks to SDK version checks.
+        <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056
+
+        Reviewed by Geoffrey Garen.
+
+        * wtf/spi/darwin/dyldSPI.h: Add entries for the iOS 10.3, macOS 10.11, and macOS 10.12.4 SDKs.
+
 2017-02-06  Jer Noble  <jer.noble@apple.com>
 
         Playback stalls when a SourceBuffer append causes frame eviction
index 658db12..83a7dc5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #define DYLD_IOS_VERSION_7_0 0x00070000
 #define DYLD_IOS_VERSION_9_0 0x00090000
 #define DYLD_IOS_VERSION_10_0 0x000A0000
+#define DYLD_IOS_VERSION_10_3 0x000A0300
 
+#define DYLD_MACOSX_VERSION_10_11 0x000A0B00
 #define DYLD_MACOSX_VERSION_10_12 0x000A0C00
+#define DYLD_MACOSX_VERSION_10_12_4 0x000A0C04
 
 #endif
 
index 735ebe8..8560021 100644 (file)
@@ -1,3 +1,29 @@
+2017-02-09  Brady Eidson  <beidson@apple.com>
+
+        Transition "WebKit Library Version" checks to SDK version checks.
+        <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056
+
+        Reviewed by Geoffrey Garen.
+
+        Library version linkedOnOrAfter checks are error prone since apps may not link directly to WebKit.
+        
+        We always know what version of the SDK an app was built with, so we should use SDK version checks
+        whenever possible.
+
+        * Shared/Cocoa/CompletionHandlerCallChecker.mm:
+        (WebKit::shouldThrowExceptionForDuplicateCompletionHandlerCall):
+        
+        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
+        (-[WKWebViewConfiguration init]):
+        
+        Add SDKVersion form of the linkedOnOrAfter check, and transition over the current Library Version checks:
+        * UIProcess/Cocoa/VersionChecks.h: 
+        * UIProcess/Cocoa/VersionChecks.mm:
+        (WebKit::linkedOnOrAfter):
+        
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::WebProcessPool::isNetworkCacheEnabled):
+
 2017-02-09  Antti Koivisto  <antti@apple.com>
 
         Use all cacheable speculatively loaded responses
index 1ccc12f..42083e6 100644 (file)
@@ -67,7 +67,7 @@ static bool shouldThrowExceptionForDuplicateCompletionHandlerCall()
     static bool shouldThrowException;
     static std::once_flag once;
     std::call_once(once, [] {
-        shouldThrowException = linkedOnOrAfter(LibraryVersion::FirstWithExceptionsForDuplicateCompletionHandlerCalls);
+        shouldThrowException = linkedOnOrAfter(SDKVersion::FirstWithExceptionsForDuplicateCompletionHandlerCalls);
     });
     return shouldThrowException;
 }
index 50dfa28..8c2c134 100644 (file)
@@ -145,7 +145,7 @@ private:
     _inlineMediaPlaybackRequiresPlaysInlineAttribute = !_allowsInlineMediaPlayback;
     _allowsInlineMediaPlaybackAfterFullscreen = !_allowsInlineMediaPlayback;
     _mediaDataLoadsAutomatically = NO;
-    if (linkedOnOrAfter(WebKit::LibraryVersion::FirstWithMediaTypesRequiringUserActionForPlayback))
+    if (linkedOnOrAfter(WebKit::SDKVersion::FirstWithMediaTypesRequiringUserActionForPlayback))
         _mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAudio;
     else
         _mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll;
index 08593bf..051f079 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 
 #pragma once
 
+#import <wtf/spi/darwin/dyldSPI.h>
+
 namespace WebKit {
 
+enum class SDKVersion : uint32_t {
+#if PLATFORM(IOS)
+    FirstWithNetworkCache = DYLD_IOS_VERSION_9_0,
+    FirstWithMediaTypesRequiringUserActionForPlayback = DYLD_IOS_VERSION_10_0,
+    FirstWithExceptionsForDuplicateCompletionHandlerCalls = DYLD_IOS_VERSION_10_3,
+#elif PLATFORM(MAC)
+    FirstWithNetworkCache = DYLD_MACOSX_VERSION_10_11,
+    FirstWithMediaTypesRequiringUserActionForPlayback = DYLD_MACOSX_VERSION_10_12,
+    FirstWithExceptionsForDuplicateCompletionHandlerCalls = DYLD_MACOSX_VERSION_10_12_4,
+#endif
+};
+
+bool linkedOnOrAfter(SDKVersion);
+
 /*
-    Version numbers are based on the 'current library version' specified in the WebKit build rules.
+    During ToT WebKit development is is not always possible to use an SDK version, so we instead use 
+    WebKit Library Version numbering.
+
+    This technique has a big drawback; The check will fail if the application doesn't directly link
+    against WebKit (e.g., It links to a different framework which links to WebKit).
+
+    Once a new WebKit Library Version is released in an SDK, all linkedOnOrAfter checks should be moved
+    from LibraryVersions to SDKVersions.
+
+    Library version numbers are based on the 'current library version' specified in the WebKit build rules.
     All of these methods return or take version numbers with each part shifted to the left 2 bytes.
     For example the version 1.2.3 is returned as 0x00010203 and version 200.3.5 is returned as 0x00C80305
     A version of -1 is returned if the main executable did not link against WebKit.
 
-    Please use the current WebKit version number, available in WebKit2/Configurations/Version.xcconfig,
+    Use the current WebKit version number, available in WebKit2/Configurations/Version.xcconfig,
     when adding a new version constant.
 */
+
 enum class LibraryVersion {
-    FirstWithNetworkCache = 0x02590116, // 601.1.22
-    FirstWithMediaTypesRequiringUserActionForPlayback = 0x025A0121, // 602.1.33
-    FirstWithExceptionsForDuplicateCompletionHandlerCalls = 0x025B0111, // 603.1.17
 };
 
 bool linkedOnOrAfter(LibraryVersion);
index 2e0dfed..aec048e 100644 (file)
@@ -55,4 +55,9 @@ bool linkedOnOrAfter(LibraryVersion version)
     return linkedVersion >= static_cast<int>(version);
 }
 
+bool linkedOnOrAfter(SDKVersion version)
+{
+    return dyld_get_program_sdk_version() >= static_cast<uint32_t>(version);
+}
+
 }
index 8ecbd67..2767df9 100644 (file)
@@ -462,7 +462,7 @@ bool WebProcessPool::isNetworkCacheEnabled()
 
     bool networkCacheEnabledByDefaults = [defaults boolForKey:WebKitNetworkCacheEnabledDefaultsKey];
 
-    return networkCacheEnabledByDefaults && linkedOnOrAfter(LibraryVersion::FirstWithNetworkCache);
+    return networkCacheEnabledByDefaults && linkedOnOrAfter(SDKVersion::FirstWithNetworkCache);
 #else
     return false;
 #endif