15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_MAC_MAC_UTIL_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <AvailabilityMacros.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <Carbon/Carbon.h> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(rohitrao): Clean up sites that include mac_util.h and remove this line. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/foundation_util.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__OBJC__) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Foundation/Foundation.h> 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // __OBJC__ 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSImage; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // __OBJC__ 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FilePath; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace mac { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Full screen modes, in increasing order of priority. More permissive modes 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// take predecence. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum FullScreenMode { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFullScreenModeHideAll = 0, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFullScreenModeHideDock = 1, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFullScreenModeAutoHideAll = 2, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kNumFullScreenModes = 3, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // kFullScreenModeNormal is not a valid FullScreenMode, but it is useful to 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // other classes, so we include it here. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFullScreenModeNormal = 10, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT std::string PathFromFSRef(const FSRef& ref); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool FSRefFromPath(const std::string& path, FSRef* ref); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns an sRGB color space. The return value is a static value; do not 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// release it! 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT CGColorSpaceRef GetSRGBColorSpace(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Returns the generic RGB color space. The return value is a static value; do 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// not release it! 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochBASE_EXPORT CGColorSpaceRef GetGenericRGBColorSpace(); 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the color space being used by the main display. The return value 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is a static value; do not release it! 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT CGColorSpaceRef GetSystemColorSpace(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Add a full screen request for the given |mode|. Must be paired with a 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ReleaseFullScreen() call for the same |mode|. This does not by itself create 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a fullscreen window; rather, it manages per-application state related to 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// hiding the dock and menubar. Must be called on the main thread. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void RequestFullScreen(FullScreenMode mode); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Release a request for full screen mode. Must be matched with a 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RequestFullScreen() call for the same |mode|. As with RequestFullScreen(), 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// this does not affect windows directly, but rather manages per-application 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// state. For example, if there are no other outstanding 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |kFullScreenModeAutoHideAll| requests, this will reshow the menu bar. Must 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be called on main thread. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void ReleaseFullScreen(FullScreenMode mode); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convenience method to switch the current fullscreen mode. This has the same 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// net effect as a ReleaseFullScreen(from_mode) call followed immediately by a 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RequestFullScreen(to_mode). Must be called on the main thread. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void SwitchFullScreenModes(FullScreenMode from_mode, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FullScreenMode to_mode); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set the visibility of the cursor. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void SetCursorVisibility(bool visible); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Should windows miniaturize on a double-click (on the title bar)? 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool ShouldWindowsMiniaturizeOnDoubleClick(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Activates the process with the given PID. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void ActivateProcess(pid_t pid); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if this process is in the foreground, meaning that it's the 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// frontmost process, the one whose menu bar is shown at the top of the main 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// display. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool AmIForeground(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Excludes the file given by |file_path| from being backed up by Time Machine. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool SetFileBackupExclusion(const FilePath& file_path); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Checks if the current application is set as a Login Item, so it will launch 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on Login. If a non-NULL pointer to is_hidden is passed, the Login Item also 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is queried for the 'hide on launch' flag. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool CheckLoginItemStatus(bool* is_hidden); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Adds current application to the set of Login Items with specified "hide" 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// flag. This has the same effect as adding/removing the application in 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SystemPreferences->Accounts->LoginItems or marking Application in the Dock 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as "Options->Open on Login". 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Does nothing if the application is already set up as Login Item with 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// specified hide flag. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void AddToLoginItems(bool hide_on_startup); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Removes the current application from the list Of Login Items. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void RemoveFromLoginItems(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if the current process was automatically launched as a 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 'Login Item' or via Lion's Resume. Used to suppress opening windows. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool WasLaunchedAsLoginOrResumeItem(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if the current process was automatically launched as a 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// 'Login Item' or via Resume, and the 'Reopen windows when logging back in' 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// checkbox was selected by the user. This indicates that the previous 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// session should be restored. 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)BASE_EXPORT bool WasLaunchedAsLoginItemRestoreState(); 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Returns true if the current process was automatically launched as a 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 'Login Item' with 'hide on startup' flag. Used to suppress opening windows. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool WasLaunchedAsHiddenLoginItem(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Remove the quarantine xattr from the given file. Returns false if there was 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// an error, or true otherwise. 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BASE_EXPORT bool RemoveQuarantineAttribute(const FilePath& file_path); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Run-time OS version checks. Use these instead of 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// base::SysInfo::OperatingSystemVersionNumbers. Prefer the "OrEarlier" and 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "OrLater" variants to those that check for a specific version, unless you 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// know for sure that you need to check for a specific version. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Snow Leopard is Mac OS X 10.6, Darwin 10. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool IsOSSnowLeopard(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Lion is Mac OS X 10.7, Darwin 11. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool IsOSLion(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool IsOSLionOrEarlier(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool IsOSLionOrLater(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Mountain Lion is Mac OS X 10.8, Darwin 12. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool IsOSMountainLion(); 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)BASE_EXPORT bool IsOSMountainLionOrEarlier(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool IsOSMountainLionOrLater(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Mavericks is Mac OS X 10.9, Darwin 13. 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)BASE_EXPORT bool IsOSMavericks(); 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)BASE_EXPORT bool IsOSMavericksOrEarlier(); 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)BASE_EXPORT bool IsOSMavericksOrLater(); 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Yosemite is Mac OS X 10.10, Darwin 14. 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)BASE_EXPORT bool IsOSYosemite(); 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)BASE_EXPORT bool IsOSYosemiteOrLater(); 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This should be infrequently used. It only makes sense to use this to avoid 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// codepaths that are very likely to break on future (unreleased, untested, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unborn) OS releases, or to log when the OS is newer than any known version. 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)BASE_EXPORT bool IsOSLaterThanYosemite_DontCallThis(); 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Inline functions that are redundant due to version ranges being mutually- 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// exclusive. 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)inline bool IsOSLionOrEarlier() { return !IsOSMountainLionOrLater(); } 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)inline bool IsOSMountainLionOrEarlier() { return !IsOSMavericksOrLater(); } 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)inline bool IsOSMavericksOrEarlier() { return !IsOSYosemiteOrLater(); } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When the deployment target is set, the code produced cannot run on earlier 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OS releases. That enables some of the IsOS* family to be implemented as 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// constant-value inline functions. The MAC_OS_X_VERSION_MIN_REQUIRED macro 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// contains the value of the deployment target. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_OS_X_VERSION_10_7) && \ 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_INLINED_GE_10_7 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline bool IsOSSnowLeopard() { return false; } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline bool IsOSLionOrLater() { return true; } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_OS_X_VERSION_10_7) && \ 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_7 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_INLINED_GT_10_7 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline bool IsOSLion() { return false; } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_OS_X_VERSION_10_8) && \ 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_INLINED_GE_10_8 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline bool IsOSMountainLionOrLater() { return true; } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_OS_X_VERSION_10_8) && \ 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_INLINED_GT_10_8 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline bool IsOSMountainLion() { return false; } 1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(MAC_OS_X_VERSION_10_9) && \ 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_INLINED_GE_10_9 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)inline bool IsOSMavericksOrLater() { return true; } 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(MAC_OS_X_VERSION_10_9) && \ 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_9 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_INLINED_GT_10_9 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)inline bool IsOSMavericks() { return false; } 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(MAC_OS_X_VERSION_10_10) && \ 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_INLINED_GE_10_10 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)inline bool IsOSYosemiteOrLater() { return true; } 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(MAC_OS_X_VERSION_10_10) && \ 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_10 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define BASE_MAC_MAC_UTIL_H_INLINED_GT_10_10 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)inline bool IsOSYosemite() { return false; } 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)inline bool IsOSLaterThanYosemite_DontCallThis() { return true; } 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Retrieve the system's model identifier string from the IOKit registry: 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for example, "MacPro4,1", "MacBookPro6,1". Returns empty string upon 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// failure. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT std::string GetModelIdentifier(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Parse a model identifier string; for example, into ("MacBookPro", 6, 1). 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If any error occurs, none of the input pointers are touched. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT bool ParseModelIdentifier(const std::string& ident, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* type, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32* major, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32* minor); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace mac 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // BASE_MAC_MAC_UTIL_H_ 238