Commit aa5879a5 authored by grt@chromium.org's avatar grt@chromium.org

Only do DelegateExecute verb handler registration for Google Chrome.

Don't do it for canary, which can't be made the default browser anyway, or for Chromium, which needs its own handler registration; see the associated bug.

BUG=123727
TEST=install SxS Chrome and/or Chromium and confirm that the DelegateExecute handler is not registered (chrome_installer.log should say "No DelegateExecute verb handler processing to do for ...")


Review URL: http://codereview.chromium.org/10103020

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@132596 0039d316-1c4b-4281-b951-d872f2087c98
parent 8a3d0caf
...@@ -292,9 +292,6 @@ void AddProductSpecificWorkItems(const InstallationState& original_state, ...@@ -292,9 +292,6 @@ void AddProductSpecificWorkItems(const InstallationState& original_state,
if (p.is_chrome_frame()) { if (p.is_chrome_frame()) {
AddChromeFrameWorkItems(original_state, installer_state, setup_path, AddChromeFrameWorkItems(original_state, installer_state, setup_path,
new_version, p, list); new_version, p, list);
} else if (p.is_chrome()) {
AddChromeWorkItems(original_state, installer_state, setup_path,
new_version, p, list);
} }
} }
} }
...@@ -825,6 +822,9 @@ void AddInstallWorkItems(const InstallationState& original_state, ...@@ -825,6 +822,9 @@ void AddInstallWorkItems(const InstallationState& original_state,
AddVersionKeyWorkItems(root, product->distribution(), new_version, AddVersionKeyWorkItems(root, product->distribution(), new_version,
add_language_identifier, install_list); add_language_identifier, install_list);
AddDelegateExecuteWorkItems(original_state, installer_state, setup_path,
new_version, *product, install_list);
} }
if (installer_state.is_multi_install()) { if (installer_state.is_multi_install()) {
...@@ -1030,25 +1030,36 @@ void AddChromeFrameWorkItems(const InstallationState& original_state, ...@@ -1030,25 +1030,36 @@ void AddChromeFrameWorkItems(const InstallationState& original_state,
} }
} }
void AddChromeWorkItems(const InstallationState& original_state, void AddDelegateExecuteWorkItems(const InstallationState& original_state,
const InstallerState& installer_state, const InstallerState& installer_state,
const FilePath& setup_path, const FilePath& setup_path,
const Version& new_version, const Version& new_version,
const Product& product, const Product& product,
WorkItemList* list) { WorkItemList* list) {
// For the moment, this function adds work items to perform COM registration string16 handler_class_uuid;
// specific to the Windows 8 delegate. If more work needs to be done in the string16 type_lib_uuid;
// future, pull this into its own function called by AddChromeWorkItems. string16 type_lib_version;
DCHECK(product.is_chrome()); string16 interface_uuid;
BrowserDistribution* distribution = product.distribution();
if (!distribution->GetDelegateExecuteHandlerData(
&handler_class_uuid, &type_lib_uuid, &type_lib_version,
&interface_uuid)) {
VLOG(1) << "No DelegateExecute verb handler processing to do for "
<< distribution->GetAppShortCutName();
return;
}
VLOG(1) << "DelegateExecute verb handler COM registration.";
HKEY root = installer_state.root_key(); HKEY root = installer_state.root_key();
const bool is_install = const bool is_install =
(installer_state.operation() != InstallerState::UNINSTALL); (installer_state.operation() != InstallerState::UNINSTALL);
string16 delegate_execute_path(L"Software\\Classes\\CLSID\\"); string16 delegate_execute_path(L"Software\\Classes\\CLSID\\");
delegate_execute_path.append(kCommandExecuteImplUuid); delegate_execute_path.append(handler_class_uuid);
string16 typelib_path(L"Software\\Classes\\TypeLib\\"); string16 typelib_path(L"Software\\Classes\\TypeLib\\");
typelib_path.append(kDelegateExecuteLibUuid); typelib_path.append(type_lib_uuid);
string16 interface_path(L"Software\\Classes\\Interface\\"); string16 interface_path(L"Software\\Classes\\Interface\\");
interface_path.append(kICommandExecuteImplUuid); interface_path.append(interface_uuid);
if (is_install) { if (is_install) {
// The path to the exe (in the version directory). // The path to the exe (in the version directory).
...@@ -1077,22 +1088,20 @@ void AddChromeWorkItems(const InstallationState& original_state, ...@@ -1077,22 +1088,20 @@ void AddChromeWorkItems(const InstallationState& original_state,
subkey.assign(delegate_execute_path).append(L"\\TypeLib"); subkey.assign(delegate_execute_path).append(L"\\TypeLib");
list->AddCreateRegKeyWorkItem(root, subkey); list->AddCreateRegKeyWorkItem(root, subkey);
list->AddSetRegValueWorkItem(root, subkey, L"", kDelegateExecuteLibUuid, list->AddSetRegValueWorkItem(root, subkey, L"", type_lib_uuid, true);
true);
subkey.assign(delegate_execute_path).append(L"\\Version"); subkey.assign(delegate_execute_path).append(L"\\Version");
list->AddCreateRegKeyWorkItem(root, subkey); list->AddCreateRegKeyWorkItem(root, subkey);
list->AddSetRegValueWorkItem(root, subkey, L"", kDelegateExecuteLibVersion, list->AddSetRegValueWorkItem(root, subkey, L"", type_lib_version, true);
true);
// Register the DelegateExecuteLib type library at // Register the DelegateExecuteLib type library at
// Software\Classes\TypeLib\{4E805ED8-EBA0-4601-9681-12815A56EBFD} // Software\Classes\TypeLib\{4E805ED8-EBA0-4601-9681-12815A56EBFD}
list->AddCreateRegKeyWorkItem(root, typelib_path); list->AddCreateRegKeyWorkItem(root, typelib_path);
string16 version_key(typelib_path); string16 version_key(typelib_path);
version_key.append(1, L'\\').append(kDelegateExecuteLibVersion); version_key.append(1, L'\\').append(type_lib_version);
list->AddCreateRegKeyWorkItem(root, version_key); list->AddCreateRegKeyWorkItem(root, version_key);
list->AddSetRegValueWorkItem(root, version_key, L"", kDelegateExecuteLib, list->AddSetRegValueWorkItem(root, version_key, L"", L"DelegateExecuteLib",
true); true);
subkey.assign(version_key).append(L"\\FLAGS"); subkey.assign(version_key).append(L"\\FLAGS");
...@@ -1117,7 +1126,7 @@ void AddChromeWorkItems(const InstallationState& original_state, ...@@ -1117,7 +1126,7 @@ void AddChromeWorkItems(const InstallationState& original_state,
// Software\Classes\Interface\{0BA0D4E9-2259-4963-B9AE-A839F7CB7544} // Software\Classes\Interface\{0BA0D4E9-2259-4963-B9AE-A839F7CB7544}
list->AddCreateRegKeyWorkItem(root, interface_path); list->AddCreateRegKeyWorkItem(root, interface_path);
list->AddSetRegValueWorkItem(root, interface_path, L"", list->AddSetRegValueWorkItem(root, interface_path, L"",
kICommandExecuteImpl, true); L"ICommandExecuteImpl", true);
subkey.assign(interface_path).append(L"\\ProxyStubClsid32"); subkey.assign(interface_path).append(L"\\ProxyStubClsid32");
list->AddCreateRegKeyWorkItem(root, subkey); list->AddCreateRegKeyWorkItem(root, subkey);
...@@ -1125,10 +1134,9 @@ void AddChromeWorkItems(const InstallationState& original_state, ...@@ -1125,10 +1134,9 @@ void AddChromeWorkItems(const InstallationState& original_state,
subkey.assign(interface_path).append(L"\\TypeLib"); subkey.assign(interface_path).append(L"\\TypeLib");
list->AddCreateRegKeyWorkItem(root, subkey); list->AddCreateRegKeyWorkItem(root, subkey);
list->AddSetRegValueWorkItem(root, subkey, L"", kDelegateExecuteLibUuid, list->AddSetRegValueWorkItem(root, subkey, L"", type_lib_uuid, true);
list->AddSetRegValueWorkItem(root, subkey, L"Version", type_lib_version,
true); true);
list->AddSetRegValueWorkItem(root, subkey, L"Version",
kDelegateExecuteLibVersion, true);
} else { } else {
list->AddDeleteRegKeyWorkItem(root, delegate_execute_path); list->AddDeleteRegKeyWorkItem(root, delegate_execute_path);
......
...@@ -122,15 +122,14 @@ void AddChromeFrameWorkItems(const InstallationState& original_state, ...@@ -122,15 +122,14 @@ void AddChromeFrameWorkItems(const InstallationState& original_state,
const Product& product, const Product& product,
WorkItemList* list); WorkItemList* list);
// Called for either installation or uninstallation. This method updates the // Called for either installation or uninstallation. This method adds or
// registry according to Chrome specific options for the current installation. // removes COM registration for a product's DelegateExecute verb handler.
// This includes handling of the delegate execute server. void AddDelegateExecuteWorkItems(const InstallationState& original_state,
void AddChromeWorkItems(const InstallationState& original_state, const InstallerState& installer_state,
const InstallerState& installer_state, const FilePath& setup_path,
const FilePath& setup_path, const Version& new_version,
const Version& new_version, const Product& product,
const Product& product, WorkItemList* list);
WorkItemList* list);
// This method adds work items to create (or update) Chrome uninstall entry in // This method adds work items to create (or update) Chrome uninstall entry in
// either the Control Panel->Add/Remove Programs list or in the Omaha client // either the Control Panel->Add/Remove Programs list or in the Omaha client
......
...@@ -689,16 +689,17 @@ const wchar_t kChromeExtProgId[] = L"ChromiumExt"; ...@@ -689,16 +689,17 @@ const wchar_t kChromeExtProgId[] = L"ChromiumExt";
} }
} }
bool ProcessChromeWorkItems(const InstallationState& original_state, // Builds and executes a work item list to remove DelegateExecute verb handler
const InstallerState& installer_state, // work items for |product|. This will be a noop for products whose
const FilePath& setup_path, // corresponding BrowserDistribution implementations do not publish
const Product& product) { // DelegateExecute data via an implementation of GetDelegateExecuteHandlerData.
if (!product.is_chrome()) bool ProcessDelegateExecuteWorkItems(const InstallationState& original_state,
return false; const InstallerState& installer_state,
const FilePath& setup_path,
scoped_ptr<WorkItemList> item_list(WorkItem::CreateWorkItemList()); const Product& product) {
AddChromeWorkItems(original_state, installer_state, setup_path, Version(), scoped_ptr<WorkItemList> item_list(WorkItem::CreateNoRollbackWorkItemList());
product, item_list.get()); AddDelegateExecuteWorkItems(original_state, installer_state, setup_path,
Version(), product, item_list.get());
return item_list->Do(); return item_list->Do();
} }
...@@ -709,7 +710,7 @@ bool ProcessChromeFrameWorkItems(const InstallationState& original_state, ...@@ -709,7 +710,7 @@ bool ProcessChromeFrameWorkItems(const InstallationState& original_state,
if (!product.is_chrome_frame()) if (!product.is_chrome_frame())
return false; return false;
scoped_ptr<WorkItemList> item_list(WorkItem::CreateWorkItemList()); scoped_ptr<WorkItemList> item_list(WorkItem::CreateNoRollbackWorkItemList());
AddChromeFrameWorkItems(original_state, installer_state, setup_path, AddChromeFrameWorkItems(original_state, installer_state, setup_path,
Version(), product, item_list.get()); Version(), product, item_list.get());
return item_list->Do(); return item_list->Do();
...@@ -819,10 +820,10 @@ InstallStatus UninstallProduct(const InstallationState& original_state, ...@@ -819,10 +820,10 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
suffix, installer_state.target_path(), &ret); suffix, installer_state.target_path(), &ret);
} }
if (is_chrome) { ProcessDelegateExecuteWorkItems(original_state, installer_state, setup_path,
ProcessChromeWorkItems(original_state, installer_state, setup_path, product);
product);
} else { if (!is_chrome) {
ProcessChromeFrameWorkItems(original_state, installer_state, setup_path, ProcessChromeFrameWorkItems(original_state, installer_state, setup_path,
product); product);
} }
......
...@@ -229,6 +229,15 @@ bool BrowserDistribution::GetChromeChannel(std::wstring* channel) { ...@@ -229,6 +229,15 @@ bool BrowserDistribution::GetChromeChannel(std::wstring* channel) {
return false; return false;
} }
bool BrowserDistribution::GetDelegateExecuteHandlerData(
string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid) {
// TODO(grt): http://crbug.com/123727 Return values for Chromium.
return false;
}
void BrowserDistribution::UpdateInstallStatus(bool system_install, void BrowserDistribution::UpdateInstallStatus(bool system_install,
installer::ArchiveType archive_type, installer::ArchiveType archive_type,
installer::InstallStatus install_status) { installer::InstallStatus install_status) {
......
...@@ -116,6 +116,16 @@ class BrowserDistribution { ...@@ -116,6 +116,16 @@ class BrowserDistribution {
virtual bool GetChromeChannel(std::wstring* channel); virtual bool GetChromeChannel(std::wstring* channel);
// Returns true if the distribution includes a DelegateExecute verb handler,
// and provides the COM registration data if so:
// |handler_class_uuid| is the CommandExecuteImpl class UUID.
// |type_lib_uuid| and |type_lib_version| identify its type library.
// |interface_uuid| is the ICommandExecuteImpl interface UUID.
virtual bool GetDelegateExecuteHandlerData(string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid);
virtual void UpdateInstallStatus(bool system_install, virtual void UpdateInstallStatus(bool system_install,
installer::ArchiveType archive_type, installer::ArchiveType archive_type,
installer::InstallStatus install_status); installer::InstallStatus install_status);
......
...@@ -122,6 +122,14 @@ bool ChromeFrameDistribution::CanCreateDesktopShortcuts() { ...@@ -122,6 +122,14 @@ bool ChromeFrameDistribution::CanCreateDesktopShortcuts() {
return false; return false;
} }
bool ChromeFrameDistribution::GetDelegateExecuteHandlerData(
string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid) {
return false;
}
void ChromeFrameDistribution::UpdateInstallStatus(bool system_install, void ChromeFrameDistribution::UpdateInstallStatus(bool system_install,
installer::ArchiveType archive_type, installer::ArchiveType archive_type,
installer::InstallStatus install_status) { installer::InstallStatus install_status) {
......
...@@ -55,6 +55,11 @@ class ChromeFrameDistribution : public BrowserDistribution { ...@@ -55,6 +55,11 @@ class ChromeFrameDistribution : public BrowserDistribution {
virtual bool CanCreateDesktopShortcuts() OVERRIDE; virtual bool CanCreateDesktopShortcuts() OVERRIDE;
virtual bool GetDelegateExecuteHandlerData(string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid) OVERRIDE;
virtual void UpdateInstallStatus(bool system_install, virtual void UpdateInstallStatus(bool system_install,
installer::ArchiveType archive_type, installer::ArchiveType archive_type,
installer::InstallStatus install_status) OVERRIDE; installer::InstallStatus install_status) OVERRIDE;
......
...@@ -49,6 +49,13 @@ namespace { ...@@ -49,6 +49,13 @@ namespace {
const wchar_t kChromeGuid[] = L"{8A69D345-D564-463c-AFF1-A69D9E530F96}"; const wchar_t kChromeGuid[] = L"{8A69D345-D564-463c-AFF1-A69D9E530F96}";
const wchar_t kBrowserAppId[] = L"Chrome"; const wchar_t kBrowserAppId[] = L"Chrome";
const wchar_t kCommandExecuteImplUuid[] =
L"{5C65F4B0-3651-4514-B207-D10CB699B14B}";
const wchar_t kDelegateExecuteLibUuid[] =
L"{4E805ED8-EBA0-4601-9681-12815A56EBFD}";
const wchar_t kDelegateExecuteLibVersion[] = L"1.0";
const wchar_t kICommandExecuteImplUuid[] =
L"{0BA0D4E9-2259-4963-B9AE-A839F7CB7544}";
// The following strings are the possible outcomes of the toast experiment // The following strings are the possible outcomes of the toast experiment
// as recorded in the |client| field. // as recorded in the |client| field.
...@@ -526,6 +533,18 @@ std::wstring GoogleChromeDistribution::GetVersionKey() { ...@@ -526,6 +533,18 @@ std::wstring GoogleChromeDistribution::GetVersionKey() {
return key; return key;
} }
bool GoogleChromeDistribution::GetDelegateExecuteHandlerData(
string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid) {
*handler_class_uuid = kCommandExecuteImplUuid;
*type_lib_uuid = kDelegateExecuteLibUuid;
*type_lib_version = kDelegateExecuteLibVersion;
*interface_uuid = kICommandExecuteImplUuid;
return true;
}
// This method checks if we need to change "ap" key in Google Update to try // This method checks if we need to change "ap" key in Google Update to try
// full installer as fall back method in case incremental installer fails. // full installer as fall back method in case incremental installer fails.
// - If incremental installer fails we append a magic string ("-full"), if // - If incremental installer fails we append a magic string ("-full"), if
......
...@@ -74,6 +74,11 @@ class GoogleChromeDistribution : public BrowserDistribution { ...@@ -74,6 +74,11 @@ class GoogleChromeDistribution : public BrowserDistribution {
virtual std::wstring GetVersionKey() OVERRIDE; virtual std::wstring GetVersionKey() OVERRIDE;
virtual bool GetDelegateExecuteHandlerData(string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid) OVERRIDE;
virtual void UpdateInstallStatus( virtual void UpdateInstallStatus(
bool system_install, bool system_install,
installer::ArchiveType archive_type, installer::ArchiveType archive_type,
......
...@@ -111,6 +111,16 @@ std::wstring GoogleChromeDistribution::GetVersionKey() { ...@@ -111,6 +111,16 @@ std::wstring GoogleChromeDistribution::GetVersionKey() {
return std::wstring(); return std::wstring();
} }
bool GoogleChromeDistribution::GetDelegateExecuteHandlerData(
string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid) {
NOTREACHED();
return false;
}
void GoogleChromeDistribution::UpdateInstallStatus(bool system_install, void GoogleChromeDistribution::UpdateInstallStatus(bool system_install,
installer::ArchiveType archive_type, installer::ArchiveType archive_type,
installer::InstallStatus install_status) { installer::InstallStatus install_status) {
......
// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -62,6 +62,14 @@ bool GoogleChromeSxSDistribution::GetChromeChannel(std::wstring* channel) { ...@@ -62,6 +62,14 @@ bool GoogleChromeSxSDistribution::GetChromeChannel(std::wstring* channel) {
return true; return true;
} }
bool GoogleChromeSxSDistribution::GetDelegateExecuteHandlerData(
string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid) {
return false;
}
std::wstring GoogleChromeSxSDistribution::ChannelName() { std::wstring GoogleChromeSxSDistribution::ChannelName() {
return kChannelName; return kChannelName;
} }
// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -27,6 +27,10 @@ class GoogleChromeSxSDistribution : public GoogleChromeDistribution { ...@@ -27,6 +27,10 @@ class GoogleChromeSxSDistribution : public GoogleChromeDistribution {
virtual bool CanSetAsDefault() OVERRIDE; virtual bool CanSetAsDefault() OVERRIDE;
virtual int GetIconIndex() OVERRIDE; virtual int GetIconIndex() OVERRIDE;
virtual bool GetChromeChannel(std::wstring* channel) OVERRIDE; virtual bool GetChromeChannel(std::wstring* channel) OVERRIDE;
virtual bool GetDelegateExecuteHandlerData(string16* handler_class_uuid,
string16* type_lib_uuid,
string16* type_lib_version,
string16* interface_uuid) OVERRIDE;
// returns the channel name for GoogleChromeSxSDistribution // returns the channel name for GoogleChromeSxSDistribution
static std::wstring ChannelName(); static std::wstring ChannelName();
private: private:
......
...@@ -179,6 +179,9 @@ const wchar_t kInstallerDir[] = L"Installer"; ...@@ -179,6 +179,9 @@ const wchar_t kInstallerDir[] = L"Installer";
const wchar_t kInstallTempDir[] = L"Temp"; const wchar_t kInstallTempDir[] = L"Temp";
const wchar_t kInstallUserDataDir[] = L"User Data"; const wchar_t kInstallUserDataDir[] = L"User Data";
const wchar_t kNaClExe[] = L"nacl64.exe"; const wchar_t kNaClExe[] = L"nacl64.exe";
// The CLSID of the proxy stub OLE Automation universal marshaler, the default
// marshaler for all interfaces.
const wchar_t kPSOAInterfaceUuid[] = L"{00020424-0000-0000-C000-000000000046}";
const wchar_t kSetupExe[] = L"setup.exe"; const wchar_t kSetupExe[] = L"setup.exe";
const wchar_t kSxSSuffix[] = L" SxS"; const wchar_t kSxSSuffix[] = L" SxS";
const wchar_t kUninstallStringField[] = L"UninstallString"; const wchar_t kUninstallStringField[] = L"UninstallString";
...@@ -208,16 +211,4 @@ const wchar_t kChromeChannelDev[] = L"dev"; ...@@ -208,16 +211,4 @@ const wchar_t kChromeChannelDev[] = L"dev";
const wchar_t kChromeChannelBeta[] = L"beta"; const wchar_t kChromeChannelBeta[] = L"beta";
const wchar_t kChromeChannelStable[] = L""; const wchar_t kChromeChannelStable[] = L"";
// See delegate_execute.idl.
const wchar_t kCommandExecuteImplUuid[] =
L"{5C65F4B0-3651-4514-B207-D10CB699B14B}";
const wchar_t kDelegateExecuteLib[] = L"DelegateExecuteLib";
const wchar_t kDelegateExecuteLibUuid[] =
L"{4E805ED8-EBA0-4601-9681-12815A56EBFD}";
const wchar_t kDelegateExecuteLibVersion[] = L"1.0";
const wchar_t kICommandExecuteImpl[] = L"ICommandExecuteImpl";
const wchar_t kICommandExecuteImplUuid[] =
L"{0BA0D4E9-2259-4963-B9AE-A839F7CB7544}";
const wchar_t kPSOAInterfaceUuid[] = L"{00020424-0000-0000-C000-000000000046}";
} // namespace installer } // namespace installer
...@@ -184,6 +184,7 @@ extern const wchar_t kInstallerDir[]; ...@@ -184,6 +184,7 @@ extern const wchar_t kInstallerDir[];
extern const wchar_t kInstallTempDir[]; extern const wchar_t kInstallTempDir[];
extern const wchar_t kInstallUserDataDir[]; extern const wchar_t kInstallUserDataDir[];
extern const wchar_t kNaClExe[]; extern const wchar_t kNaClExe[];
extern const wchar_t kPSOAInterfaceUuid[];
extern const wchar_t kSetupExe[]; extern const wchar_t kSetupExe[];
extern const wchar_t kSxSSuffix[]; extern const wchar_t kSxSSuffix[];
extern const wchar_t kUninstallArgumentsField[]; extern const wchar_t kUninstallArgumentsField[];
...@@ -216,15 +217,6 @@ extern const wchar_t kChromeChannelDev[]; ...@@ -216,15 +217,6 @@ extern const wchar_t kChromeChannelDev[];
extern const wchar_t kChromeChannelBeta[]; extern const wchar_t kChromeChannelBeta[];
extern const wchar_t kChromeChannelStable[]; extern const wchar_t kChromeChannelStable[];
// Delegate Execute registration values.
extern const wchar_t kCommandExecuteImplUuid[];
extern const wchar_t kDelegateExecuteLib[];
extern const wchar_t kDelegateExecuteLibUuid[];
extern const wchar_t kDelegateExecuteLibVersion[];
extern const wchar_t kICommandExecuteImpl[];
extern const wchar_t kICommandExecuteImplUuid[];
extern const wchar_t kPSOAInterfaceUuid[];
} // namespace installer } // namespace installer
#endif // CHROME_INSTALLER_UTIL_UTIL_CONSTANTS_H_ #endif // CHROME_INSTALLER_UTIL_UTIL_CONSTANTS_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment