void SetAppUserModelID(const base::string16& name);
// Remove the default protocol handler registry key
- bool RemoveAsDefaultProtocolClient(const std::string& protocol);
+ bool RemoveAsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args);
// Set as default handler for a protocol.
- bool SetAsDefaultProtocolClient(const std::string& protocol);
+ bool SetAsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args);
// Query the current state of default handler for a protocol.
- bool IsDefaultProtocolClient(const std::string& protocol);
+ bool IsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args);
// Set/Get the badge count.
bool SetBadgeCount(int count);
[[NSDocumentController sharedDocumentController] clearRecentDocuments:nil];
}
-bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol) {
+bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args) {
NSString* identifier = [base::mac::MainBundle() bundleIdentifier];
if (!identifier)
return false;
return return_code == noErr;
}
-bool Browser::SetAsDefaultProtocolClient(const std::string& protocol) {
+bool Browser::SetAsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args) {
if (protocol.empty())
return false;
return return_code == noErr;
}
-bool Browser::IsDefaultProtocolClient(const std::string& protocol) {
+bool Browser::IsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args) {
if (protocol.empty())
return false;
return SUCCEEDED(destinations->CommitList());
}
-bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol) {
- if (protocol.empty())
- return false;
+std::wstring protocolLaunchPath(std::string protocol, mate::Arguments* args) {
+ // Read in optional exe path arg
+ std::wstring exePath;
+ std::string rawExePath;
base::FilePath path;
- if (!PathService::Get(base::FILE_EXE, &path)) {
- LOG(ERROR) << "Error getting app exe path";
- return false;
+
+ if (!args->GetNext(&rawExePath)) {
+ if (!PathService::Get(base::FILE_EXE, &path)) {
+ LOG(ERROR) << "Error getting app exe path";
+ return L"";
+ }
+ // Executable Path
+ exePath = path.value();
+ } else {
+ exePath.assign(rawExePath.begin(), rawExePath.end());
+ }
+
+ // Read in optional args arg
+ std::vector<std::string> launchArgs;
+ args->GetNext(&launchArgs);
+
+ std::wstring exe = L"\"" + exePath + L"\" ";
+
+ // Parse launch args into a string of space spearated args
+ if (launchArgs.size() != 0) {
+ std::string launchArgString = "";
+ for (std::string launchArg : launchArgs) {
+ launchArgString = launchArgString + launchArg + " ";
+ }
+ std::wstring wLaunchArgString;
+ wLaunchArgString.assign(launchArgString.begin(), launchArgString.end());
+ exe = exe + L"\"" + wLaunchArgString + L"\"";
}
+ return exe + L"\"%1\"";
+}
+
+bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args) {
+ if (protocol.empty())
+ return false;
// Main Registry Key
HKEY root = HKEY_CURRENT_USER;
// Default value not set, we can confirm that it is not set
return true;
- std::wstring exePath(path.value());
- std::wstring exe = L"\"" + exePath + L"\" \"%1\"";
+ std::wstring exe = protocolLaunchPath(protocol, args);
+ if (exe == L"")
+ return false;
if (keyVal == exe) {
// Let's kill the key
if (FAILED(key.DeleteKey(L"shell")))
}
}
-bool Browser::SetAsDefaultProtocolClient(const std::string& protocol) {
+bool Browser::SetAsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args) {
// HKEY_CLASSES_ROOT
// $PROTOCOL
// (Default) = "URL:$NAME"
if (protocol.empty())
return false;
- base::FilePath path;
- if (!PathService::Get(base::FILE_EXE, &path)) {
- LOG(ERROR) << "Error getting app exe path";
+ std::wstring exe = protocolLaunchPath(protocol, args);
+ if (exe == L"") {
return false;
}
std::string cmdPathStr = keyPathStr + "\\shell\\open\\command";
std::wstring cmdPath = std::wstring(cmdPathStr.begin(), cmdPathStr.end());
- // Executable Path
- std::wstring exePath(path.value());
- std::wstring exe = L"\"" + exePath + L"\" \"%1\"";
-
// Write information to registry
base::win::RegKey key(root, keyPath.c_str(), KEY_ALL_ACCESS);
if (FAILED(key.WriteValue(L"URL Protocol", L"")) ||
return true;
}
-bool Browser::IsDefaultProtocolClient(const std::string& protocol) {
+bool Browser::IsDefaultProtocolClient(const std::string& protocol, mate::Arguments* args) {
if (protocol.empty())
return false;
- base::FilePath path;
- if (!PathService::Get(base::FILE_EXE, &path)) {
- LOG(ERROR) << "Error getting app exe path";
+ std::wstring exe = protocolLaunchPath(protocol, args);
+ if (exe == L"")
return false;
- }
// Main Registry Key
HKEY root = HKEY_CURRENT_USER;
// Default value not set, we can confirm that it is not set
return false;
- std::wstring exePath(path.value());
- std::wstring exe = L"\"" + exePath + L"\" \"%1\"";
if (keyVal == exe) {
// Default value is the same as current file path
return true;