Use LSGetApplicationForURL to search for app

It costs less.
This commit is contained in:
Cheng Zhao 2015-06-12 13:54:42 +08:00
parent 7ce8156691
commit c97c3fb9a1

View file

@ -122,15 +122,21 @@ bool OpenExternal(const GURL& url) {
DCHECK([NSThread isMainThread]); DCHECK([NSThread isMainThread]);
NSString* url_string = base::SysUTF8ToNSString(url.spec()); NSString* url_string = base::SysUTF8ToNSString(url.spec());
NSURL* ns_url = [NSURL URLWithString:url_string]; NSURL* ns_url = [NSURL URLWithString:url_string];
if (!ns_url){ if (!ns_url) {
return false; return false;
} }
NSArray *appUrls = (NSArray*)LSCopyApplicationURLsForURL((CFURLRef)ns_url, kLSRolesAll);
if([appUrls count] > 0){ CFURLRef openingApp = NULL;
if([[NSWorkspace sharedWorkspace] openURL:ns_url]) OSStatus status = LSGetApplicationForURL((CFURLRef)ns_url,
return true; kLSRolesAll,
NULL,
&openingApp);
if (status != noErr) {
return false;
} }
return false; CFRelease(openingApp); // NOT A BUG; LSGetApplicationForURL retains for us
return [[NSWorkspace sharedWorkspace] openURL:ns_url];
} }
bool MoveItemToTrash(const base::FilePath& full_path) { bool MoveItemToTrash(const base::FilePath& full_path) {