| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/mac/mac_util.h" | 5 #include "base/mac/mac_util.h" |
| 6 | 6 |
| 7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 8 #import <IOKit/IOKitLib.h> | 8 #import <IOKit/IOKitLib.h> |
| 9 #include <errno.h> | 9 #include <errno.h> |
| 10 #include <stddef.h> | 10 #include <stddef.h> |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 parent_info.processInfoLength = sizeof(parent_info); | 351 parent_info.processInfoLength = sizeof(parent_info); |
| 352 if (GetProcessInformation(&info.processLauncher, &parent_info) == noErr) | 352 if (GetProcessInformation(&info.processLauncher, &parent_info) == noErr) |
| 353 return parent_info.processSignature == 'lgnw'; | 353 return parent_info.processSignature == 'lgnw'; |
| 354 } | 354 } |
| 355 return false; | 355 return false; |
| 356 } | 356 } |
| 357 | 357 |
| 358 bool WasLaunchedAsLoginItemRestoreState() { | 358 bool WasLaunchedAsLoginItemRestoreState() { |
| 359 // "Reopen windows..." option was added for Lion. Prior OS versions should | 359 // "Reopen windows..." option was added for Lion. Prior OS versions should |
| 360 // not have this behavior. | 360 // not have this behavior. |
| 361 if (IsOSSnowLeopard() || !WasLaunchedAsLoginOrResumeItem()) | 361 if (!WasLaunchedAsLoginOrResumeItem()) |
| 362 return false; | 362 return false; |
| 363 | 363 |
| 364 CFStringRef app = CFSTR("com.apple.loginwindow"); | 364 CFStringRef app = CFSTR("com.apple.loginwindow"); |
| 365 CFStringRef save_state = CFSTR("TALLogoutSavesState"); | 365 CFStringRef save_state = CFSTR("TALLogoutSavesState"); |
| 366 ScopedCFTypeRef<CFPropertyListRef> plist( | 366 ScopedCFTypeRef<CFPropertyListRef> plist( |
| 367 CFPreferencesCopyAppValue(save_state, app)); | 367 CFPreferencesCopyAppValue(save_state, app)); |
| 368 // According to documentation, com.apple.loginwindow.plist does not exist on a | 368 // According to documentation, com.apple.loginwindow.plist does not exist on a |
| 369 // fresh installation until the user changes a login window setting. The | 369 // fresh installation until the user changes a login window setting. The |
| 370 // "reopen windows" option is checked by default, so the plist would exist had | 370 // "reopen windows" option is checked by default, so the plist would exist had |
| 371 // the user unchecked it. | 371 // the user unchecked it. |
| 372 // https://developer.apple.com/library/mac/documentation/macosx/conceptual/bps
ystemstartup/chapters/CustomLogin.html | 372 // https://developer.apple.com/library/mac/documentation/macosx/conceptual/bps
ystemstartup/chapters/CustomLogin.html |
| 373 if (!plist) | 373 if (!plist) |
| 374 return true; | 374 return true; |
| 375 | 375 |
| 376 if (CFBooleanRef restore_state = base::mac::CFCast<CFBooleanRef>(plist)) | 376 if (CFBooleanRef restore_state = base::mac::CFCast<CFBooleanRef>(plist)) |
| 377 return CFBooleanGetValue(restore_state); | 377 return CFBooleanGetValue(restore_state); |
| 378 | 378 |
| 379 return false; | 379 return false; |
| 380 } | 380 } |
| 381 | 381 |
| 382 bool WasLaunchedAsHiddenLoginItem() { | 382 bool WasLaunchedAsHiddenLoginItem() { |
| 383 if (!WasLaunchedAsLoginOrResumeItem()) | 383 if (!WasLaunchedAsLoginOrResumeItem()) |
| 384 return false; | 384 return false; |
| 385 | 385 |
| 386 ScopedCFTypeRef<LSSharedFileListItemRef> item(GetLoginItemForApp()); | 386 ScopedCFTypeRef<LSSharedFileListItemRef> item(GetLoginItemForApp()); |
| 387 if (!item.get()) { | 387 if (!item.get()) { |
| 388 // Lion can launch items for the resume feature. So log an error only for | 388 // OS X can launch items for the resume feature. |
| 389 // Snow Leopard or earlier. | |
| 390 if (IsOSSnowLeopard()) | |
| 391 DLOG(ERROR) << | |
| 392 "Process launched at Login but can't access Login Item List."; | |
| 393 | |
| 394 return false; | 389 return false; |
| 395 } | 390 } |
| 396 return IsHiddenLoginItem(item); | 391 return IsHiddenLoginItem(item); |
| 397 } | 392 } |
| 398 | 393 |
| 399 bool RemoveQuarantineAttribute(const FilePath& file_path) { | 394 bool RemoveQuarantineAttribute(const FilePath& file_path) { |
| 400 const char kQuarantineAttrName[] = "com.apple.quarantine"; | 395 const char kQuarantineAttrName[] = "com.apple.quarantine"; |
| 401 int status = removexattr(file_path.value().c_str(), kQuarantineAttrName, 0); | 396 int status = removexattr(file_path.value().c_str(), kQuarantineAttrName, 0); |
| 402 return status == 0 || errno == ENOATTR; | 397 return status == 0 || errno == ENOATTR; |
| 403 } | 398 } |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 SNOW_LEOPARD_MINOR_VERSION = 6, | 476 SNOW_LEOPARD_MINOR_VERSION = 6, |
| 482 LION_MINOR_VERSION = 7, | 477 LION_MINOR_VERSION = 7, |
| 483 MOUNTAIN_LION_MINOR_VERSION = 8, | 478 MOUNTAIN_LION_MINOR_VERSION = 8, |
| 484 MAVERICKS_MINOR_VERSION = 9, | 479 MAVERICKS_MINOR_VERSION = 9, |
| 485 YOSEMITE_MINOR_VERSION = 10, | 480 YOSEMITE_MINOR_VERSION = 10, |
| 486 EL_CAPITAN_MINOR_VERSION = 11, | 481 EL_CAPITAN_MINOR_VERSION = 11, |
| 487 }; | 482 }; |
| 488 | 483 |
| 489 } // namespace | 484 } // namespace |
| 490 | 485 |
| 491 #if !defined(BASE_MAC_MAC_UTIL_H_INLINED_GE_10_7) | |
| 492 bool IsOSSnowLeopard() { | |
| 493 return MacOSXMinorVersion() == SNOW_LEOPARD_MINOR_VERSION; | |
| 494 } | |
| 495 #endif | |
| 496 | |
| 497 #if !defined(BASE_MAC_MAC_UTIL_H_INLINED_GT_10_7) | 486 #if !defined(BASE_MAC_MAC_UTIL_H_INLINED_GT_10_7) |
| 498 bool IsOSLion() { | 487 bool IsOSLion() { |
| 499 return MacOSXMinorVersion() == LION_MINOR_VERSION; | 488 return MacOSXMinorVersion() == LION_MINOR_VERSION; |
| 500 } | 489 } |
| 501 #endif | 490 #endif |
| 502 | 491 |
| 503 #if !defined(BASE_MAC_MAC_UTIL_H_INLINED_GE_10_7) | 492 #if !defined(BASE_MAC_MAC_UTIL_H_INLINED_GE_10_7) |
| 504 bool IsOSLionOrLater() { | 493 bool IsOSLionOrLater() { |
| 505 return MacOSXMinorVersion() >= LION_MINOR_VERSION; | 494 return MacOSXMinorVersion() >= LION_MINOR_VERSION; |
| 506 } | 495 } |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 StringPiece(begin + comma_loc + 1, ident.end()), &minor_tmp)) | 587 StringPiece(begin + comma_loc + 1, ident.end()), &minor_tmp)) |
| 599 return false; | 588 return false; |
| 600 *type = ident.substr(0, number_loc); | 589 *type = ident.substr(0, number_loc); |
| 601 *major = major_tmp; | 590 *major = major_tmp; |
| 602 *minor = minor_tmp; | 591 *minor = minor_tmp; |
| 603 return true; | 592 return true; |
| 604 } | 593 } |
| 605 | 594 |
| 606 } // namespace mac | 595 } // namespace mac |
| 607 } // namespace base | 596 } // namespace base |
| OLD | NEW |