Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8459)

Unified Diff: chrome/installer/util/shell_util.cc

Issue 2794263002: Remove ScopedVector from chrome/installer/ (Closed)
Patch Set: #include <utility> Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/installer/util/shell_util.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/util/shell_util.cc
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc
index f0fa26894a597f690ff554d9fa398fd9b8cf2618..335b3d35e45286c9a086bb72de3e0128731205c5 100644
--- a/chrome/installer/util/shell_util.cc
+++ b/chrome/installer/util/shell_util.cc
@@ -13,9 +13,12 @@
#include <shlobj.h>
#include <shobjidl.h>
+#include <algorithm>
+#include <iterator>
#include <limits>
#include <memory>
#include <string>
+#include <utility>
#include "base/bind.h"
#include "base/command_line.h"
@@ -26,7 +29,7 @@
#include "base/logging.h"
#include "base/macros.h"
#include "base/md5.h"
-#include "base/memory/scoped_vector.h"
+#include "base/memory/ptr_util.h"
#include "base/metrics/histogram_macros.h"
#include "base/path_service.h"
#include "base/strings/string16.h"
@@ -224,10 +227,10 @@ base::string16 GetCapabilitiesKey(const base::string16& suffix) {
// DelegateExecute ProgId. Needed for Chrome Metro in Windows 8. This is only
// needed for registring a web browser, not for general associations.
-ScopedVector<RegistryEntry> GetChromeDelegateExecuteEntries(
+std::vector<std::unique_ptr<RegistryEntry>> GetChromeDelegateExecuteEntries(
const base::FilePath& chrome_exe,
const ApplicationInfo& app_info) {
- ScopedVector<RegistryEntry> entries;
+ std::vector<std::unique_ptr<RegistryEntry>> entries;
base::string16 app_id_shell_key(ShellUtil::kRegClasses);
app_id_shell_key.push_back(base::FilePath::kSeparators[0]);
@@ -236,8 +239,8 @@ ScopedVector<RegistryEntry> GetChromeDelegateExecuteEntries(
app_id_shell_key.append(ShellUtil::kRegShellPath);
// <root hkey>\Software\Classes\<app_id>\.exe\shell @=open
- entries.push_back(
- new RegistryEntry(app_id_shell_key, ShellUtil::kRegVerbOpen));
+ entries.push_back(base::MakeUnique<RegistryEntry>(app_id_shell_key,
+ ShellUtil::kRegVerbOpen));
// The command to execute when opening this application via the Metro UI.
const base::string16 delegate_command(
@@ -267,17 +270,19 @@ ScopedVector<RegistryEntry> GetChromeDelegateExecuteEntries(
// resource.
const base::string16 verb_name(
installer::GetLocalizedString(verb_and_id.name_id));
- entries.push_back(new RegistryEntry(sub_path, verb_name.c_str()));
+ entries.push_back(
+ base::MakeUnique<RegistryEntry>(sub_path, verb_name.c_str()));
}
- entries.push_back(
- new RegistryEntry(sub_path, L"CommandId", L"Browser.Launch"));
+ entries.push_back(base::MakeUnique<RegistryEntry>(sub_path, L"CommandId",
+ L"Browser.Launch"));
sub_path.push_back(base::FilePath::kSeparators[0]);
sub_path.append(ShellUtil::kRegCommand);
// <root hkey>\Software\Classes\<app_id>\.exe\shell\<verb>\command
- entries.push_back(new RegistryEntry(sub_path, delegate_command));
- entries.push_back(new RegistryEntry(
+ entries.push_back(
+ base::MakeUnique<RegistryEntry>(sub_path, delegate_command));
+ entries.push_back(base::MakeUnique<RegistryEntry>(
sub_path, ShellUtil::kRegDelegateExecute, app_info.delegate_clsid));
}
@@ -287,7 +292,7 @@ ScopedVector<RegistryEntry> GetChromeDelegateExecuteEntries(
// Gets the registry entries to register an application in the Windows registry.
// |app_info| provides all of the information needed.
void GetProgIdEntries(const ApplicationInfo& app_info,
- ScopedVector<RegistryEntry>* entries) {
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
// Basic sanity checks.
DCHECK(!app_info.prog_id.empty());
DCHECK_NE(L'.', app_info.prog_id[0]);
@@ -296,15 +301,16 @@ void GetProgIdEntries(const ApplicationInfo& app_info,
base::string16 prog_id_path(ShellUtil::kRegClasses);
prog_id_path.push_back(base::FilePath::kSeparators[0]);
prog_id_path.append(app_info.prog_id);
- entries->push_back(new RegistryEntry(prog_id_path, app_info.file_type_name));
- entries->push_back(new RegistryEntry(
+ entries->push_back(
+ base::MakeUnique<RegistryEntry>(prog_id_path, app_info.file_type_name));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
prog_id_path + ShellUtil::kRegDefaultIcon,
ShellUtil::FormatIconLocation(app_info.file_type_icon_path,
app_info.file_type_icon_index)));
- entries->push_back(new RegistryEntry(prog_id_path + ShellUtil::kRegShellOpen,
- app_info.command_line));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ prog_id_path + ShellUtil::kRegShellOpen, app_info.command_line));
if (!app_info.delegate_clsid.empty()) {
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
prog_id_path + ShellUtil::kRegShellOpen, ShellUtil::kRegDelegateExecute,
app_info.delegate_clsid));
// TODO(scottmg): Simplify after Metro removal. https://crbug.com/558054.
@@ -315,36 +321,36 @@ void GetProgIdEntries(const ApplicationInfo& app_info,
// depend on the DelegateExecute verb handler being set.
if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
if (!app_info.app_id.empty()) {
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
prog_id_path, ShellUtil::kRegAppUserModelId, app_info.app_id));
}
// Add \Software\Classes\<prog_id>\Application entries
base::string16 application_path(prog_id_path + ShellUtil::kRegApplication);
if (!app_info.app_id.empty()) {
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
application_path, ShellUtil::kRegAppUserModelId, app_info.app_id));
}
if (!app_info.application_icon_path.empty()) {
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
application_path, ShellUtil::kRegApplicationIcon,
ShellUtil::FormatIconLocation(app_info.application_icon_path,
app_info.application_icon_index)));
}
if (!app_info.application_name.empty()) {
- entries->push_back(new RegistryEntry(application_path,
- ShellUtil::kRegApplicationName,
- app_info.application_name));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ application_path, ShellUtil::kRegApplicationName,
+ app_info.application_name));
}
if (!app_info.application_description.empty()) {
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
application_path, ShellUtil::kRegApplicationDescription,
app_info.application_description));
}
if (!app_info.publisher_name.empty()) {
- entries->push_back(new RegistryEntry(application_path,
- ShellUtil::kRegApplicationCompany,
- app_info.publisher_name));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ application_path, ShellUtil::kRegApplicationCompany,
+ app_info.publisher_name));
}
}
}
@@ -352,10 +358,11 @@ void GetProgIdEntries(const ApplicationInfo& app_info,
// This method returns a list of all the registry entries that are needed to
// register this installation's ProgId and AppId. These entries need to be
// registered in HKLM prior to Win8.
-void GetChromeProgIdEntries(BrowserDistribution* dist,
- const base::FilePath& chrome_exe,
- const base::string16& suffix,
- ScopedVector<RegistryEntry>* entries) {
+void GetChromeProgIdEntries(
+ BrowserDistribution* dist,
+ const base::FilePath& chrome_exe,
+ const base::string16& suffix,
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
int chrome_icon_index = install_static::GetIconResourceIndex();
ApplicationInfo app_info;
@@ -382,28 +389,28 @@ void GetChromeProgIdEntries(BrowserDistribution* dist,
GetProgIdEntries(app_info, entries);
if (!app_info.delegate_clsid.empty()) {
- ScopedVector<RegistryEntry> delegate_execute_entries =
+ auto delegate_execute_entries =
GetChromeDelegateExecuteEntries(chrome_exe, app_info);
// Remove the keys (not only their values) so that Windows will continue
// to launch Chrome without a pesky association error.
// TODO(scottmg): Simplify after Metro removal. https://crbug.com/558054.
- for (RegistryEntry* entry : delegate_execute_entries)
+ for (const auto& entry : delegate_execute_entries)
entry->set_removal_flag(RegistryEntry::RemovalFlag::KEY);
// Move |delegate_execute_entries| to |entries|.
- entries->insert(entries->end(), delegate_execute_entries.begin(),
- delegate_execute_entries.end());
- delegate_execute_entries.weak_clear();
+ std::move(delegate_execute_entries.begin(), delegate_execute_entries.end(),
+ std::back_inserter(*entries));
}
}
// This method returns a list of the registry entries needed to declare a
// capability of handling a protocol on Windows.
-void GetProtocolCapabilityEntries(const base::string16& suffix,
- const base::string16& protocol,
- ScopedVector<RegistryEntry>* entries) {
- entries->push_back(
- new RegistryEntry(GetCapabilitiesKey(suffix).append(L"\\URLAssociations"),
- protocol, GetBrowserProgId(suffix)));
+void GetProtocolCapabilityEntries(
+ const base::string16& suffix,
+ const base::string16& protocol,
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ GetCapabilitiesKey(suffix).append(L"\\URLAssociations"), protocol,
+ GetBrowserProgId(suffix)));
}
// This method returns a list of the registry entries required to register this
@@ -411,10 +418,11 @@ void GetProtocolCapabilityEntries(const base::string16& suffix,
// Programs, StartMenuInternet, etc.). These entries need to be registered in
// HKLM prior to Win8. If |suffix| is not empty, these entries are guaranteed to
// be unique on this machine.
-void GetShellIntegrationEntries(BrowserDistribution* dist,
- const base::FilePath& chrome_exe,
- const base::string16& suffix,
- ScopedVector<RegistryEntry>* entries) {
+void GetShellIntegrationEntries(
+ BrowserDistribution* dist,
+ const base::FilePath& chrome_exe,
+ const base::string16& suffix,
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
const base::string16 icon_path(ShellUtil::FormatIconLocation(
chrome_exe, install_static::GetIconResourceIndex()));
const base::string16 quoted_exe_path(L"\"" + chrome_exe.value() + L"\"");
@@ -424,60 +432,61 @@ void GetShellIntegrationEntries(BrowserDistribution* dist,
// Register Chrome's display name.
// TODO(grt): http://crbug.com/75152 Also set LocalizedString; see
// http://msdn.microsoft.com/en-us/library/windows/desktop/cc144109(v=VS.85).aspx#registering_the_display_name
- entries->push_back(
- new RegistryEntry(start_menu_entry, dist->GetDisplayName()));
+ entries->push_back(base::MakeUnique<RegistryEntry>(start_menu_entry,
+ dist->GetDisplayName()));
// Register the "open" verb for launching Chrome via the "Internet" link.
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
start_menu_entry + ShellUtil::kRegShellOpen, quoted_exe_path));
// Register Chrome's icon for the Start Menu "Internet" link.
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
start_menu_entry + ShellUtil::kRegDefaultIcon, icon_path));
// Register installation information.
base::string16 install_info(start_menu_entry + L"\\InstallInfo");
// Note: not using CommandLine since it has ambiguous rules for quoting
// strings.
- entries->push_back(
- new RegistryEntry(install_info, kReinstallCommand,
- quoted_exe_path + L" --" +
- base::ASCIIToUTF16(switches::kMakeDefaultBrowser)));
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ install_info, kReinstallCommand,
+ quoted_exe_path + L" --" +
+ base::ASCIIToUTF16(switches::kMakeDefaultBrowser)));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
install_info, L"HideIconsCommand",
quoted_exe_path + L" --" + base::ASCIIToUTF16(switches::kHideIcons)));
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
install_info, L"ShowIconsCommand",
quoted_exe_path + L" --" + base::ASCIIToUTF16(switches::kShowIcons)));
- entries->push_back(new RegistryEntry(install_info, L"IconsVisible", 1));
+ entries->push_back(
+ base::MakeUnique<RegistryEntry>(install_info, L"IconsVisible", 1));
// Register with Default Programs.
const base::string16 reg_app_name(
install_static::GetBaseAppName().append(suffix));
// Tell Windows where to find Chrome's Default Programs info.
const base::string16 capabilities(GetCapabilitiesKey(suffix));
- entries->push_back(new RegistryEntry(ShellUtil::kRegRegisteredApplications,
- reg_app_name, capabilities));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ ShellUtil::kRegRegisteredApplications, reg_app_name, capabilities));
// Write out Chrome's Default Programs info.
// TODO(grt): http://crbug.com/75152 Write a reference to a localized
// resource rather than this.
- entries->push_back(new RegistryEntry(capabilities,
- ShellUtil::kRegApplicationDescription,
- dist->GetLongAppDescription()));
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ capabilities, ShellUtil::kRegApplicationDescription,
+ dist->GetLongAppDescription()));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
capabilities, ShellUtil::kRegApplicationIcon, icon_path));
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
capabilities, ShellUtil::kRegApplicationName, dist->GetDisplayName()));
- entries->push_back(new RegistryEntry(capabilities + L"\\Startmenu",
- L"StartMenuInternet", reg_app_name));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ capabilities + L"\\Startmenu", L"StartMenuInternet", reg_app_name));
const base::string16 html_prog_id(GetBrowserProgId(suffix));
for (int i = 0; ShellUtil::kPotentialFileAssociations[i] != NULL; i++) {
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
capabilities + L"\\FileAssociations",
ShellUtil::kPotentialFileAssociations[i], html_prog_id));
}
for (int i = 0; ShellUtil::kPotentialProtocolAssociations[i] != NULL; i++) {
- entries->push_back(new RegistryEntry(
+ entries->push_back(base::MakeUnique<RegistryEntry>(
capabilities + L"\\URLAssociations",
ShellUtil::kPotentialProtocolAssociations[i], html_prog_id));
}
@@ -486,9 +495,10 @@ void GetShellIntegrationEntries(BrowserDistribution* dist,
// Gets the registry entries to register an application as a handler for a
// particular file extension. |prog_id| is the ProgId used by Windows for the
// application. |ext| is the file extension, which must begin with a '.'.
-void GetAppExtRegistrationEntries(const base::string16& prog_id,
- const base::string16& ext,
- ScopedVector<RegistryEntry>* entries) {
+void GetAppExtRegistrationEntries(
+ const base::string16& prog_id,
+ const base::string16& ext,
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
// In HKEY_CURRENT_USER\Software\Classes\EXT\OpenWithProgids, create an
// empty value with this class's ProgId.
base::string16 key_name(ShellUtil::kRegClasses);
@@ -496,7 +506,8 @@ void GetAppExtRegistrationEntries(const base::string16& prog_id,
key_name.append(ext);
key_name.push_back(base::FilePath::kSeparators[0]);
key_name.append(ShellUtil::kRegOpenWithProgids);
- entries->push_back(new RegistryEntry(key_name, prog_id, base::string16()));
+ entries->push_back(
+ base::MakeUnique<RegistryEntry>(key_name, prog_id, base::string16()));
}
// This method returns a list of the registry entries required for this
@@ -507,16 +518,18 @@ void GetAppExtRegistrationEntries(const base::string16& prog_id,
// - File Associations
// http://msdn.microsoft.com/en-us/library/bb166549
// These entries need to be registered in HKLM prior to Win8.
-void GetChromeAppRegistrationEntries(const base::FilePath& chrome_exe,
- const base::string16& suffix,
- ScopedVector<RegistryEntry>* entries) {
+void GetChromeAppRegistrationEntries(
+ const base::FilePath& chrome_exe,
+ const base::string16& suffix,
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
base::string16 app_path_key(ShellUtil::kAppPathsRegistryKey);
app_path_key.push_back(base::FilePath::kSeparators[0]);
app_path_key.append(chrome_exe.BaseName().value());
- entries->push_back(new RegistryEntry(app_path_key, chrome_exe.value()));
- entries->push_back(new RegistryEntry(app_path_key,
- ShellUtil::kAppPathsRegistryPathName,
- chrome_exe.DirName().value()));
+ entries->push_back(
+ base::MakeUnique<RegistryEntry>(app_path_key, chrome_exe.value()));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ app_path_key, ShellUtil::kAppPathsRegistryPathName,
+ chrome_exe.DirName().value()));
const base::string16 html_prog_id(GetBrowserProgId(suffix));
for (int i = 0; ShellUtil::kPotentialFileAssociations[i] != NULL; i++) {
@@ -536,29 +549,30 @@ void GetChromeAppRegistrationEntries(const base::FilePath& chrome_exe,
// become the default. Otherwise, the first time the user opens a file, they are
// presented with the dialog to set the default handler. (This is roughly
// equivalent to being called with |overwrite_existing| false.)
-void GetAppDefaultRegistrationEntries(const base::string16& prog_id,
- const base::string16& ext,
- bool overwrite_existing,
- ScopedVector<RegistryEntry>* entries) {
+void GetAppDefaultRegistrationEntries(
+ const base::string16& prog_id,
+ const base::string16& ext,
+ bool overwrite_existing,
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
// Set the default value of HKEY_CURRENT_USER\Software\Classes\EXT to this
// class's name.
base::string16 key_name(ShellUtil::kRegClasses);
key_name.push_back(base::FilePath::kSeparators[0]);
key_name.append(ext);
- std::unique_ptr<RegistryEntry> default_association(
- new RegistryEntry(key_name, prog_id));
+ auto default_association = base::MakeUnique<RegistryEntry>(key_name, prog_id);
if (overwrite_existing ||
!default_association->KeyExistsInRegistry(RegistryEntry::LOOK_IN_HKCU)) {
- entries->push_back(default_association.release());
+ entries->push_back(std::move(default_association));
}
}
// This method returns a list of all the user level registry entries that are
// needed to make Chromium the default handler for a protocol on XP.
-void GetXPStyleUserProtocolEntries(const base::string16& protocol,
- const base::string16& chrome_icon,
- const base::string16& chrome_open,
- ScopedVector<RegistryEntry>* entries) {
+void GetXPStyleUserProtocolEntries(
+ const base::string16& protocol,
+ const base::string16& chrome_icon,
+ const base::string16& chrome_open,
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
// Protocols associations.
base::string16 url_key(ShellUtil::kRegClasses);
url_key.push_back(base::FilePath::kSeparators[0]);
@@ -567,33 +581,36 @@ void GetXPStyleUserProtocolEntries(const base::string16& protocol,
// This registry value tells Windows that this 'class' is a URL scheme
// so IE, explorer and other apps will route it to our handler.
// <root hkey>\Software\Classes\<protocol>\URL Protocol
- entries->push_back(
- new RegistryEntry(url_key, ShellUtil::kRegUrlProtocol, base::string16()));
+ entries->push_back(base::MakeUnique<RegistryEntry>(
+ url_key, ShellUtil::kRegUrlProtocol, base::string16()));
// <root hkey>\Software\Classes\<protocol>\DefaultIcon
base::string16 icon_key = url_key + ShellUtil::kRegDefaultIcon;
- entries->push_back(new RegistryEntry(icon_key, chrome_icon));
+ entries->push_back(base::MakeUnique<RegistryEntry>(icon_key, chrome_icon));
// <root hkey>\Software\Classes\<protocol>\shell\open\command
base::string16 shell_key = url_key + ShellUtil::kRegShellOpen;
- entries->push_back(new RegistryEntry(shell_key, chrome_open));
+ entries->push_back(base::MakeUnique<RegistryEntry>(shell_key, chrome_open));
// <root hkey>\Software\Classes\<protocol>\shell\open\ddeexec
base::string16 dde_key = url_key + L"\\shell\\open\\ddeexec";
- entries->push_back(new RegistryEntry(dde_key, base::string16()));
+ entries->push_back(
+ base::MakeUnique<RegistryEntry>(dde_key, base::string16()));
// <root hkey>\Software\Classes\<protocol>\shell\@
base::string16 protocol_shell_key = url_key + ShellUtil::kRegShellPath;
- entries->push_back(new RegistryEntry(protocol_shell_key, L"open"));
+ entries->push_back(
+ base::MakeUnique<RegistryEntry>(protocol_shell_key, L"open"));
}
// This method returns a list of all the user level registry entries that are
// needed to make Chromium default browser on XP. Some of these entries are
// irrelevant in recent versions of Windows, but we register them anyways as
// some legacy apps are hardcoded to lookup those values.
-void GetXPStyleDefaultBrowserUserEntries(const base::FilePath& chrome_exe,
- const base::string16& suffix,
- ScopedVector<RegistryEntry>* entries) {
+void GetXPStyleDefaultBrowserUserEntries(
+ const base::FilePath& chrome_exe,
+ const base::string16& suffix,
+ std::vector<std::unique_ptr<RegistryEntry>>* entries) {
// File extension associations.
base::string16 html_prog_id(GetBrowserProgId(suffix));
for (int i = 0; ShellUtil::kDefaultFileAssociations[i] != NULL; i++) {
@@ -613,15 +630,16 @@ void GetXPStyleDefaultBrowserUserEntries(const base::FilePath& chrome_exe,
// start->Internet shortcut.
base::string16 start_menu(ShellUtil::kRegStartMenuInternet);
base::string16 app_name = install_static::GetBaseAppName().append(suffix);
- entries->push_back(new RegistryEntry(start_menu, app_name));
+ entries->push_back(base::MakeUnique<RegistryEntry>(start_menu, app_name));
}
// Checks that all |entries| are present on this computer (or absent if their
// |removal_flag_| is set). |look_for_in| is passed to
// RegistryEntry::ExistsInRegistry(). Documentation for it can be found there.
-bool AreEntriesAsDesired(const ScopedVector<RegistryEntry>& entries,
- uint32_t look_for_in) {
- for (const auto* entry : entries) {
+bool AreEntriesAsDesired(
+ const std::vector<std::unique_ptr<RegistryEntry>>& entries,
+ uint32_t look_for_in) {
+ for (const auto& entry : entries) {
if (entry->ExistsInRegistry(look_for_in) != !entry->IsFlaggedForRemoval())
return false;
}
@@ -642,7 +660,7 @@ bool IsChromeRegistered(BrowserDistribution* dist,
const base::FilePath& chrome_exe,
const base::string16& suffix,
uint32_t look_for_in) {
- ScopedVector<RegistryEntry> entries;
+ std::vector<std::unique_ptr<RegistryEntry>> entries;
GetChromeProgIdEntries(dist, chrome_exe, suffix, &entries);
GetShellIntegrationEntries(dist, chrome_exe, suffix, &entries);
GetChromeAppRegistrationEntries(chrome_exe, suffix, &entries);
@@ -655,7 +673,7 @@ bool IsChromeRegistered(BrowserDistribution* dist,
bool IsChromeRegisteredForProtocol(const base::string16& suffix,
const base::string16& protocol,
uint32_t look_for_in) {
- ScopedVector<RegistryEntry> entries;
+ std::vector<std::unique_ptr<RegistryEntry>> entries;
GetProtocolCapabilityEntries(suffix, protocol, &entries);
return AreEntriesAsDesired(entries, look_for_in);
}
@@ -888,7 +906,7 @@ HKEY DetermineRegistrationRoot(bool is_per_user) {
bool RegisterChromeAsDefaultXPStyle(int shell_change,
const base::FilePath& chrome_exe) {
bool ret = true;
- ScopedVector<RegistryEntry> entries;
+ std::vector<std::unique_ptr<RegistryEntry>> entries;
GetXPStyleDefaultBrowserUserEntries(
chrome_exe, ShellUtil::GetCurrentInstallationSuffix(chrome_exe),
&entries);
@@ -917,7 +935,7 @@ bool RegisterChromeAsDefaultXPStyle(int shell_change,
bool RegisterChromeAsDefaultProtocolClientXPStyle(
const base::FilePath& chrome_exe,
const base::string16& protocol) {
- ScopedVector<RegistryEntry> entries;
+ std::vector<std::unique_ptr<RegistryEntry>> entries;
const base::string16 chrome_open(
ShellUtil::GetChromeShellOpenCmd(chrome_exe));
const base::string16 chrome_icon(ShellUtil::FormatIconLocation(
@@ -2074,8 +2092,8 @@ bool ShellUtil::RegisterChromeBrowser(BrowserDistribution* dist,
if (root == HKEY_CURRENT_USER || IsUserAnAdmin()) {
// Do the full registration if we can do it at user-level or if the user is
// an admin.
- ScopedVector<RegistryEntry> progid_and_appreg_entries;
- ScopedVector<RegistryEntry> shell_entries;
+ std::vector<std::unique_ptr<RegistryEntry>> progid_and_appreg_entries;
+ std::vector<std::unique_ptr<RegistryEntry>> shell_entries;
GetChromeProgIdEntries(dist, chrome_exe, suffix,
&progid_and_appreg_entries);
GetChromeAppRegistrationEntries(chrome_exe, suffix,
@@ -2094,7 +2112,7 @@ bool ShellUtil::RegisterChromeBrowser(BrowserDistribution* dist,
} else {
// If we got to this point then all we can do is create ProgId and basic app
// registrations under HKCU.
- ScopedVector<RegistryEntry> entries;
+ std::vector<std::unique_ptr<RegistryEntry>> entries;
GetChromeProgIdEntries(dist, chrome_exe, base::string16(), &entries);
// Prefer to use |suffix|; unless Chrome's ProgIds are already registered
// with no suffix (as per the old registration style): in which case some
@@ -2157,7 +2175,7 @@ bool ShellUtil::RegisterChromeForProtocol(BrowserDistribution* dist,
return false;
// Write in the capabillity for the protocol.
- ScopedVector<RegistryEntry> entries;
+ std::vector<std::unique_ptr<RegistryEntry>> entries;
GetProtocolCapabilityEntries(suffix, protocol, &entries);
return AddRegistryEntries(root, entries);
} else if (elevate_if_not_admin &&
@@ -2269,7 +2287,7 @@ bool ShellUtil::AddFileAssociations(
const base::string16& file_type_name,
const base::FilePath& icon_path,
const std::set<base::string16>& file_extensions) {
- ScopedVector<RegistryEntry> entries;
+ std::vector<std::unique_ptr<RegistryEntry>> entries;
// Create a class for this app.
ApplicationInfo app_info;
@@ -2317,13 +2335,13 @@ bool ShellUtil::DeleteFileAssociations(const base::string16& prog_id) {
}
// static
-bool ShellUtil::AddRegistryEntries(HKEY root,
- const ScopedVector<RegistryEntry>& entries) {
+bool ShellUtil::AddRegistryEntries(
+ HKEY root,
+ const std::vector<std::unique_ptr<RegistryEntry>>& entries) {
std::unique_ptr<WorkItemList> items(WorkItem::CreateWorkItemList());
- for (ScopedVector<RegistryEntry>::const_iterator itr = entries.begin();
- itr != entries.end(); ++itr)
- (*itr)->AddToWorkItemList(root, items.get());
+ for (const auto& entry : entries)
+ entry->AddToWorkItemList(root, items.get());
// Apply all the registry changes and if there is a problem, rollback
if (!items->Do()) {
« no previous file with comments | « chrome/installer/util/shell_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698