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