Skip to content
This repository has been archived by the owner on Oct 30, 2023. It is now read-only.

Commit

Permalink
feat: add logUsage to shell.openExternal() options (electron#37139)
Browse files Browse the repository at this point in the history
Co-authored-by: Milan Burda <miburda@microsoft.com>
  • Loading branch information
2 people authored and khalwa committed Feb 22, 2023
1 parent d11ccfd commit 4f7d8c1
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 4 deletions.
2 changes: 2 additions & 0 deletions docs/api/shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ Open the given file in the desktop's default manner.
* `options` Object (optional)
* `activate` boolean (optional) _macOS_ - `true` to bring the opened application to the foreground. The default is `true`.
* `workingDirectory` string (optional) _Windows_ - The working directory.
* `logUsage` boolean (optional) _Windows_ - Indicates a user initiated launch that enables tracking of frequently used programs and other behaviors.
The default is `false`.

Returns `Promise<void>`

Expand Down
1 change: 1 addition & 0 deletions shell/common/api/electron_api_shell.cc
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ v8::Local<v8::Promise> OpenExternal(const GURL& url, gin::Arguments* args) {
if (args->GetNext(&obj)) {
obj.Get("activate", &options.activate);
obj.Get("workingDirectory", &options.working_dir);
obj.Get("logUsage", &options.log_usage);
}
}

Expand Down
1 change: 1 addition & 0 deletions shell/common/platform_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ void OpenPath(const base::FilePath& full_path, OpenCallback callback);
struct OpenExternalOptions {
bool activate = true;
base::FilePath working_dir;
bool log_usage = false;
};

// Open the given external protocol URL in the desktop's default manner.
Expand Down
17 changes: 13 additions & 4 deletions shell/common/platform_util_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -246,10 +246,19 @@ std::string OpenExternalOnWorkerThread(
L"\"";
std::wstring working_dir = options.working_dir.value();

if (reinterpret_cast<ULONG_PTR>(
ShellExecuteW(nullptr, L"open", escaped_url.c_str(), nullptr,
working_dir.empty() ? nullptr : working_dir.c_str(),
SW_SHOWNORMAL)) <= 32) {
SHELLEXECUTEINFO info = {};
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_NOASYNC | SEE_MASK_FLAG_NO_UI;
info.lpVerb = L"open";
info.lpFile = escaped_url.c_str();
info.lpDirectory = working_dir.empty() ? nullptr : working_dir.c_str();
info.nShow = SW_SHOWNORMAL;

if (options.log_usage) {
info.fMask |= SEE_MASK_FLAG_LOG_USAGE;
}

if (!ShellExecuteEx(&info)) {
return "Failed to open: " +
logging::SystemErrorCodeToString(logging::GetLastSystemErrorCode());
}
Expand Down

0 comments on commit 4f7d8c1

Please sign in to comment.