Merge pull request #5440 from electron/bengotow/remove-default-protocol
Implement RemoveAsDefaultProtocolClient on OS X
This commit is contained in:
commit
6b79f53416
2 changed files with 26 additions and 5 deletions
|
@ -43,7 +43,31 @@ void Browser::ClearRecentDocuments() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol) {
|
bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol) {
|
||||||
|
NSString* identifier = [base::mac::MainBundle() bundleIdentifier];
|
||||||
|
if (!identifier)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!Browser::IsDefaultProtocolClient(protocol))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
NSString* protocol_ns = [NSString stringWithUTF8String:protocol.c_str()];
|
||||||
|
CFStringRef protocol_cf = base::mac::NSToCFCast(protocol_ns);
|
||||||
|
CFArrayRef bundleList = LSCopyAllHandlersForURLScheme(protocol_cf);
|
||||||
|
if (!bundleList) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// On Mac OS X, we can't query the default, but the handlers list seems to put
|
||||||
|
// Apple's defaults first, so we'll use the first option that isn't our bundle
|
||||||
|
CFStringRef other = nil;
|
||||||
|
for (CFIndex i = 0; i < CFArrayGetCount(bundleList); i++) {
|
||||||
|
other = (CFStringRef)CFArrayGetValueAtIndex(bundleList, i);
|
||||||
|
if (![identifier isEqualToString: (__bridge NSString *)other]) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OSStatus return_code = LSSetDefaultHandlerForURLScheme(protocol_cf, other);
|
||||||
|
return return_code == noErr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Browser::SetAsDefaultProtocolClient(const std::string& protocol) {
|
bool Browser::SetAsDefaultProtocolClient(const std::string& protocol) {
|
||||||
|
|
|
@ -393,16 +393,13 @@ Please refer to [Apple's documentation][CFBundleURLTypes] for details.
|
||||||
|
|
||||||
The API uses the Windows Registry and LSSetDefaultHandlerForURLScheme internally.
|
The API uses the Windows Registry and LSSetDefaultHandlerForURLScheme internally.
|
||||||
|
|
||||||
### `app.removeAsDefaultProtocolClient(protocol)` _Windows_
|
### `app.removeAsDefaultProtocolClient(protocol)` _OS X_ _Windows_
|
||||||
|
|
||||||
* `protocol` String - The name of your protocol, without `://`.
|
* `protocol` String - The name of your protocol, without `://`.
|
||||||
|
|
||||||
This method checks if the current executable as the default handler for a protocol
|
This method checks if the current executable as the default handler for a protocol
|
||||||
(aka URI scheme). If so, it will remove the app as the default handler.
|
(aka URI scheme). If so, it will remove the app as the default handler.
|
||||||
|
|
||||||
**Note:** On OS X, removing the app will automatically remove the app as the
|
|
||||||
default protocol handler.
|
|
||||||
|
|
||||||
### `app.isDefaultProtocolClient(protocol)` _OS X_ _Windows_
|
### `app.isDefaultProtocolClient(protocol)` _OS X_ _Windows_
|
||||||
|
|
||||||
* `protocol` String - The name of your protocol, without `://`.
|
* `protocol` String - The name of your protocol, without `://`.
|
||||||
|
|
Loading…
Reference in a new issue