diff --git a/shell/browser/browser_mac.mm b/shell/browser/browser_mac.mm index 1094747b41..9821e0b0a3 100644 --- a/shell/browser/browser_mac.mm +++ b/shell/browser/browser_mac.mm @@ -318,26 +318,32 @@ Browser::LoginItemSettings Browser::GetLoginItemSettings( return settings; } +// Some logic here copied from GetLoginItemForApp in base/mac/mac_util.mm void RemoveFromLoginItems() { #pragma clang diagnostic push // https://crbug.com/1154377 #pragma clang diagnostic ignored "-Wdeprecated-declarations" - // logic to find the login item copied from GetLoginItemForApp in - // base/mac/mac_util.mm base::ScopedCFTypeRef login_items( LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL)); if (!login_items.get()) { LOG(ERROR) << "Couldn't get a Login Items list."; return; } + base::scoped_nsobject login_items_array( base::mac::CFToNSCast(LSSharedFileListCopySnapshot(login_items, NULL))); NSURL* url = [NSURL fileURLWithPath:[base::mac::MainBundle() bundlePath]]; - for (NSUInteger i = 0; i < [login_items_array count]; ++i) { + for (id login_item in login_items_array.get()) { LSSharedFileListItemRef item = - reinterpret_cast(login_items_array[i]); + reinterpret_cast(login_item); + + // kLSSharedFileListDoNotMountVolumes is used so that we don't trigger + // mounting when it's not expected by a user. Just listing the login + // items should not cause any side-effects. base::ScopedCFTypeRef error; - CFURLRef item_url_ref = - LSSharedFileListItemCopyResolvedURL(item, 0, error.InitializeInto()); + base::ScopedCFTypeRef item_url_ref( + LSSharedFileListItemCopyResolvedURL( + item, kLSSharedFileListDoNotMountVolumes, error.InitializeInto())); + if (!error && item_url_ref) { base::ScopedCFTypeRef item_url(item_url_ref); if (CFEqual(item_url, url)) {