widget/cocoa/nsCocoaFeatures.mm

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
     2  * This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #define MAC_OS_X_VERSION_MASK      0x0000FFFF
     7 #define MAC_OS_X_VERSION_10_6_HEX  0x00001060
     8 #define MAC_OS_X_VERSION_10_7_HEX  0x00001070
     9 #define MAC_OS_X_VERSION_10_8_HEX  0x00001080
    10 #define MAC_OS_X_VERSION_10_9_HEX  0x00001090
    11 #define MAC_OS_X_VERSION_10_10_HEX 0x000010A0
    13 // This API will not work for OS X 10.10, see Gestalt.h.
    15 #include "nsCocoaFeatures.h"
    16 #include "nsCocoaUtils.h"
    17 #include "nsDebug.h"
    18 #include "nsObjCExceptions.h"
    20 #import <Cocoa/Cocoa.h>
    22 int32_t nsCocoaFeatures::mOSXVersion = 0;
    23 int32_t nsCocoaFeatures::mOSXVersionMajor = 0;
    24 int32_t nsCocoaFeatures::mOSXVersionMinor = 0;
    25 int32_t nsCocoaFeatures::mOSXVersionBugFix = 0;
    27 static int intAtStringIndex(NSArray *array, int index)
    28 {
    29     return [(NSString *)[array objectAtIndex:index] integerValue];
    30 }
    32 static void GetSystemVersion(int &major, int &minor, int &bugfix)
    33 {
    34     major = minor = bugfix = 0;
    36     NSString* versionString = [[NSDictionary dictionaryWithContentsOfFile:
    37                                 @"/System/Library/CoreServices/SystemVersion.plist"] objectForKey:@"ProductVersion"];
    38     NSArray* versions = [versionString componentsSeparatedByString:@"."];
    39     NSUInteger count = [versions count];
    40     if (count > 0) {
    41         major = intAtStringIndex(versions, 0);
    42         if (count > 1) {
    43             minor = intAtStringIndex(versions, 1);
    44             if (count > 2) {
    45                 bugfix = intAtStringIndex(versions, 2);
    46             }
    47         }
    48     }
    49 }
    51 /*static*/ void
    52 nsCocoaFeatures::InitializeVersionNumbers()
    53 {
    54     NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
    56     // Provide an autorelease pool to avoid leaking Cocoa objects,
    57     // as this gets called before the main autorelease pool is in place.
    58     nsAutoreleasePool localPool;
    60     int major, minor, bugfix;
    61     GetSystemVersion(major, minor, bugfix);
    63     mOSXVersionMajor = major;
    64     mOSXVersionMinor = minor;
    65     mOSXVersionBugFix = bugfix;
    67     if (major < 10) {
    68         NS_ERROR("Couldn't determine OS X version, assuming 10.6");
    69         mOSXVersion = MAC_OS_X_VERSION_10_6_HEX;
    70         mOSXVersionMajor = 10;
    71         mOSXVersionMinor = 6;
    72         mOSXVersionBugFix = 0;
    73     } else if (minor < 6) {
    74         NS_ERROR("OS X version too old, assuming 10.6");
    75         mOSXVersion = MAC_OS_X_VERSION_10_6_HEX;
    76         mOSXVersionMinor = 6;
    77         mOSXVersionBugFix = 0;
    78     } else {
    79         mOSXVersion = 0x1000 + (minor << 4);
    80     }
    82     NS_OBJC_END_TRY_ABORT_BLOCK;
    83 }
    85 /* static */ int32_t
    86 nsCocoaFeatures::OSXVersion()
    87 {
    88     if (!mOSXVersion) {
    89         InitializeVersionNumbers();
    90     }
    91     return mOSXVersion;
    92 }
    94 /* static */ int32_t
    95 nsCocoaFeatures::OSXVersionMajor()
    96 {
    97     if (!mOSXVersion) {
    98         InitializeVersionNumbers();
    99     }
   100     return mOSXVersionMajor;
   101 }
   103 /* static */ int32_t
   104 nsCocoaFeatures::OSXVersionMinor()
   105 {
   106     if (!mOSXVersion) {
   107         InitializeVersionNumbers();
   108     }
   109     return mOSXVersionMinor;
   110 }
   112 /* static */ int32_t
   113 nsCocoaFeatures::OSXVersionBugFix()
   114 {
   115     if (!mOSXVersion) {
   116         InitializeVersionNumbers();
   117     }
   118     return mOSXVersionBugFix;
   119 }
   121 /* static */ bool
   122 nsCocoaFeatures::SupportCoreAnimationPlugins()
   123 {
   124     // Disallow Core Animation on 10.5 because of crashes.
   125     // See Bug 711564.
   126     return (OSXVersion() >= MAC_OS_X_VERSION_10_6_HEX);
   127 }
   129 /* static */ bool
   130 nsCocoaFeatures::OnLionOrLater()
   131 {
   132     return (OSXVersion() >= MAC_OS_X_VERSION_10_7_HEX);
   133 }
   135 /* static */ bool
   136 nsCocoaFeatures::OnMountainLionOrLater()
   137 {
   138     return (OSXVersion() >= MAC_OS_X_VERSION_10_8_HEX);
   139 }
   141 /* static */ bool
   142 nsCocoaFeatures::OnMavericksOrLater()
   143 {
   144     return (OSXVersion() >= MAC_OS_X_VERSION_10_9_HEX);
   145 }
   147 /* static */ bool
   148 nsCocoaFeatures::OnYosemiteOrLater()
   149 {
   150     return (OSXVersion() >= MAC_OS_X_VERSION_10_10_HEX);
   151 }

mercurial