diff options
author | huangs@chromium.org <huangs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-28 19:40:41 +0000 |
---|---|---|
committer | huangs@chromium.org <huangs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-28 19:40:41 +0000 |
commit | f8df93d24227358ad16c96c013b71cd5f0e7d62d (patch) | |
tree | 9abc8cdc8f26fd3e71311f67d83bd3c533a3f723 /chrome/installer | |
parent | 3815ddd65b5efcd8c9522e740990b2bc10cfb307 (diff) | |
download | chromium_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')
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_ |