diff options
author | robertshield@google.com <robertshield@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-20 19:07:32 +0000 |
---|---|---|
committer | robertshield@google.com <robertshield@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-20 19:07:32 +0000 |
commit | c98911a3fe397932e43700219ba22fa725745cac (patch) | |
tree | f5a64579b53aa653dd0b60361b46de62419bc2ba /chrome | |
parent | 86e6ee66939784971858201236b02f353ab76f2d (diff) | |
download | chromium_src-c98911a3fe397932e43700219ba22fa725745cac.zip chromium_src-c98911a3fe397932e43700219ba22fa725745cac.tar.gz chromium_src-c98911a3fe397932e43700219ba22fa725745cac.tar.bz2 |
Add brand code submission to Google Chrome uninstall metrics.
Review URL: http://codereview.chromium.org/78005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14045 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/installer/setup/uninstall.cc | 8 | ||||
-rw-r--r-- | chrome/installer/util/browser_distribution.cc | 8 | ||||
-rw-r--r-- | chrome/installer/util/browser_distribution.h | 7 | ||||
-rw-r--r-- | chrome/installer/util/google_chrome_distribution.cc | 28 | ||||
-rw-r--r-- | chrome/installer/util/google_chrome_distribution.h | 17 |
5 files changed, 63 insertions, 5 deletions
diff --git a/chrome/installer/setup/uninstall.cc b/chrome/installer/setup/uninstall.cc index b1414aa..d0dc8de 100644 --- a/chrome/installer/setup/uninstall.cc +++ b/chrome/installer/setup/uninstall.cc @@ -249,6 +249,11 @@ installer_util::InstallStatus installer_setup::UninstallChrome( HKEY reg_root = system_uninstall ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; RegKey key(reg_root, L"", KEY_ALL_ACCESS); BrowserDistribution* dist = BrowserDistribution::GetDistribution(); + + // Note that we must retrieve the distribution-specific data before deleting + // dist->GetVersionKey(). + std::wstring distribution_data(dist->GetDistributionData(&key)); + DeleteRegistryKey(key, dist->GetUninstallRegPath()); DeleteRegistryKey(key, dist->GetVersionKey()); @@ -345,7 +350,8 @@ installer_util::InstallStatus installer_setup::UninstallChrome( if (!force_uninstall) { LOG(INFO) << "Uninstallation complete. Launching Uninstall survey."; - dist->DoPostUninstallOperations(installed_version, local_state_path); + dist->DoPostUninstallOperations(installed_version, local_state_path, + distribution_data); } // Try and delete the preserved local state once the post-install diff --git a/chrome/installer/util/browser_distribution.cc b/chrome/installer/util/browser_distribution.cc index fa7faae..8cf587f 100644 --- a/chrome/installer/util/browser_distribution.cc +++ b/chrome/installer/util/browser_distribution.cc @@ -7,6 +7,7 @@ // specific branding, we will need to extend this class with a custom // implementation. +#include "base/registry.h" #include "chrome/installer/util/browser_distribution.h" #include "chrome/installer/util/google_chrome_distribution.h" @@ -23,7 +24,8 @@ BrowserDistribution* BrowserDistribution::GetDistribution() { } void BrowserDistribution::DoPostUninstallOperations( - const installer::Version& version, const std::wstring& local_data_path) { + const installer::Version& version, const std::wstring& local_data_path, + const std::wstring& distribution_data) { } std::wstring BrowserDistribution::GetApplicationName() { @@ -55,6 +57,10 @@ std::wstring BrowserDistribution::GetStateKey() { return L"Software\\Chromium"; } +std::wstring BrowserDistribution::GetDistributionData(RegKey* key) { + return L""; +} + std::wstring BrowserDistribution::GetUninstallLinkName() { return L"Uninstall Chromium"; } diff --git a/chrome/installer/util/browser_distribution.h b/chrome/installer/util/browser_distribution.h index 3746517..1ac8ada 100644 --- a/chrome/installer/util/browser_distribution.h +++ b/chrome/installer/util/browser_distribution.h @@ -11,6 +11,8 @@ #include "chrome/installer/util/util_constants.h" #include "chrome/installer/util/version.h" +class RegKey; + class BrowserDistribution { public: virtual ~BrowserDistribution() {} @@ -18,7 +20,8 @@ class BrowserDistribution { static BrowserDistribution* GetDistribution(); virtual void DoPostUninstallOperations(const installer::Version& version, - const std::wstring& local_data_path); + const std::wstring& local_data_path, + const std::wstring& distribution_data); virtual std::wstring GetApplicationName(); @@ -35,6 +38,8 @@ class BrowserDistribution { virtual std::wstring GetStateKey(); + virtual std::wstring GetDistributionData(RegKey* key); + virtual std::wstring GetUninstallLinkName(); virtual std::wstring GetUninstallRegPath(); diff --git a/chrome/installer/util/google_chrome_distribution.cc b/chrome/installer/util/google_chrome_distribution.cc index 278a6e7..4cc7858 100644 --- a/chrome/installer/util/google_chrome_distribution.cc +++ b/chrome/installer/util/google_chrome_distribution.cc @@ -107,7 +107,8 @@ bool GoogleChromeDistribution::ExtractUninstallMetrics( } void GoogleChromeDistribution::DoPostUninstallOperations( - const installer::Version& version, const std::wstring& local_data_path) { + const installer::Version& version, const std::wstring& local_data_path, + const std::wstring& distribution_data) { // Send the Chrome version and OS version as params to the form. // It would be nice to send the locale, too, but I don't see an // easy way to get that in the existing code. It's something we @@ -139,7 +140,13 @@ void GoogleChromeDistribution::DoPostUninstallOperations( std::wstring uninstall_metrics; if (ExtractUninstallMetricsFromFile(local_data_path, &uninstall_metrics)) { + // The user has opted into anonymous usage data collection, so append + // metrics and distribution data. command += uninstall_metrics; + if (!distribution_data.empty()) { + command += L"&"; + command += distribution_data; + } } int pid = 0; @@ -220,6 +227,25 @@ std::wstring GoogleChromeDistribution::GetStateKey() { return key; } +std::wstring GoogleChromeDistribution::GetDistributionData(RegKey* key) { + DCHECK(NULL != key); + std::wstring sub_key(google_update::kRegPathClientState); + sub_key.append(L"\\"); + sub_key.append(google_update::kChromeGuid); + + RegKey client_state_key(key->Handle(), sub_key.c_str()); + std::wstring result; + std::wstring brand_value; + if (client_state_key.ReadValue(google_update::kRegRLZBrandField, + &brand_value)) { + result = google_update::kRegRLZBrandField; + result.append(L"="); + result.append(brand_value); + } + + return result; +} + std::wstring GoogleChromeDistribution::GetUninstallLinkName() { const std::wstring& link_name = installer_util::GetLocalizedString(IDS_UNINSTALL_CHROME_BASE); diff --git a/chrome/installer/util/google_chrome_distribution.h b/chrome/installer/util/google_chrome_distribution.h index b2f67c6..24b6930 100644 --- a/chrome/installer/util/google_chrome_distribution.h +++ b/chrome/installer/util/google_chrome_distribution.h @@ -17,8 +17,18 @@ class DictionaryValue; class GoogleChromeDistribution : public BrowserDistribution { public: + // Opens the Google Chrome uninstall survey window. + // version refers to the version of Chrome being uninstalled. + // local_data_path is the path of the file containing json metrics that + // will be parsed. If this file indicates that the user has opted in to + // providing anonymous usage data, then some additional statistics will + // be added to the survey url. + // distribution_data contains Google Update related data that will be + // concatenated to the survey url if the file in local_data_path indicates + // the user has opted in to providing anonymous usage data. virtual void DoPostUninstallOperations(const installer::Version& version, - const std::wstring& local_data_path); + const std::wstring& local_data_path, + const std::wstring& distribution_data); virtual std::wstring GetApplicationName(); @@ -50,6 +60,11 @@ class GoogleChromeDistribution : public BrowserDistribution { virtual std::wstring GetStateKey(); + // This method reads data from the Google Update ClientState key for + // potential use in the uninstall survey. It must be called before the + // key returned by GetVersionKey() is deleted. + virtual std::wstring GetDistributionData(RegKey* key); + virtual std::wstring GetUninstallLinkName(); virtual std::wstring GetUninstallRegPath(); |