REGRESSION(200114): Netflix app does not see ChromeCast
[WebKit-https.git] / Source / JavaScriptCore / API / JSWrapperMap.mm
index 23e4799..ef7ec47 100644 (file)
@@ -27,7 +27,6 @@
 #import "JavaScriptCore.h"
 
 #if JSC_OBJC_API_ENABLED
-
 #import "APICast.h"
 #import "JSAPIWrapperObject.h"
 #import "JSCInlines.h"
 #include <mach-o/dyld.h>
 
 #if PLATFORM(APPLETV)
-#elif PLATFORM(IOS)
-static const uint32_t firstSDKVersionWithInitConstructorSupport = 0x80000; // iOS 8.0.0
+#else
+static const int32_t firstJavaScriptCoreVersionWithInitConstructorSupport = 0x21A0400; // 538.4.0
+#if PLATFORM(IOS)
+static const uint32_t firstSDKVersionWithInitConstructorSupport = DYLD_IOS_VERSION_10_0;
 #elif PLATFORM(MAC)
 static const uint32_t firstSDKVersionWithInitConstructorSupport = 0xA0A00; // OSX 10.10.0
 #endif
+#endif
 
 @class JSObjCClassInfo;
 
@@ -657,9 +659,20 @@ bool supportsInitMethodConstructors()
     // There are no old clients on Apple TV, so there's no need for backwards compatibility.
     return true;
 #else
+    // First check to see the version of JavaScriptCore we directly linked against.
+    static int32_t versionOfLinkTimeJavaScriptCore = 0;
+    if (!versionOfLinkTimeJavaScriptCore)
+        versionOfLinkTimeJavaScriptCore = NSVersionOfLinkTimeLibrary("JavaScriptCore");
+    // Only do the link time version comparison if we linked directly with JavaScriptCore
+    if (versionOfLinkTimeJavaScriptCore != -1)
+        return versionOfLinkTimeJavaScriptCore >= firstJavaScriptCoreVersionWithInitConstructorSupport;
+
+    // If we didn't link directly with JavaScriptCore,
+    // base our check on what SDK was used to build the application.
     static uint32_t programSDKVersion = 0;
     if (!programSDKVersion)
         programSDKVersion = dyld_get_program_sdk_version();
+
     return programSDKVersion >= firstSDKVersionWithInitConstructorSupport;
 #endif
 }