Index: Source/platform/mac/VersionUtilMac.mm |
diff --git a/Source/platform/mac/VersionUtilMac.mm b/Source/platform/mac/VersionUtilMac.mm |
index 29e22f995fbad849512194e6dae6a454c6b8e8e5..2eda3c825afc0bdfa3a197082aebaf72f234016c 100644 |
--- a/Source/platform/mac/VersionUtilMac.mm |
+++ b/Source/platform/mac/VersionUtilMac.mm |
@@ -5,22 +5,80 @@ |
#import "config.h" |
#import "platform/mac/VersionUtilMac.h" |
-#import <AppKit/AppKit.h> |
+#include <sstream> |
+#include <string> |
+#include <sys/utsname.h> |
-#ifndef NSAppKitVersionNumber10_9 |
-#define NSAppKitVersionNumber10_9 1265 |
-#endif |
+namespace { |
+ |
+// Returns the running system's Darwin major version. Don't call this, it's |
+// an implementation detail and its result is meant to be cached by |
+// MacOSXMinorVersion. |
+int DarwinMajorVersionInternal() |
+{ |
+ // The implementation of this method was copied from Chromium, with minor |
+ // modifications to avoid the use of methods in base/. For further details, |
+ // see |
+ // https://code.google.com/p/chromium/codesearch#chromium/src/base/mac/mac_util.mm |
+ struct utsname unameInfo; |
+ if (uname(&unameInfo) != 0) |
+ return 0; |
+ |
+ if (strcmp(unameInfo.sysname, "Darwin") != 0) |
+ return 0; |
+ |
+ std::string releaseString(unameInfo.release); |
+ size_t pos = releaseString.find_first_of('.'); |
+ if (pos == std::string::npos) |
+ return 0; |
+ |
+ std::istringstream convert(releaseString.substr(0, pos)); |
+ int majorVersion; |
+ if (!(convert >> majorVersion)) |
+ return 0; |
+ |
+ return majorVersion; |
+} |
+ |
+// Returns the running system's Mac OS X minor version. This is the |y| value |
+// in 10.y or 10.y.z. Don't call this, it's an implementation detail and the |
+// result is meant to be cached by MacOSXMinorVersion. |
+int MacOSXMinorVersionInternal() |
+{ |
+ int darwinMajorVersion = DarwinMajorVersionInternal(); |
+ return darwinMajorVersion - 4; |
+} |
+ |
+// Returns the running system's Mac OS X minor version. This is the |y| value |
+// in 10.y or 10.y.z. |
+int MacOSXMinorVersion() |
+{ |
+ static int minorVersion = MacOSXMinorVersionInternal(); |
+ return minorVersion; |
+} |
+ |
+enum { |
+ LION_MINOR_VERSION = 7, |
+ MAVERICKS_MINOR_VERSION = 9, |
+}; |
+ |
+} // namespace |
namespace blink { |
+bool IsOSLionOrEarlier() |
+{ |
+ return MacOSXMinorVersion() <= LION_MINOR_VERSION; |
+} |
+ |
bool IsOSMavericksOrEarlier() |
{ |
- return floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_9; |
+ return MacOSXMinorVersion() <= MAVERICKS_MINOR_VERSION; |
} |
bool IsOSMavericks() |
{ |
- return floor(NSAppKitVersionNumber) == NSAppKitVersionNumber10_9; |
+ return MacOSXMinorVersion() == MAVERICKS_MINOR_VERSION; |
} |
} // namespace blink |