Ensure backwards compatibility with getLoginItemSettings.

We need to make sure the executable path is not quoted.
This commit is contained in:
CharlieHess 2017-02-03 17:38:16 -08:00 committed by Kevin Sawicki
parent b7b200c874
commit 1178915f30

View file

@ -43,28 +43,40 @@ BOOL CALLBACK WindowsEnumerationHandler(HWND hwnd, LPARAM param) {
return TRUE; return TRUE;
} }
bool ReadAppCommandLine(base::string16* exe, bool GetProcessExecPath(base::string16* exe) {
const std::vector<base::string16>& launch_args, base::FilePath path;
bool includeOriginalArg) { if (!PathService::Get(base::FILE_EXE, &path)) {
// Executable Path LOG(ERROR) << "Error getting app exe path";
if (exe->empty()) { return false;
base::FilePath path; }
if (!PathService::Get(base::FILE_EXE, &path)) { *exe = path.value();
LOG(ERROR) << "Error getting app exe path"; return true;
return false; }
}
*exe = path.value(); bool GetProtocolLaunchPath(mate::Arguments* args, base::string16* exe) {
if (!args->GetNext(exe)) {
GetProcessExecPath(exe);
} }
if (launch_args.empty()) { // Read in optional args arg
base::string16 formatString = includeOriginalArg ? std::vector<base::string16> launch_args;
L"\"%s\" \"%%1\"" : if (args->GetNext(&launch_args) && !launch_args.empty())
L"\"%s\""; *exe = base::StringPrintf(L"\"%s\" %s \"%%1\"",
*exe = base::StringPrintf(formatString.c_str(), exe->c_str()); exe->c_str(),
} else { base::JoinString(launch_args, L" ").c_str());
base::string16 formatString = includeOriginalArg ? else
L"\"%s\" %s \"%%1\"" : *exe = base::StringPrintf(L"\"%s\" \"%%1\"", exe->c_str());
L"\"%s\" %s"; return true;
}
bool FormatCommandLineString(base::string16* exe,
const std::vector<base::string16>& launch_args) {
if (exe->empty()) {
GetProcessExecPath(exe);
}
if (!launch_args.empty()) {
base::string16 formatString = L"%s %s";
*exe = base::StringPrintf(formatString.c_str(), *exe = base::StringPrintf(formatString.c_str(),
exe->c_str(), exe->c_str(),
base::JoinString(launch_args, L" ").c_str()); base::JoinString(launch_args, L" ").c_str());
@ -163,10 +175,7 @@ bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol,
return true; return true;
base::string16 exe; base::string16 exe;
std::vector<base::string16> launch_args; if (!GetProtocolLaunchPath(args, &exe))
args->GetNext(&exe);
args->GetNext(&launch_args);
if (!ReadAppCommandLine(&exe, launch_args, true))
return false; return false;
if (keyVal == exe) { if (keyVal == exe) {
@ -200,10 +209,7 @@ bool Browser::SetAsDefaultProtocolClient(const std::string& protocol,
return false; return false;
base::string16 exe; base::string16 exe;
std::vector<base::string16> launch_args; if (!GetProtocolLaunchPath(args, &exe))
args->GetNext(&exe);
args->GetNext(&launch_args);
if (!ReadAppCommandLine(&exe, launch_args, true))
return false; return false;
// Main Registry Key // Main Registry Key
@ -233,10 +239,7 @@ bool Browser::IsDefaultProtocolClient(const std::string& protocol,
return false; return false;
base::string16 exe; base::string16 exe;
std::vector<base::string16> launch_args; if (!GetProtocolLaunchPath(args, &exe))
args->GetNext(&exe);
args->GetNext(&launch_args);
if (!ReadAppCommandLine(&exe, launch_args, true))
return false; return false;
// Main Registry Key // Main Registry Key
@ -275,7 +278,7 @@ void Browser::SetLoginItemSettings(LoginItemSettings settings) {
if (settings.open_at_login) { if (settings.open_at_login) {
base::string16 exe = settings.path; base::string16 exe = settings.path;
if (!ReadAppCommandLine(&exe, settings.args, false)) return; if (!FormatCommandLineString(&exe, settings.args)) return;
key.WriteValue(GetAppUserModelID(), exe.c_str()); key.WriteValue(GetAppUserModelID(), exe.c_str());
} else { } else {
@ -292,7 +295,7 @@ Browser::LoginItemSettings Browser::GetLoginItemSettings(
if (!FAILED(key.ReadValue(GetAppUserModelID(), &keyVal))) { if (!FAILED(key.ReadValue(GetAppUserModelID(), &keyVal))) {
base::string16 exe = options.path; base::string16 exe = options.path;
if (ReadAppCommandLine(&exe, options.args, false)) { if (FormatCommandLineString(&exe, options.args)) {
settings.open_at_login = keyVal == exe; settings.open_at_login = keyVal == exe;
} }
} }