diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/app/client_util.cc | 30 | ||||
-rw-r--r-- | chrome/app/client_util.h | 6 | ||||
-rw-r--r-- | chrome/browser/browser_main.cc | 2 | ||||
-rw-r--r-- | chrome/common/result_codes.h | 5 | ||||
-rw-r--r-- | chrome/installer/util/google_chrome_distribution.cc | 2 |
5 files changed, 36 insertions, 9 deletions
diff --git a/chrome/app/client_util.cc b/chrome/app/client_util.cc index 03391b6..993f468 100644 --- a/chrome/app/client_util.cc +++ b/chrome/app/client_util.cc @@ -88,24 +88,31 @@ HMODULE LoadChromeWithDirectory(std::wstring* dir) { LOAD_WITH_ALTERED_SEARCH_PATH); } -// record did_run "dr" in client state. -bool RecordDidRun(const wchar_t* guid) { +// Set did_run "dr" in omaha's client state for this product. +bool SetDidRunState(const wchar_t* guid, const wchar_t* value) { std::wstring key_path(google_update::kRegPathClientState); key_path.append(L"\\").append(guid); HKEY reg_key; if (::RegCreateKeyExW(HKEY_CURRENT_USER, key_path.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ®_key, NULL) == ERROR_SUCCESS) { - const wchar_t kVal[] = L"1"; ::RegSetValueExW(reg_key, google_update::kRegDidRunField, 0, REG_SZ, - reinterpret_cast<const BYTE *>(kVal), sizeof(kVal)); + reinterpret_cast<const BYTE *>(value), ::lstrlenW(value)); ::RegCloseKey(reg_key); return true; } return false; } + +bool RecordDidRun(const wchar_t* guid) { + return SetDidRunState(guid, L"1"); +} + +bool ClearDidRun(const wchar_t* guid) { + return SetDidRunState(guid, L"0"); } +} //============================================================================= MainDllLoader::MainDllLoader() : dll_(NULL) { @@ -159,7 +166,6 @@ int MainDllLoader::Launch(HINSTANCE instance, version.c_str()); InitCrashReporterWithDllPath(file); - OnBeforeLaunch(version); DLL_MAIN entry_point = @@ -167,7 +173,8 @@ int MainDllLoader::Launch(HINSTANCE instance, if (!entry_point) return ResultCodes::BAD_PROCESS_TYPE; - return entry_point(instance, sbox_info, ::GetCommandLineW()); + int rc = entry_point(instance, sbox_info, ::GetCommandLineW()); + return OnBeforeExit(rc); } //============================================================================= @@ -185,6 +192,17 @@ class ChromeDllLoader : public MainDllLoader { BrowserDistribution* dist = BrowserDistribution::GetDistribution(); RecordDidRun(dist->GetAppGuid().c_str()); } + + virtual int OnBeforeExit(int return_code) { + // NORMAL_EXIT_CANCEL is used for experiments when the user cancels + // so we need to reset the did_run signal so omaha does not count + // this run as active usage. + if (ResultCodes::NORMAL_EXIT_CANCEL == return_code) { + BrowserDistribution* dist = BrowserDistribution::GetDistribution(); + ClearDidRun(dist->GetAppGuid().c_str()); + } + return return_code; + } }; //============================================================================= diff --git a/chrome/app/client_util.h b/chrome/app/client_util.h index c4d74d2..a391be0 100644 --- a/chrome/app/client_util.h +++ b/chrome/app/client_util.h @@ -34,10 +34,14 @@ class MainDllLoader { // most current version of chrome.dll. virtual std::wstring GetRegistryPath() = 0; - // Called after chrome.dll has beem loaded but before the entry point + // Called after chrome.dll has been loaded but before the entry point // is invoked. Derived classes can implement custom actions here. virtual void OnBeforeLaunch(const std::wstring& version) {} + // Called after the chrome.dll entry point returns and before terminating + // this process. The return value will be used as the process return code. + virtual int OnBeforeExit(int return_code) { return return_code; } + protected: HMODULE Load(std::wstring* version, std::wstring* file); diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc index 6ca2b4b..ff1d17d 100644 --- a/chrome/browser/browser_main.cc +++ b/chrome/browser/browser_main.cc @@ -520,7 +520,7 @@ int BrowserMain(const MainFunctionParams& parameters) { Upgrade::TryResult answer = Upgrade::ShowTryChromeDialog(StringToInt(try_chrome)); if (answer == Upgrade::TD_NOT_NOW) - return ResultCodes::NORMAL_EXIT_EXP1; + return ResultCodes::NORMAL_EXIT_CANCEL; if (answer == Upgrade::TD_UNINSTALL_CHROME) return ResultCodes::NORMAL_EXIT_EXP2; } diff --git a/chrome/common/result_codes.h b/chrome/common/result_codes.h index abaf5a7..74b5d05 100644 --- a/chrome/common/result_codes.h +++ b/chrome/common/result_codes.h @@ -49,6 +49,11 @@ class ResultCodes { NORMAL_EXIT_EXP4, // used for experiments and the actual meaning // depends on the experiment. + NORMAL_EXIT_CANCEL, // For experiments this return code means that + // the user canceled causes the did_run "dr" + // signal to be reset so this chrome run does + // not count as active chrome usage. + PROFILE_IN_USE, // The profile was in use on another host. EXIT_LAST_CODE // Last return code (keep it last). diff --git a/chrome/installer/util/google_chrome_distribution.cc b/chrome/installer/util/google_chrome_distribution.cc index 0a361ae..6f00a0e 100644 --- a/chrome/installer/util/google_chrome_distribution.cc +++ b/chrome/installer/util/google_chrome_distribution.cc @@ -500,7 +500,7 @@ void GoogleChromeDistribution::InactiveUserToastExperiment(int flavor) { case ResultCodes::NORMAL_EXIT: outcome = kToastExpTriesOkGroup; break; - case ResultCodes::NORMAL_EXIT_EXP1: + case ResultCodes::NORMAL_EXIT_CANCEL: outcome = kToastExpCancelGroup; break; case ResultCodes::NORMAL_EXIT_EXP2: |