From 2ba8fe914056452ec6f8b949ab2844afac59e73c Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 27 Jun 2025 10:34:55 -0500 Subject: [PATCH] refactor: extract-constant static Windows registry keys in Browser code (#47569) * refactor: extract-constant for registry key in GetProcessExecPath() * refactor: extract-constant for registry key in Browser::SetLoginItemSettings() * refactor: extract-constant for registry key in Browser::SetLoginItemSettings() * refactor: extract-constant for registry key in Browser::GetLoginItemSettings() * chore: document the symbolic constants * refactor: prefer base::wcstring_view::c_str() to data() to make zero-termination clearer --- shell/browser/browser_win.cc | 44 ++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/shell/browser/browser_win.cc b/shell/browser/browser_win.cc index da035a79099f..f8da302748f2 100644 --- a/shell/browser/browser_win.cc +++ b/shell/browser/browser_win.cc @@ -20,6 +20,7 @@ #include "base/files/file_path.h" #include "base/logging.h" #include "base/path_service.h" +#include "base/strings/cstring_view.h" #include "base/strings/strcat_win.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" @@ -54,6 +55,14 @@ namespace electron { namespace { +// specifies what should run at user login +constexpr base::wcstring_view Run = + LR"(Software\Microsoft\Windows\CurrentVersion\Run)"; + +// controls whether each Run entry is enabled or disabled +constexpr base::wcstring_view StartupApprovedRun = + LR"(Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run)"; + bool GetProcessExecPath(std::wstring* exe) { base::FilePath path; if (!base::PathService::Get(base::FILE_EXE, &path)) { @@ -193,19 +202,11 @@ std::vector GetLoginItemSettingsHelper( // attempt to update launch_item.enabled if there is a matching key // value entry in the StartupApproved registry + const HKEY scope_key = + scope == L"user" ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE; HKEY hkey; - // StartupApproved registry path - LPCTSTR path = TEXT( - "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApp" - "roved\\Run"); - LONG res; - if (scope == L"user") { - res = - RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_QUERY_VALUE, &hkey); - } else { - res = - RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0, KEY_QUERY_VALUE, &hkey); - } + LONG res = RegOpenKeyEx(scope_key, StartupApprovedRun.c_str(), 0, + KEY_QUERY_VALUE, &hkey); if (res == ERROR_SUCCESS) { DWORD type, size; wchar_t startup_binary[12]; @@ -615,14 +616,10 @@ void Browser::UpdateBadgeContents( } void Browser::SetLoginItemSettings(LoginItemSettings settings) { - std::wstring key_path = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; - base::win::RegKey key(HKEY_CURRENT_USER, key_path.c_str(), KEY_ALL_ACCESS); + base::win::RegKey key(HKEY_CURRENT_USER, Run.c_str(), KEY_ALL_ACCESS); - std::wstring startup_approved_key_path = - L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApproved" - L"\\Run"; base::win::RegKey startup_approved_key( - HKEY_CURRENT_USER, startup_approved_key_path.c_str(), KEY_ALL_ACCESS); + HKEY_CURRENT_USER, StartupApprovedRun.c_str(), KEY_ALL_ACCESS); PCWSTR key_name = !settings.name.empty() ? settings.name.c_str() : GetAppUserModelID(); @@ -635,9 +632,7 @@ void Browser::SetLoginItemSettings(LoginItemSettings settings) { startup_approved_key.DeleteValue(key_name); } else { HKEY hard_key; - LPCTSTR path = TEXT( - "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApp" - "roved\\Run"); + constexpr LPCTSTR path = StartupApprovedRun.c_str(); LONG res = RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_ALL_ACCESS, &hard_key); @@ -660,8 +655,7 @@ void Browser::SetLoginItemSettings(LoginItemSettings settings) { v8::Local Browser::GetLoginItemSettings( const LoginItemSettings& options) { LoginItemSettings settings; - std::wstring keyPath = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; - base::win::RegKey key(HKEY_CURRENT_USER, keyPath.c_str(), KEY_ALL_ACCESS); + base::win::RegKey key(HKEY_CURRENT_USER, Run.c_str(), KEY_ALL_ACCESS); std::wstring keyVal; // keep old openAtLogin behaviour @@ -678,9 +672,9 @@ v8::Local Browser::GetLoginItemSettings( boolean executable_will_launch_at_login = false; std::vector launch_items; base::win::RegistryValueIterator hkcu_iterator(HKEY_CURRENT_USER, - keyPath.c_str()); + Run.c_str()); base::win::RegistryValueIterator hklm_iterator(HKEY_LOCAL_MACHINE, - keyPath.c_str()); + Run.c_str()); launch_items = GetLoginItemSettingsHelper( &hkcu_iterator, &executable_will_launch_at_login, L"user", options);