feat: add app.getApplicationNameForProtocol API (#20399)
* Add GetApplicationNameForProtocol. * Fix Windows implementation. * Fix up test. * Add documentation. * Implement for real on Linux using xdg-mime. Also ensure we allow blocking calls here to avoid errant DCHECKing. * Improve docs for Linux. * Clean up tests. * Add a note about not relying on the precise format. * Update docs/api/app.md Co-Authored-By: Shelley Vohr <codebytere@github.com> * Remove needless `done()`s from tests. * Use vector list initialization. * Add a simple test for isDefaultProtocolClient. * Remove unneeded include and skip a test on Linux CI. * We no longer differentiate between CI and non-CI test runs.
This commit is contained in:
parent
24939e8fa4
commit
9b01bb00d2
7 changed files with 183 additions and 20 deletions
|
@ -132,6 +132,22 @@ bool Browser::IsDefaultProtocolClient(const std::string& protocol,
|
|||
return result == NSOrderedSame;
|
||||
}
|
||||
|
||||
base::string16 Browser::GetApplicationNameForProtocol(const GURL& url) {
|
||||
NSURL* ns_url = [NSURL
|
||||
URLWithString:base::SysUTF8ToNSString(url.possibly_invalid_spec())];
|
||||
base::ScopedCFTypeRef<CFErrorRef> out_err;
|
||||
base::ScopedCFTypeRef<CFURLRef> openingApp(LSCopyDefaultApplicationURLForURL(
|
||||
(CFURLRef)ns_url, kLSRolesAll, out_err.InitializeInto()));
|
||||
if (out_err) {
|
||||
// likely kLSApplicationNotFoundErr
|
||||
return base::string16();
|
||||
}
|
||||
NSString* appPath = [base::mac::CFToNSCast(openingApp.get()) path];
|
||||
NSString* appDisplayName =
|
||||
[[NSFileManager defaultManager] displayNameAtPath:appPath];
|
||||
return base::SysNSStringToUTF16(appDisplayName);
|
||||
}
|
||||
|
||||
void Browser::SetAppUserModelID(const base::string16& name) {}
|
||||
|
||||
bool Browser::SetBadgeCount(int count) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue