summaryrefslogtreecommitdiffstats
path: root/chrome/installer
diff options
context:
space:
mode:
authorhuangs@chromium.org <huangs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-28 19:40:41 +0000
committerhuangs@chromium.org <huangs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-28 19:40:41 +0000
commitf8df93d24227358ad16c96c013b71cd5f0e7d62d (patch)
tree9abc8cdc8f26fd3e71311f67d83bd3c533a3f723 /chrome/installer
parent3815ddd65b5efcd8c9522e740990b2bc10cfb307 (diff)
downloadchromium_src-f8df93d24227358ad16c96c013b71cd5f0e7d62d.zip
chromium_src-f8df93d24227358ad16c96c013b71cd5f0e7d62d.tar.gz
chromium_src-f8df93d24227358ad16c96c013b71cd5f0e7d62d.tar.bz2
Refactor: Extracting base interface from BrowserDistribution to simplify Google Update registry writes.
The following member functions of BrowserDistribution: - GetAppGuid(), - GetStateKey(), - GetStateMediumKey(), - GetVersionKey(), are extracted to a new interface AppRegistrationData, which is then made a member of BrowserDistribution. To prevent massive changes existing code, the extracted routines are kept in BrowserDistribution as adaptors to the AppRegistrationData within. Next, calls related to setting the "did-run" flags are refactored to take AppRegistrationData instead of BrowserDistribution. This is to help us remove ChromeAppHostDistribution, since now we just have to implement AppRegistrationData. Also, changes in google_update_settings: - UpdateDidRunStateForDistribution() => UpdateDidRunStateForApp(). - Added UpdateDidRunStateForBinaries(). - Logic changes regarding multi_install, affecting App Launcher caller. BUG=297647 Review URL: https://codereview.chromium.org/252893005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@273321 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/installer')
-rw-r--r--chrome/installer/util/app_registration_data.h21
-rw-r--r--chrome/installer/util/browser_distribution.cc49
-rw-r--r--chrome/installer/util/browser_distribution.h24
-rw-r--r--chrome/installer/util/chrome_app_host_distribution.cc30
-rw-r--r--chrome/installer/util/chrome_app_host_distribution.h8
-rw-r--r--chrome/installer/util/chrome_frame_distribution.cc29
-rw-r--r--chrome/installer/util/chrome_frame_distribution.h8
-rw-r--r--chrome/installer/util/chromium_binaries_distribution.cc25
-rw-r--r--chrome/installer/util/chromium_binaries_distribution.h12
-rw-r--r--chrome/installer/util/google_chrome_binaries_distribution.cc27
-rw-r--r--chrome/installer/util/google_chrome_binaries_distribution.h8
-rw-r--r--chrome/installer/util/google_chrome_distribution.cc43
-rw-r--r--chrome/installer/util/google_chrome_distribution.h20
-rw-r--r--chrome/installer/util/google_chrome_distribution_dummy.cc27
-rw-r--r--chrome/installer/util/google_chrome_sxs_distribution.cc6
-rw-r--r--chrome/installer/util/google_update_settings.cc82
-rw-r--r--chrome/installer/util/google_update_settings.h18
-rw-r--r--chrome/installer/util/non_updating_app_registration_data.cc26
-rw-r--r--chrome/installer/util/non_updating_app_registration_data.h29
-rw-r--r--chrome/installer/util/updating_app_registration_data.cc34
-rw-r--r--chrome/installer/util/updating_app_registration_data.h29
21 files changed, 290 insertions, 265 deletions
diff --git a/chrome/installer/util/app_registration_data.h b/chrome/installer/util/app_registration_data.h
new file mode 100644
index 0000000..f438a39
--- /dev/null
+++ b/chrome/installer/util/app_registration_data.h
@@ -0,0 +1,21 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_INSTALLER_UTIL_APP_REGISTRATION_DATA_H_
+#define CHROME_INSTALLER_UTIL_APP_REGISTRATION_DATA_H_
+
+#include "base/strings/string16.h"
+
+// An interface to retrieve product-specific key paths to communicate with
+// Google Update via registry.
+class AppRegistrationData {
+ public:
+ virtual ~AppRegistrationData() {}
+ virtual base::string16 GetAppGuid() const = 0;
+ virtual base::string16 GetStateKey() const = 0;
+ virtual base::string16 GetStateMediumKey() const = 0;
+ virtual base::string16 GetVersionKey() const = 0;
+};
+
+#endif // CHROME_INSTALLER_UTIL_APP_REGISTRATION_DATA_H_
diff --git a/chrome/installer/util/browser_distribution.cc b/chrome/installer/util/browser_distribution.cc
index f8243bf..7960ad2 100644
--- a/chrome/installer/util/browser_distribution.cc
+++ b/chrome/installer/util/browser_distribution.cc
@@ -18,6 +18,7 @@
#include "base/win/windows_version.h"
#include "chrome/common/chrome_icon_resources_win.h"
#include "chrome/common/env_vars.h"
+#include "chrome/installer/util/app_registration_data.h"
#include "chrome/installer/util/chrome_app_host_distribution.h"
#include "chrome/installer/util/chrome_frame_distribution.h"
#include "chrome/installer/util/chromium_binaries_distribution.h"
@@ -27,6 +28,7 @@
#include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/l10n_string_util.h"
#include "chrome/installer/util/master_preferences.h"
+#include "chrome/installer/util/non_updating_app_registration_data.h"
#include "installer_util_strings.h" // NOLINT
@@ -55,13 +57,18 @@ BrowserDistribution::Type GetCurrentDistributionType() {
} // end namespace
BrowserDistribution::BrowserDistribution()
- : type_(CHROME_BROWSER) {
+ : type_(CHROME_BROWSER),
+ app_reg_data_(make_scoped_ptr(
+ new NonUpdatingAppRegistrationData(L"Software\\Chromium"))) {
}
-BrowserDistribution::BrowserDistribution(Type type)
- : type_(type) {
+BrowserDistribution::BrowserDistribution(
+ Type type, scoped_ptr<AppRegistrationData> app_reg_data)
+ : type_(type), app_reg_data_(app_reg_data.Pass()) {
}
+BrowserDistribution::~BrowserDistribution() {}
+
template<class DistributionClass>
BrowserDistribution* BrowserDistribution::GetOrCreateBrowserDistribution(
BrowserDistribution** dist) {
@@ -125,6 +132,26 @@ BrowserDistribution* BrowserDistribution::GetSpecificDistribution(
return dist;
}
+const AppRegistrationData& BrowserDistribution::GetAppRegistrationData() const {
+ return *app_reg_data_;
+}
+
+base::string16 BrowserDistribution::GetAppGuid() const {
+ return app_reg_data_->GetAppGuid();
+}
+
+base::string16 BrowserDistribution::GetStateKey() const {
+ return app_reg_data_->GetStateKey();
+}
+
+base::string16 BrowserDistribution::GetStateMediumKey() const {
+ return app_reg_data_->GetStateMediumKey();
+}
+
+base::string16 BrowserDistribution::GetVersionKey() const {
+ return app_reg_data_->GetVersionKey();
+}
+
void BrowserDistribution::DoPostUninstallOperations(
const Version& version, const base::FilePath& local_data_path,
const base::string16& distribution_data) {
@@ -134,10 +161,6 @@ base::string16 BrowserDistribution::GetActiveSetupGuid() {
return kChromiumActiveSetupGuid;
}
-base::string16 BrowserDistribution::GetAppGuid() {
- return L"";
-}
-
base::string16 BrowserDistribution::GetBaseAppName() {
return L"Chromium";
}
@@ -224,14 +247,6 @@ std::string BrowserDistribution::GetSafeBrowsingName() {
return "chromium";
}
-base::string16 BrowserDistribution::GetStateKey() {
- return L"Software\\Chromium";
-}
-
-base::string16 BrowserDistribution::GetStateMediumKey() {
- return L"Software\\Chromium";
-}
-
std::string BrowserDistribution::GetNetworkStatsServer() const {
return "";
}
@@ -248,10 +263,6 @@ base::string16 BrowserDistribution::GetUninstallRegPath() {
return L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Chromium";
}
-base::string16 BrowserDistribution::GetVersionKey() {
- return L"Software\\Chromium";
-}
-
BrowserDistribution::DefaultBrowserControlPolicy
BrowserDistribution::GetDefaultBrowserControlPolicy() {
return DEFAULT_BROWSER_FULL_CONTROL;
diff --git a/chrome/installer/util/browser_distribution.h b/chrome/installer/util/browser_distribution.h
index 60d7bc0..7f41d15 100644
--- a/chrome/installer/util/browser_distribution.h
+++ b/chrome/installer/util/browser_distribution.h
@@ -11,6 +11,7 @@
#include "base/basictypes.h"
#include "base/files/file_path.h"
+#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
#include "base/version.h"
#include "chrome/installer/util/util_constants.h"
@@ -19,6 +20,8 @@
#include <windows.h> // NOLINT
#endif
+class AppRegistrationData;
+
class BrowserDistribution {
public:
enum Type {
@@ -46,7 +49,7 @@ class BrowserDistribution {
DEFAULT_BROWSER_FULL_CONTROL
};
- virtual ~BrowserDistribution() {}
+ virtual ~BrowserDistribution();
static BrowserDistribution* GetDistribution();
@@ -54,6 +57,13 @@ class BrowserDistribution {
Type GetType() const { return type_; }
+ // Getter and adaptors for the underlying |app_reg_data_|.
+ const AppRegistrationData& GetAppRegistrationData() const;
+ base::string16 GetAppGuid() const;
+ base::string16 GetStateKey() const;
+ base::string16 GetStateMediumKey() const;
+ base::string16 GetVersionKey() const;
+
virtual void DoPostUninstallOperations(
const Version& version,
const base::FilePath& local_data_path,
@@ -62,8 +72,6 @@ class BrowserDistribution {
// Returns the GUID to be used when registering for Active Setup.
virtual base::string16 GetActiveSetupGuid();
- virtual base::string16 GetAppGuid();
-
// Returns the unsuffixed application name of this program.
// This is the base of the name registered with Default Programs on Windows.
// IMPORTANT: This should only be called by the installer which needs to make
@@ -119,10 +127,6 @@ class BrowserDistribution {
virtual std::string GetSafeBrowsingName();
- virtual base::string16 GetStateKey();
-
- virtual base::string16 GetStateMediumKey();
-
virtual std::string GetNetworkStatsServer() const;
#if defined(OS_WIN)
@@ -133,8 +137,6 @@ class BrowserDistribution {
virtual base::string16 GetUninstallRegPath();
- virtual base::string16 GetVersionKey();
-
// Returns an enum specifying the different ways in which this distribution
// is allowed to be set as default.
virtual DefaultBrowserControlPolicy GetDefaultBrowserControlPolicy();
@@ -162,7 +164,7 @@ class BrowserDistribution {
virtual bool HasUserExperiments();
protected:
- explicit BrowserDistribution(Type type);
+ BrowserDistribution(Type type, scoped_ptr<AppRegistrationData> app_reg_data);
template<class DistributionClass>
static BrowserDistribution* GetOrCreateBrowserDistribution(
@@ -170,6 +172,8 @@ class BrowserDistribution {
const Type type_;
+ scoped_ptr<AppRegistrationData> app_reg_data_;
+
private:
BrowserDistribution();
diff --git a/chrome/installer/util/chrome_app_host_distribution.cc b/chrome/installer/util/chrome_app_host_distribution.cc
index f99fc1d..d69d84d 100644
--- a/chrome/installer/util/chrome_app_host_distribution.cc
+++ b/chrome/installer/util/chrome_app_host_distribution.cc
@@ -17,6 +17,7 @@
#include "chrome/installer/util/helper.h"
#include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/l10n_string_util.h"
+#include "chrome/installer/util/updating_app_registration_data.h"
#include "installer_util_strings.h" // NOLINT
@@ -27,11 +28,9 @@ const wchar_t kChromeAppHostGuid[] = L"{FDA71E6F-AC4C-4a00-8B70-9958A68906BF}";
} // namespace
ChromeAppHostDistribution::ChromeAppHostDistribution()
- : BrowserDistribution(CHROME_APP_HOST) {
-}
-
-base::string16 ChromeAppHostDistribution::GetAppGuid() {
- return kChromeAppHostGuid;
+ : BrowserDistribution(CHROME_APP_HOST,
+ make_scoped_ptr(
+ new UpdatingAppRegistrationData(kChromeAppHostGuid))) {
}
base::string16 ChromeAppHostDistribution::GetBaseAppName() {
@@ -90,20 +89,6 @@ std::string ChromeAppHostDistribution::GetSafeBrowsingName() {
return "googlechromeapphost";
}
-base::string16 ChromeAppHostDistribution::GetStateKey() {
- base::string16 key(google_update::kRegPathClientState);
- key.append(L"\\");
- key.append(kChromeAppHostGuid);
- return key;
-}
-
-base::string16 ChromeAppHostDistribution::GetStateMediumKey() {
- base::string16 key(google_update::kRegPathClientStateMedium);
- key.append(L"\\");
- key.append(kChromeAppHostGuid);
- return key;
-}
-
std::string ChromeAppHostDistribution::GetNetworkStatsServer() const {
return chrome_common_net::kEchoTestServerLocation;
}
@@ -119,13 +104,6 @@ base::string16 ChromeAppHostDistribution::GetUninstallRegPath() {
L"Google Chrome App Launcher";
}
-base::string16 ChromeAppHostDistribution::GetVersionKey() {
- base::string16 key(google_update::kRegPathClients);
- key.append(L"\\");
- key.append(kChromeAppHostGuid);
- return key;
-}
-
BrowserDistribution::DefaultBrowserControlPolicy
ChromeAppHostDistribution::GetDefaultBrowserControlPolicy() {
return DEFAULT_BROWSER_UNSUPPORTED;
diff --git a/chrome/installer/util/chrome_app_host_distribution.h b/chrome/installer/util/chrome_app_host_distribution.h
index a76b248..6efa0c8 100644
--- a/chrome/installer/util/chrome_app_host_distribution.h
+++ b/chrome/installer/util/chrome_app_host_distribution.h
@@ -13,8 +13,6 @@
class ChromeAppHostDistribution : public BrowserDistribution {
public:
- virtual base::string16 GetAppGuid() OVERRIDE;
-
virtual base::string16 GetDisplayName() OVERRIDE;
virtual base::string16 GetBrowserProgIdPrefix() OVERRIDE;
@@ -40,18 +38,12 @@ class ChromeAppHostDistribution : public BrowserDistribution {
virtual std::string GetSafeBrowsingName() OVERRIDE;
- virtual base::string16 GetStateKey() OVERRIDE;
-
- virtual base::string16 GetStateMediumKey() OVERRIDE;
-
virtual std::string GetNetworkStatsServer() const OVERRIDE;
virtual base::string16 GetUninstallLinkName() OVERRIDE;
virtual base::string16 GetUninstallRegPath() OVERRIDE;
- virtual base::string16 GetVersionKey() OVERRIDE;
-
virtual DefaultBrowserControlPolicy GetDefaultBrowserControlPolicy() OVERRIDE;
virtual bool CanCreateDesktopShortcuts() OVERRIDE;
diff --git a/chrome/installer/util/chrome_frame_distribution.cc b/chrome/installer/util/chrome_frame_distribution.cc
index 2f2f959..385ba2f 100644
--- a/chrome/installer/util/chrome_frame_distribution.cc
+++ b/chrome/installer/util/chrome_frame_distribution.cc
@@ -17,6 +17,7 @@
#include "chrome/installer/util/helper.h"
#include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/l10n_string_util.h"
+#include "chrome/installer/util/updating_app_registration_data.h"
#include "installer_util_strings.h" // NOLINT
@@ -25,11 +26,8 @@ const wchar_t kChromeFrameGuid[] = L"{8BA986DA-5100-405E-AA35-86F34A02ACBF}";
}
ChromeFrameDistribution::ChromeFrameDistribution()
- : BrowserDistribution(CHROME_FRAME) {
-}
-
-base::string16 ChromeFrameDistribution::GetAppGuid() {
- return kChromeFrameGuid;
+ : BrowserDistribution(CHROME_FRAME,
+ make_scoped_ptr(new UpdatingAppRegistrationData(kChromeFrameGuid))) {
}
base::string16 ChromeFrameDistribution::GetBaseAppName() {
@@ -82,20 +80,6 @@ std::string ChromeFrameDistribution::GetSafeBrowsingName() {
return "googlechromeframe";
}
-base::string16 ChromeFrameDistribution::GetStateKey() {
- base::string16 key(google_update::kRegPathClientState);
- key.append(L"\\");
- key.append(kChromeFrameGuid);
- return key;
-}
-
-base::string16 ChromeFrameDistribution::GetStateMediumKey() {
- base::string16 key(google_update::kRegPathClientStateMedium);
- key.append(L"\\");
- key.append(kChromeFrameGuid);
- return key;
-}
-
std::string ChromeFrameDistribution::GetNetworkStatsServer() const {
return chrome_common_net::kEchoTestServerLocation;
}
@@ -109,13 +93,6 @@ base::string16 ChromeFrameDistribution::GetUninstallRegPath() {
L"Google Chrome Frame";
}
-base::string16 ChromeFrameDistribution::GetVersionKey() {
- base::string16 key(google_update::kRegPathClients);
- key.append(L"\\");
- key.append(kChromeFrameGuid);
- return key;
-}
-
base::string16 ChromeFrameDistribution::GetIconFilename() {
return installer::kChromeExe;
}
diff --git a/chrome/installer/util/chrome_frame_distribution.h b/chrome/installer/util/chrome_frame_distribution.h
index af2824e..46b8475 100644
--- a/chrome/installer/util/chrome_frame_distribution.h
+++ b/chrome/installer/util/chrome_frame_distribution.h
@@ -13,8 +13,6 @@
class ChromeFrameDistribution : public BrowserDistribution {
public:
- virtual base::string16 GetAppGuid() OVERRIDE;
-
virtual base::string16 GetBrowserProgIdPrefix() OVERRIDE;
virtual base::string16 GetBrowserProgIdDesc() OVERRIDE;
@@ -37,18 +35,12 @@ class ChromeFrameDistribution : public BrowserDistribution {
virtual std::string GetSafeBrowsingName() OVERRIDE;
- virtual base::string16 GetStateKey() OVERRIDE;
-
- virtual base::string16 GetStateMediumKey() OVERRIDE;
-
virtual std::string GetNetworkStatsServer() const OVERRIDE;
virtual base::string16 GetUninstallLinkName() OVERRIDE;
virtual base::string16 GetUninstallRegPath() OVERRIDE;
- virtual base::string16 GetVersionKey() OVERRIDE;
-
virtual base::string16 GetIconFilename() OVERRIDE;
virtual DefaultBrowserControlPolicy GetDefaultBrowserControlPolicy() OVERRIDE;
diff --git a/chrome/installer/util/chromium_binaries_distribution.cc b/chrome/installer/util/chromium_binaries_distribution.cc
index ab8d244..2783c51 100644
--- a/chrome/installer/util/chromium_binaries_distribution.cc
+++ b/chrome/installer/util/chromium_binaries_distribution.cc
@@ -7,6 +7,8 @@
#include "chrome/installer/util/google_chrome_binaries_distribution.h"
#include "base/logging.h"
+#include "chrome/installer/util/app_registration_data.h"
+#include "chrome/installer/util/non_updating_app_registration_data.h"
namespace {
@@ -15,13 +17,18 @@ const wchar_t kChromiumBinariesName[] = L"Chromium Binaries";
} // namespace
ChromiumBinariesDistribution::ChromiumBinariesDistribution()
- : BrowserDistribution(CHROME_BINARIES),
+ : BrowserDistribution(CHROME_BINARIES,
+ make_scoped_ptr(new NonUpdatingAppRegistrationData(
+ base::string16(L"Software\\").append(kChromiumBinariesName)))),
browser_distribution_(
BrowserDistribution::GetSpecificDistribution(CHROME_BROWSER)) {
}
-base::string16 ChromiumBinariesDistribution::GetAppGuid() {
- return base::string16();
+ChromiumBinariesDistribution::ChromiumBinariesDistribution(
+ scoped_ptr<AppRegistrationData> app_reg_data)
+ : BrowserDistribution(CHROME_BINARIES, app_reg_data.Pass()),
+ browser_distribution_(
+ BrowserDistribution::GetSpecificDistribution(CHROME_BROWSER)) {
}
base::string16 ChromiumBinariesDistribution::GetBaseAppName() {
@@ -78,14 +85,6 @@ std::string ChromiumBinariesDistribution::GetSafeBrowsingName() {
return std::string();
}
-base::string16 ChromiumBinariesDistribution::GetStateKey() {
- return base::string16(L"Software\\").append(kChromiumBinariesName);
-}
-
-base::string16 ChromiumBinariesDistribution::GetStateMediumKey() {
- return base::string16(L"Software\\").append(kChromiumBinariesName);
-}
-
base::string16 ChromiumBinariesDistribution::GetUninstallLinkName() {
NOTREACHED();
return base::string16();
@@ -96,10 +95,6 @@ base::string16 ChromiumBinariesDistribution::GetUninstallRegPath() {
return base::string16();
}
-base::string16 ChromiumBinariesDistribution::GetVersionKey() {
- return base::string16(L"Software\\").append(kChromiumBinariesName);
-}
-
BrowserDistribution::DefaultBrowserControlPolicy
ChromiumBinariesDistribution::GetDefaultBrowserControlPolicy() {
return DEFAULT_BROWSER_UNSUPPORTED;
diff --git a/chrome/installer/util/chromium_binaries_distribution.h b/chrome/installer/util/chromium_binaries_distribution.h
index 5f19cb6..3108982 100644
--- a/chrome/installer/util/chromium_binaries_distribution.h
+++ b/chrome/installer/util/chromium_binaries_distribution.h
@@ -9,12 +9,11 @@
#include <string>
+#include "base/memory/scoped_ptr.h"
#include "chrome/installer/util/browser_distribution.h"
class ChromiumBinariesDistribution : public BrowserDistribution {
public:
- virtual base::string16 GetAppGuid() OVERRIDE;
-
virtual base::string16 GetBrowserProgIdPrefix() OVERRIDE;
virtual base::string16 GetBrowserProgIdDesc() OVERRIDE;
@@ -39,16 +38,10 @@ class ChromiumBinariesDistribution : public BrowserDistribution {
virtual std::string GetSafeBrowsingName() OVERRIDE;
- virtual base::string16 GetStateKey() OVERRIDE;
-
- virtual base::string16 GetStateMediumKey() OVERRIDE;
-
virtual base::string16 GetUninstallLinkName() OVERRIDE;
virtual base::string16 GetUninstallRegPath() OVERRIDE;
- virtual base::string16 GetVersionKey() OVERRIDE;
-
virtual DefaultBrowserControlPolicy GetDefaultBrowserControlPolicy() OVERRIDE;
virtual bool GetChromeChannel(base::string16* channel) OVERRIDE;
@@ -61,6 +54,9 @@ class ChromiumBinariesDistribution : public BrowserDistribution {
ChromiumBinariesDistribution();
+ explicit ChromiumBinariesDistribution(
+ scoped_ptr<AppRegistrationData> app_reg_data);
+
BrowserDistribution* browser_distribution_;
private:
diff --git a/chrome/installer/util/google_chrome_binaries_distribution.cc b/chrome/installer/util/google_chrome_binaries_distribution.cc
index 80cc97f..bdf1bf6 100644
--- a/chrome/installer/util/google_chrome_binaries_distribution.cc
+++ b/chrome/installer/util/google_chrome_binaries_distribution.cc
@@ -9,6 +9,7 @@
#include "chrome/installer/util/google_update_constants.h"
#include "chrome/installer/util/google_update_settings.h"
#include "chrome/installer/util/install_util.h"
+#include "chrome/installer/util/updating_app_registration_data.h"
namespace {
@@ -18,11 +19,9 @@ const wchar_t kChromeBinariesName[] = L"Google Chrome binaries";
} // namespace
GoogleChromeBinariesDistribution::GoogleChromeBinariesDistribution()
- : ChromiumBinariesDistribution() {
-}
-
-base::string16 GoogleChromeBinariesDistribution::GetAppGuid() {
- return kChromeBinariesGuid;
+ : ChromiumBinariesDistribution(
+ make_scoped_ptr(
+ new UpdatingAppRegistrationData(kChromeBinariesGuid))) {
}
base::string16 GoogleChromeBinariesDistribution::GetDisplayName() {
@@ -35,24 +34,6 @@ base::string16 GoogleChromeBinariesDistribution::GetShortcutName(
return base::string16();
}
-base::string16 GoogleChromeBinariesDistribution::GetStateKey() {
- return base::string16(google_update::kRegPathClientState)
- .append(1, L'\\')
- .append(kChromeBinariesGuid);
-}
-
-base::string16 GoogleChromeBinariesDistribution::GetStateMediumKey() {
- return base::string16(google_update::kRegPathClientStateMedium)
- .append(1, L'\\')
- .append(kChromeBinariesGuid);
-}
-
-base::string16 GoogleChromeBinariesDistribution::GetVersionKey() {
- return base::string16(google_update::kRegPathClients)
- .append(1, L'\\')
- .append(kChromeBinariesGuid);
-}
-
void GoogleChromeBinariesDistribution::UpdateInstallStatus(bool system_install,
installer::ArchiveType archive_type,
installer::InstallStatus install_status) {
diff --git a/chrome/installer/util/google_chrome_binaries_distribution.h b/chrome/installer/util/google_chrome_binaries_distribution.h
index d279150..805ba50 100644
--- a/chrome/installer/util/google_chrome_binaries_distribution.h
+++ b/chrome/installer/util/google_chrome_binaries_distribution.h
@@ -11,18 +11,10 @@
class GoogleChromeBinariesDistribution : public ChromiumBinariesDistribution {
public:
- virtual base::string16 GetAppGuid();
-
virtual base::string16 GetDisplayName();
virtual base::string16 GetShortcutName(ShortcutType shortcut_type);
- virtual base::string16 GetStateKey();
-
- virtual base::string16 GetStateMediumKey();
-
- virtual base::string16 GetVersionKey();
-
virtual void UpdateInstallStatus(bool system_install,
installer::ArchiveType archive_type,
installer::InstallStatus install_status);
diff --git a/chrome/installer/util/google_chrome_distribution.cc b/chrome/installer/util/google_chrome_distribution.cc
index 10461a7..3d1522d 100644
--- a/chrome/installer/util/google_chrome_distribution.cc
+++ b/chrome/installer/util/google_chrome_distribution.cc
@@ -19,6 +19,7 @@
#include "base/win/windows_version.h"
#include "chrome/common/chrome_icon_resources_win.h"
#include "chrome/common/net/test_server_locations.h"
+#include "chrome/installer/util/app_registration_data.h"
#include "chrome/installer/util/channel_info.h"
#include "chrome/installer/util/google_update_constants.h"
#include "chrome/installer/util/google_update_settings.h"
@@ -26,6 +27,7 @@
#include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/l10n_string_util.h"
#include "chrome/installer/util/uninstall_metrics.h"
+#include "chrome/installer/util/updating_app_registration_data.h"
#include "chrome/installer/util/util_constants.h"
#include "chrome/installer/util/wmi.h"
#include "content/public/common/result_codes.h"
@@ -60,8 +62,14 @@ base::string16 GetUninstallSurveyUrl() {
} // namespace
GoogleChromeDistribution::GoogleChromeDistribution()
- : BrowserDistribution(CHROME_BROWSER),
- product_guid_(kChromeGuid) {
+ : BrowserDistribution(CHROME_BROWSER,
+ make_scoped_ptr(
+ new UpdatingAppRegistrationData(kChromeGuid))) {
+}
+
+GoogleChromeDistribution::GoogleChromeDistribution(
+ scoped_ptr<AppRegistrationData> app_reg_data)
+ : BrowserDistribution(CHROME_BROWSER, app_reg_data.Pass()) {
}
void GoogleChromeDistribution::DoPostUninstallOperations(
@@ -114,11 +122,7 @@ void GoogleChromeDistribution::DoPostUninstallOperations(
}
base::string16 GoogleChromeDistribution::GetActiveSetupGuid() {
- return product_guid();
-}
-
-base::string16 GoogleChromeDistribution::GetAppGuid() {
- return product_guid();
+ return GetAppGuid();
}
base::string16 GoogleChromeDistribution::GetBaseAppName() {
@@ -188,20 +192,6 @@ std::string GoogleChromeDistribution::GetSafeBrowsingName() {
return "googlechrome";
}
-base::string16 GoogleChromeDistribution::GetStateKey() {
- base::string16 key(google_update::kRegPathClientState);
- key.append(L"\\");
- key.append(product_guid());
- return key;
-}
-
-base::string16 GoogleChromeDistribution::GetStateMediumKey() {
- base::string16 key(google_update::kRegPathClientStateMedium);
- key.append(L"\\");
- key.append(product_guid());
- return key;
-}
-
std::string GoogleChromeDistribution::GetNetworkStatsServer() const {
return chrome_common_net::kEchoTestServerLocation;
}
@@ -209,7 +199,7 @@ std::string GoogleChromeDistribution::GetNetworkStatsServer() const {
base::string16 GoogleChromeDistribution::GetDistributionData(HKEY root_key) {
base::string16 sub_key(google_update::kRegPathClientState);
sub_key.append(L"\\");
- sub_key.append(product_guid());
+ sub_key.append(GetAppGuid());
base::win::RegKey client_state_key(
root_key, sub_key.c_str(), KEY_READ | KEY_WOW64_32KEY);
@@ -254,13 +244,6 @@ base::string16 GoogleChromeDistribution::GetUninstallRegPath() {
L"Google Chrome";
}
-base::string16 GoogleChromeDistribution::GetVersionKey() {
- base::string16 key(google_update::kRegPathClients);
- key.append(L"\\");
- key.append(product_guid());
- return key;
-}
-
base::string16 GoogleChromeDistribution::GetIconFilename() {
return installer::kChromeExe;
}
@@ -289,7 +272,7 @@ void GoogleChromeDistribution::UpdateInstallStatus(bool system_install,
installer::InstallStatus install_status) {
GoogleUpdateSettings::UpdateInstallStatus(system_install,
archive_type, InstallUtil::GetInstallReturnCode(install_status),
- product_guid());
+ GetAppGuid());
}
bool GoogleChromeDistribution::ShouldSetExperimentLabels() {
diff --git a/chrome/installer/util/google_chrome_distribution.h b/chrome/installer/util/google_chrome_distribution.h
index a80f62c..8ed61a4 100644
--- a/chrome/installer/util/google_chrome_distribution.h
+++ b/chrome/installer/util/google_chrome_distribution.h
@@ -16,6 +16,8 @@ namespace base {
class FilePath;
}
+class AppRegistrationData;
+
class GoogleChromeDistribution : public BrowserDistribution {
public:
// Opens the Google Chrome uninstall survey window.
@@ -34,8 +36,6 @@ class GoogleChromeDistribution : public BrowserDistribution {
virtual base::string16 GetActiveSetupGuid() OVERRIDE;
- virtual base::string16 GetAppGuid() OVERRIDE;
-
virtual base::string16 GetShortcutName(ShortcutType shortcut_type) OVERRIDE;
virtual base::string16 GetIconFilename() OVERRIDE;
@@ -58,10 +58,6 @@ class GoogleChromeDistribution : public BrowserDistribution {
virtual std::string GetSafeBrowsingName() OVERRIDE;
- virtual base::string16 GetStateKey() OVERRIDE;
-
- virtual base::string16 GetStateMediumKey() OVERRIDE;
-
virtual std::string GetNetworkStatsServer() const OVERRIDE;
// This method reads data from the Google Update ClientState key for
@@ -73,8 +69,6 @@ class GoogleChromeDistribution : public BrowserDistribution {
virtual base::string16 GetUninstallRegPath() OVERRIDE;
- virtual base::string16 GetVersionKey() OVERRIDE;
-
virtual bool GetCommandExecuteImplClsid(
base::string16* handler_class_uuid) OVERRIDE;
@@ -89,19 +83,15 @@ class GoogleChromeDistribution : public BrowserDistribution {
virtual bool HasUserExperiments() OVERRIDE;
- const base::string16& product_guid() { return product_guid_; }
-
protected:
- void set_product_guid(const base::string16& guid) { product_guid_ = guid; }
-
// Disallow construction from others.
GoogleChromeDistribution();
+ explicit GoogleChromeDistribution(
+ scoped_ptr<AppRegistrationData> app_reg_data);
+
private:
friend class BrowserDistribution;
-
- // The product ID for Google Update.
- base::string16 product_guid_;
};
#endif // CHROME_INSTALLER_UTIL_GOOGLE_CHROME_DISTRIBUTION_H_
diff --git a/chrome/installer/util/google_chrome_distribution_dummy.cc b/chrome/installer/util/google_chrome_distribution_dummy.cc
index cf6d0c9..012b72d 100644
--- a/chrome/installer/util/google_chrome_distribution_dummy.cc
+++ b/chrome/installer/util/google_chrome_distribution_dummy.cc
@@ -15,9 +15,18 @@
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/values.h"
+#include "chrome/installer/util/app_registration_data.h"
+#include "chrome/installer/util/non_updating_app_registration_data.h"
GoogleChromeDistribution::GoogleChromeDistribution()
- : BrowserDistribution(CHROME_BROWSER) {
+ : BrowserDistribution(CHROME_BROWSER,
+ make_scoped_ptr(
+ new NonUpdatingAppRegistrationData(base::string16()))) {
+}
+
+GoogleChromeDistribution::GoogleChromeDistribution(
+ scoped_ptr<AppRegistrationData> app_reg_data)
+ : BrowserDistribution(CHROME_BROWSER, app_reg_data.Pass()) {
}
void GoogleChromeDistribution::DoPostUninstallOperations(
@@ -30,10 +39,6 @@ base::string16 GoogleChromeDistribution::GetActiveSetupGuid() {
return base::string16();
}
-base::string16 GoogleChromeDistribution::GetAppGuid() {
- return base::string16();
-}
-
base::string16 GoogleChromeDistribution::GetBaseAppName() {
return base::string16();
}
@@ -75,14 +80,6 @@ std::string GoogleChromeDistribution::GetSafeBrowsingName() {
return std::string();
}
-base::string16 GoogleChromeDistribution::GetStateKey() {
- return base::string16();
-}
-
-base::string16 GoogleChromeDistribution::GetStateMediumKey() {
- return base::string16();
-}
-
std::string GoogleChromeDistribution::GetNetworkStatsServer() const {
return std::string();
}
@@ -99,10 +96,6 @@ base::string16 GoogleChromeDistribution::GetUninstallRegPath() {
return base::string16();
}
-base::string16 GoogleChromeDistribution::GetVersionKey() {
- return base::string16();
-}
-
base::string16 GoogleChromeDistribution::GetIconFilename() {
return base::string16();
}
diff --git a/chrome/installer/util/google_chrome_sxs_distribution.cc b/chrome/installer/util/google_chrome_sxs_distribution.cc
index 773bf39..5707660 100644
--- a/chrome/installer/util/google_chrome_sxs_distribution.cc
+++ b/chrome/installer/util/google_chrome_sxs_distribution.cc
@@ -9,6 +9,7 @@
#include "base/command_line.h"
#include "base/logging.h"
#include "chrome/common/chrome_icon_resources_win.h"
+#include "chrome/installer/util/updating_app_registration_data.h"
#include "installer_util_strings.h" // NOLINT
@@ -25,8 +26,9 @@ const wchar_t kCommandExecuteImplUuid[] =
} // namespace
GoogleChromeSxSDistribution::GoogleChromeSxSDistribution()
- : GoogleChromeDistribution() {
- GoogleChromeDistribution::set_product_guid(kChromeSxSGuid);
+ : GoogleChromeDistribution(
+ make_scoped_ptr(
+ new UpdatingAppRegistrationData(kChromeSxSGuid))) {
}
base::string16 GoogleChromeSxSDistribution::GetBaseAppName() {
diff --git a/chrome/installer/util/google_update_settings.cc b/chrome/installer/util/google_update_settings.cc
index 1eb46ab..feac280 100644
--- a/chrome/installer/util/google_update_settings.cc
+++ b/chrome/installer/util/google_update_settings.cc
@@ -20,6 +20,7 @@
#include "base/win/registry.h"
#include "base/win/win_util.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/installer/util/app_registration_data.h"
#include "chrome/installer/util/browser_distribution.h"
#include "chrome/installer/util/channel_info.h"
#include "chrome/installer/util/google_update_constants.h"
@@ -64,19 +65,16 @@ bool ReadGoogleUpdateStrKey(const wchar_t* const name, std::wstring* value) {
return true;
}
-// Update a state registry key |name| to be |value| for the given browser
-// |dist|. If this is a |system_install|, then update the value under
-// HKLM (istead of HKCU for user-installs) using a group of keys (one
-// for each OS user) and also include the method to |aggregate| these
-// values when reporting.
-bool WriteGoogleUpdateStrKeyInternal(BrowserDistribution* dist,
+// Updates a registry key |name| to be |value| for the given |app_reg_data|.
+// If this is a |system_install|, then update the value under HKLM (istead of
+// HKCU for user-installs) using a group of keys (one for each OS user) and also
+// include the method to |aggregate| these values when reporting.
+bool WriteGoogleUpdateStrKeyInternal(const AppRegistrationData& app_reg_data,
bool system_install,
const wchar_t* const name,
// presubmit: allow wstring
const std::wstring& value,
const wchar_t* const aggregate) {
- DCHECK(dist);
-
if (system_install) {
DCHECK(aggregate);
// Machine installs require each OS user to write a unique key under a
@@ -88,8 +86,7 @@ bool WriteGoogleUpdateStrKeyInternal(BrowserDistribution* dist,
return false;
}
- // presubmit: allow wstring
- std::wstring reg_path(dist->GetStateMediumKey());
+ base::string16 reg_path(app_reg_data.GetStateMediumKey());
reg_path.append(L"\\");
reg_path.append(name);
RegKey key(HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_SET_VALUE);
@@ -97,7 +94,8 @@ bool WriteGoogleUpdateStrKeyInternal(BrowserDistribution* dist,
return (key.WriteValue(uniquename.c_str(), value.c_str()) == ERROR_SUCCESS);
} else {
// User installs are easy: just write the values to HKCU tree.
- RegKey key(HKEY_CURRENT_USER, dist->GetStateKey().c_str(), KEY_SET_VALUE);
+ RegKey key(HKEY_CURRENT_USER, app_reg_data.GetStateKey().c_str(),
+ KEY_SET_VALUE);
return (key.WriteValue(name, value.c_str()) == ERROR_SUCCESS);
}
}
@@ -105,23 +103,8 @@ bool WriteGoogleUpdateStrKeyInternal(BrowserDistribution* dist,
bool WriteGoogleUpdateStrKey(const wchar_t* const name,
const std::wstring& value) {
BrowserDistribution* dist = BrowserDistribution::GetDistribution();
- return WriteGoogleUpdateStrKeyInternal(dist, false, name, value, NULL);
-}
-
-bool WriteGoogleUpdateStrKeyMultiInstall(BrowserDistribution* dist,
- const wchar_t* const name,
- const std::wstring& value,
- bool system_level) {
- bool result = WriteGoogleUpdateStrKeyInternal(dist, false, name, value, NULL);
- if (!InstallUtil::IsMultiInstall(dist, system_level))
- return result;
- // It is a multi-install distro. Must write the reg value again.
- BrowserDistribution* multi_dist =
- BrowserDistribution::GetSpecificDistribution(
- BrowserDistribution::CHROME_BINARIES);
- return
- WriteGoogleUpdateStrKeyInternal(multi_dist, false, name, value, NULL) &&
- result;
+ return WriteGoogleUpdateStrKeyInternal(
+ dist->GetAppRegistrationData(), false, name, value, NULL);
}
bool ClearGoogleUpdateStrKey(const wchar_t* const name) {
@@ -199,6 +182,15 @@ bool GetUpdatePolicyFromDword(
return false;
}
+// Convenience routine: GoogleUpdateSettings::UpdateDidRunStateForApp()
+// specialized for Chrome Binaries.
+bool UpdateDidRunStateForBinaries(bool did_run) {
+ BrowserDistribution* dist = BrowserDistribution::GetSpecificDistribution(
+ BrowserDistribution::CHROME_BINARIES);
+ return GoogleUpdateSettings::UpdateDidRunStateForApp(
+ dist->GetAppRegistrationData(), did_run);
+}
+
} // namespace
bool GoogleUpdateSettings::IsSystemInstall() {
@@ -398,20 +390,24 @@ bool GoogleUpdateSettings::ClearReferral() {
return ClearGoogleUpdateStrKey(google_update::kRegReferralField);
}
-bool GoogleUpdateSettings::UpdateDidRunState(bool did_run,
- bool system_level) {
- BrowserDistribution* dist = BrowserDistribution::GetDistribution();
- return UpdateDidRunStateForDistribution(dist, did_run, system_level);
+bool GoogleUpdateSettings::UpdateDidRunStateForApp(
+ const AppRegistrationData& app_reg_data,
+ bool did_run) {
+ return WriteGoogleUpdateStrKeyInternal(app_reg_data,
+ false, // user level.
+ google_update::kRegDidRunField,
+ did_run ? L"1" : L"0",
+ NULL);
}
-bool GoogleUpdateSettings::UpdateDidRunStateForDistribution(
- BrowserDistribution* dist,
- bool did_run,
- bool system_level) {
- return WriteGoogleUpdateStrKeyMultiInstall(dist,
- google_update::kRegDidRunField,
- did_run ? L"1" : L"0",
- system_level);
+bool GoogleUpdateSettings::UpdateDidRunState(bool did_run, bool system_level) {
+ BrowserDistribution* dist = BrowserDistribution::GetDistribution();
+ bool result = UpdateDidRunStateForApp(dist->GetAppRegistrationData(),
+ did_run);
+ // Update state for binaries, even if the previous call was unsuccessful.
+ if (InstallUtil::IsMultiInstall(dist, system_level))
+ result = UpdateDidRunStateForBinaries(did_run) && result;
+ return result;
}
base::string16 GoogleUpdateSettings::GetChromeChannel(bool system_install) {
@@ -512,11 +508,13 @@ void GoogleUpdateSettings::UpdateProfileCounts(int profiles_active,
int profiles_signedin) {
BrowserDistribution* dist = BrowserDistribution::GetDistribution();
bool system_install = IsSystemInstall();
- WriteGoogleUpdateStrKeyInternal(dist, system_install,
+ WriteGoogleUpdateStrKeyInternal(dist->GetAppRegistrationData(),
+ system_install,
google_update::kRegProfilesActive,
base::Int64ToString16(profiles_active),
L"sum()");
- WriteGoogleUpdateStrKeyInternal(dist, system_install,
+ WriteGoogleUpdateStrKeyInternal(dist->GetAppRegistrationData(),
+ system_install,
google_update::kRegProfilesSignedIn,
base::Int64ToString16(profiles_signedin),
L"sum()");
diff --git a/chrome/installer/util/google_update_settings.h b/chrome/installer/util/google_update_settings.h
index 011538e..c05bf09 100644
--- a/chrome/installer/util/google_update_settings.h
+++ b/chrome/installer/util/google_update_settings.h
@@ -13,6 +13,7 @@
#include "base/version.h"
#include "chrome/installer/util/util_constants.h"
+class AppRegistrationData;
class BrowserDistribution;
namespace installer {
@@ -154,15 +155,16 @@ class GoogleUpdateSettings {
// true if this operation succeeded.
static bool ClearReferral();
- // Set did_run "dr" in the client state value. This is used to measure
- // active users. Returns false if writting to the registry failed.
- static bool UpdateDidRunState(bool did_run, bool system_level);
+ // Set did_run "dr" in the client state value for app specified by
+ // |app_reg_data|. This is used to measure active users. Returns false if
+ // registry write fails.
+ static bool UpdateDidRunStateForApp(const AppRegistrationData& app_reg_data,
+ bool did_run);
- // Set did_run "dr" in the client state value for |dist|. This is used to
- // measure active users. Returns false if writting to the registry failed.
- static bool UpdateDidRunStateForDistribution(BrowserDistribution* dist,
- bool did_run,
- bool system_level);
+ // Convenience routine: UpdateDidRunStateForApp() specialized for the current
+ // BrowserDistribution, and also updates Chrome Binary's did_run if the
+ // current distribution is multi-install.
+ static bool UpdateDidRunState(bool did_run, bool system_level);
// Returns only the channel name: "" (stable), "dev", "beta", "canary", or
// "unknown" if unknown. This value will not be modified by "-m" for a
diff --git a/chrome/installer/util/non_updating_app_registration_data.cc b/chrome/installer/util/non_updating_app_registration_data.cc
new file mode 100644
index 0000000..ba7e629
--- /dev/null
+++ b/chrome/installer/util/non_updating_app_registration_data.cc
@@ -0,0 +1,26 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/installer/util/non_updating_app_registration_data.h"
+
+NonUpdatingAppRegistrationData::NonUpdatingAppRegistrationData(
+ const base::string16& key_path) : key_path_(key_path) {}
+
+NonUpdatingAppRegistrationData::~NonUpdatingAppRegistrationData() {}
+
+base::string16 NonUpdatingAppRegistrationData::GetAppGuid() const {
+ return base::string16();
+}
+
+base::string16 NonUpdatingAppRegistrationData::GetStateKey() const {
+ return key_path_;
+}
+
+base::string16 NonUpdatingAppRegistrationData::GetStateMediumKey() const {
+ return key_path_;
+}
+
+base::string16 NonUpdatingAppRegistrationData::GetVersionKey() const {
+ return key_path_;
+}
diff --git a/chrome/installer/util/non_updating_app_registration_data.h b/chrome/installer/util/non_updating_app_registration_data.h
new file mode 100644
index 0000000..9528169
--- /dev/null
+++ b/chrome/installer/util/non_updating_app_registration_data.h
@@ -0,0 +1,29 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_INSTALLER_UTIL_NON_UPDATING_APP_REGISTRATION_DATA_H_
+#define CHROME_INSTALLER_UTIL_NON_UPDATING_APP_REGISTRATION_DATA_H_
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/strings/string16.h"
+#include "chrome/installer/util/app_registration_data.h"
+
+// Registration data for an app that is not updated by Google Update.
+class NonUpdatingAppRegistrationData : public AppRegistrationData {
+ public:
+ explicit NonUpdatingAppRegistrationData(const base::string16& key_path);
+ virtual ~NonUpdatingAppRegistrationData();
+ virtual base::string16 GetAppGuid() const OVERRIDE;
+ virtual base::string16 GetStateKey() const OVERRIDE;
+ virtual base::string16 GetStateMediumKey() const OVERRIDE;
+ virtual base::string16 GetVersionKey() const OVERRIDE;
+
+ private:
+ const base::string16 key_path_;
+
+ DISALLOW_COPY_AND_ASSIGN(NonUpdatingAppRegistrationData);
+};
+
+#endif // CHROME_INSTALLER_UTIL_NON_UPDATING_APP_REGISTRATION_DATA_H_
diff --git a/chrome/installer/util/updating_app_registration_data.cc b/chrome/installer/util/updating_app_registration_data.cc
new file mode 100644
index 0000000..26315fe
--- /dev/null
+++ b/chrome/installer/util/updating_app_registration_data.cc
@@ -0,0 +1,34 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/installer/util/updating_app_registration_data.h"
+
+#include "chrome/installer/util/google_update_constants.h"
+
+UpdatingAppRegistrationData::UpdatingAppRegistrationData(
+ const base::string16& app_guid) : app_guid_(app_guid) {}
+
+UpdatingAppRegistrationData::~UpdatingAppRegistrationData() {}
+
+base::string16 UpdatingAppRegistrationData::GetAppGuid() const {
+ return app_guid_;
+}
+
+base::string16 UpdatingAppRegistrationData::GetStateKey() const {
+ return base::string16(google_update::kRegPathClientState)
+ .append(1, L'\\')
+ .append(app_guid_);
+}
+
+base::string16 UpdatingAppRegistrationData::GetStateMediumKey() const {
+ return base::string16(google_update::kRegPathClientStateMedium)
+ .append(1, L'\\')
+ .append(app_guid_);
+}
+
+base::string16 UpdatingAppRegistrationData::GetVersionKey() const {
+ return base::string16(google_update::kRegPathClients)
+ .append(1, L'\\')
+ .append(app_guid_);
+}
diff --git a/chrome/installer/util/updating_app_registration_data.h b/chrome/installer/util/updating_app_registration_data.h
new file mode 100644
index 0000000..6e2ffea
--- /dev/null
+++ b/chrome/installer/util/updating_app_registration_data.h
@@ -0,0 +1,29 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_INSTALLER_UTIL_UPDATING_APP_REGISTRATION_DATA_H_
+#define CHROME_INSTALLER_UTIL_UPDATING_APP_REGISTRATION_DATA_H_
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/strings/string16.h"
+#include "chrome/installer/util/app_registration_data.h"
+
+// Registration data for an app that is updated by Google Update.
+class UpdatingAppRegistrationData : public AppRegistrationData {
+ public:
+ explicit UpdatingAppRegistrationData(const base::string16& app_guid);
+ virtual ~UpdatingAppRegistrationData();
+ virtual base::string16 GetAppGuid() const OVERRIDE;
+ virtual base::string16 GetStateKey() const OVERRIDE;
+ virtual base::string16 GetStateMediumKey() const OVERRIDE;
+ virtual base::string16 GetVersionKey() const OVERRIDE;
+
+ private:
+ const base::string16 app_guid_;
+
+ DISALLOW_COPY_AND_ASSIGN(UpdatingAppRegistrationData);
+};
+
+#endif // CHROME_INSTALLER_UTIL_UPDATING_APP_REGISTRATION_DATA_H_