From 3b2dea87578a956689ce736e34008db366b53c98 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 2 May 2022 14:50:10 +0200 Subject: [PATCH] refactor: prevent RemoveFromLoginItems() from mounting volumes from login items --- shell/browser/browser_mac.mm | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/shell/browser/browser_mac.mm b/shell/browser/browser_mac.mm index 357c6723e44ff..196e872fd335f 100644 --- a/shell/browser/browser_mac.mm +++ b/shell/browser/browser_mac.mm @@ -314,26 +314,32 @@ 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)) {