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