Index: chrome/installer/setup/install.cc |
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc |
index 5ab14e2cde784f09ffb94d5659ac082c31c6aff6..fdde737369ff06d807581fe50a58ff137451e939 100644 |
--- a/chrome/installer/setup/install.cc |
+++ b/chrome/installer/setup/install.cc |
@@ -142,6 +142,56 @@ void AddChromeToMediaPlayerList() { |
LOG(ERROR) << "Could not add Chrome to media player inclusion list."; |
} |
+void RegisterChromesEventlogProvider(const base::FilePath& chrome_exe) { |
grt (UTC plus 2)
2016/11/16 15:04:44
nit: RegisterChromeEventLogProvider or maybe just
grt (UTC plus 2)
2016/11/16 15:04:44
i think it makes sense to move this into setup_uti
pastarmovj
2016/11/17 15:34:42
Done.
pastarmovj
2016/11/17 15:34:43
Done.
|
+ base::string16 reg_path(installer::kEventlogProvidersRegPath); |
+ // registry paths can also be appended like file system path |
+ reg_path.push_back(base::FilePath::kSeparators[0]); |
+ reg_path.append(installer::kChromeEventLogProviderName); |
+ VLOG(1) << "Registering Chrome's event log provider at " << reg_path; |
grt (UTC plus 2)
2016/11/16 15:04:44
nit: remove extra space in log message
pastarmovj
2016/11/17 15:34:42
Done.
|
+ std::unique_ptr<WorkItem> work_item(WorkItem::CreateCreateRegKeyWorkItem( |
grt (UTC plus 2)
2016/11/16 15:04:44
rather than creating and using individual items li
pastarmovj
2016/11/17 15:34:43
Done. You are right that those make sense only as
|
+ HKEY_LOCAL_MACHINE, reg_path, WorkItem::kWow64Default)); |
+ |
+ // if the operation fails we log the error but still continue because none of |
+ // these are critical for the proper operation of the browser. |
+ if (!work_item.get()->Do()) { |
+ LOG(ERROR) << "Could not register Chrome's event log provider. " |
+ << "Failed to create registry key: " << reg_path << "."; |
+ return; |
+ } |
+ |
+ work_item.reset(WorkItem::CreateSetRegValueWorkItem( |
+ HKEY_LOCAL_MACHINE, reg_path, WorkItem::kWow64Default, |
+ installer::kCategoryCount, static_cast<DWORD>(1), true)); |
+ if (!work_item.get()->Do()) { |
+ LOG(ERROR) << "Could not register Chrome's event log provider. " |
+ << "Failed to set registry value: " << installer::kCategoryCount |
+ << "."; |
+ } |
+ work_item.reset(WorkItem::CreateSetRegValueWorkItem( |
+ HKEY_LOCAL_MACHINE, reg_path, WorkItem::kWow64Default, |
+ installer::kTypesSupported, static_cast<DWORD>(7), true)); |
+ if (!work_item.get()->Do()) { |
+ LOG(ERROR) << "Could not register Chrome's event log provider. " |
+ << "Failed to set registry value: " << installer::kTypesSupported |
+ << "."; |
+ } |
+ |
+ const wchar_t* const file_keys[] = { |
grt (UTC plus 2)
2016/11/16 15:04:44
nit: static constexpr const wchar_t* kFileKeys[] =
pastarmovj
2016/11/17 15:34:43
Done.
|
+ installer::kCategoryMessageFile, |
+ installer::kEventMessageFile, |
+ installer::kParameterMessageFile, |
+ }; |
+ for (int i = 0; i < arraysize(file_keys); ++i) { |
grt (UTC plus 2)
2016/11/16 15:04:44
nit: for (const wchar_t* file_key : file_keys) {
pastarmovj
2016/11/17 15:34:43
Done.
|
+ work_item.reset(WorkItem::CreateSetRegValueWorkItem( |
+ HKEY_LOCAL_MACHINE, reg_path, WorkItem::kWow64Default, |
+ file_keys[i], chrome_exe.value(), true)); |
+ if (!work_item.get()->Do()) { |
+ LOG(ERROR) << "Could not register Chrome's event log provider. " |
+ << "Failed to set registry value: " << file_keys[i] << "."; |
+ } |
+ } |
+} |
+ |
// Copy master_preferences file provided to installer, in the same folder |
// as chrome.exe so Chrome first run can find it. This function will be called |
// only on the first install of Chrome. |
@@ -443,16 +493,22 @@ void RegisterChromeOnMachine(const installer::InstallerState& installer_state, |
bool make_chrome_default) { |
DCHECK(product.is_chrome()); |
+ const base::FilePath chrome_exe( |
+ installer_state.target_path().Append(installer::kChromeExe)); |
+ |
// Try to add Chrome to Media Player shim inclusion list. We don't do any |
// error checking here because this operation will fail if user doesn't |
// have admin rights and we want to ignore the error. |
AddChromeToMediaPlayerList(); |
+ // Try to register the event log provider for Chrome, but only if it is a |
+ // system profile because this step admin privileges. |
+ if (installer_state.system_install()) |
+ RegisterChromesEventlogProvider(chrome_exe); |
+ |
// Make Chrome the default browser if desired when possible. Otherwise, only |
// register it with Windows. |
BrowserDistribution* dist = product.distribution(); |
- const base::FilePath chrome_exe( |
- installer_state.target_path().Append(installer::kChromeExe)); |
VLOG(1) << "Registering Chrome as browser: " << chrome_exe.value(); |
if (make_chrome_default && ShellUtil::CanMakeChromeDefaultUnattended()) { |
int level = ShellUtil::CURRENT_USER; |