summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorrobertshield@google.com <robertshield@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-20 19:07:32 +0000
committerrobertshield@google.com <robertshield@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-20 19:07:32 +0000
commitc98911a3fe397932e43700219ba22fa725745cac (patch)
treef5a64579b53aa653dd0b60361b46de62419bc2ba /chrome
parent86e6ee66939784971858201236b02f353ab76f2d (diff)
downloadchromium_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.cc8
-rw-r--r--chrome/installer/util/browser_distribution.cc8
-rw-r--r--chrome/installer/util/browser_distribution.h7
-rw-r--r--chrome/installer/util/google_chrome_distribution.cc28
-rw-r--r--chrome/installer/util/google_chrome_distribution.h17
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();