diff options
author | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-18 02:35:59 +0000 |
---|---|---|
committer | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-18 02:35:59 +0000 |
commit | 0c5051e0e08680e9d53be36775c4b0874b3158d4 (patch) | |
tree | 54ae9c152756f65955fcdd176dcc2388d7ef3d5d /chrome/browser | |
parent | 0db70f67b5bb0c70c45ed85a983ab9a9188445be (diff) | |
download | chromium_src-0c5051e0e08680e9d53be36775c4b0874b3158d4.zip chromium_src-0c5051e0e08680e9d53be36775c4b0874b3158d4.tar.gz chromium_src-0c5051e0e08680e9d53be36775c4b0874b3158d4.tar.bz2 |
Recovery component: Use a version from the prefs instead of the chrome version
The chrome version is sent anyhow as a top level param of the request.
BUG=98735
TEST= see bug
Review URL: http://codereview.chromium.org/8337003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106007 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/component_updater/recovery_component_installer.cc | 59 | ||||
-rw-r--r-- | chrome/browser/component_updater/recovery_component_installer.h | 4 | ||||
-rw-r--r-- | chrome/browser/ui/browser_init.cc | 2 |
3 files changed, 44 insertions, 21 deletions
diff --git a/chrome/browser/component_updater/recovery_component_installer.cc b/chrome/browser/component_updater/recovery_component_installer.cc index 0527d9f..ce3d0a9 100644 --- a/chrome/browser/component_updater/recovery_component_installer.cc +++ b/chrome/browser/component_updater/recovery_component_installer.cc @@ -4,6 +4,7 @@ #include "chrome/browser/component_updater/recovery_component_installer.h" +#include "base/bind.h" #include "base/base_paths.h" #include "base/command_line.h" #include "base/compiler_specific.h" @@ -15,7 +16,9 @@ #include "base/string_util.h" #include "base/values.h" #include "chrome/browser/component_updater/component_updater_service.h" +#include "chrome/browser/prefs/pref_service.h" #include "chrome/common/chrome_version_info.h" +#include "chrome/common/pref_names.h" #include "content/browser/browser_thread.h" namespace { @@ -40,7 +43,8 @@ const char kRecoveryManifestName[] = "ChromeRecovery"; class RecoveryComponentInstaller : public ComponentInstaller { public: - explicit RecoveryComponentInstaller(const Version& version); + explicit RecoveryComponentInstaller(const Version& version, + PrefService* prefs); virtual ~RecoveryComponentInstaller() {} @@ -51,10 +55,36 @@ class RecoveryComponentInstaller : public ComponentInstaller { private: Version current_version_; + PrefService* prefs_; }; +void RecoveryRegisterHelper(ComponentUpdateService* cus, PrefService* prefs) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + prefs->RegisterStringPref(prefs::kRecoveryComponentVersion, "0.0.0.0"); + Version version(prefs->GetString(prefs::kRecoveryComponentVersion)); + if (!version.IsValid()) { + NOTREACHED(); + return; + } + + CrxComponent recovery; + recovery.name = "recovery"; + recovery.installer = new RecoveryComponentInstaller(version, prefs); + recovery.version = version; + recovery.pk_hash.assign(sha2_hash, &sha2_hash[sizeof(sha2_hash)]); + if (cus->RegisterComponent(recovery) != ComponentUpdateService::kOk) { + NOTREACHED() << "Recovery component registration failed."; + } +} + +void RecoveryUpdateVersionHelper(const Version& version, PrefService* prefs) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + prefs->SetString(prefs::kRecoveryComponentVersion, version.GetString()); +} + RecoveryComponentInstaller::RecoveryComponentInstaller( - const Version& version) : current_version_(version) { + const Version& version, PrefService* prefs) + : current_version_(version), prefs_(prefs){ DCHECK(version.IsValid()); } @@ -90,26 +120,19 @@ bool RecoveryComponentInstaller::Install(base::DictionaryValue* manifest, cmdline.AppendSwitchASCII("version", current_version_.GetString()); } current_version_ = version; + if (prefs_) { + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, + base::Bind(&RecoveryUpdateVersionHelper, version, prefs_)); + } return base::LaunchProcess(cmdline, base::LaunchOptions(), NULL); } void RegisterRecoveryComponent(ComponentUpdateService* cus, - const char* chrome_version) { + PrefService* prefs) { #if !defined(OS_CHROMEOS) - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - CrxComponent recovery; - recovery.name = "recovery"; - Version version(chrome_version); - if (!version.IsValid()) { - NOTREACHED() << "Need valid chrome version."; - return; - } - - recovery.installer = new RecoveryComponentInstaller(version); - recovery.version = version; - recovery.pk_hash.assign(sha2_hash, &sha2_hash[sizeof(sha2_hash)]); - if (cus->RegisterComponent(recovery) != ComponentUpdateService::kOk) { - NOTREACHED() << "Recovery component registration failed."; - } + // We delay execute the registration because we are not required in + // the critical path during browser startup. + BrowserThread::PostDelayedTask(BrowserThread::UI, FROM_HERE, + base::Bind(&RecoveryRegisterHelper, cus, prefs), 6000); #endif } diff --git a/chrome/browser/component_updater/recovery_component_installer.h b/chrome/browser/component_updater/recovery_component_installer.h index 6fce2d5..36f06fa 100644 --- a/chrome/browser/component_updater/recovery_component_installer.h +++ b/chrome/browser/component_updater/recovery_component_installer.h @@ -7,12 +7,12 @@ #pragma once class ComponentUpdateService; +class PrefService; // Component update registration for the recovery component. The job of the // recovery component is to repair the chrome installation or repair the Google // update installation. This is a last resort safety mechanism. -void RegisterRecoveryComponent(ComponentUpdateService* cus, - const char* chrome_version); +void RegisterRecoveryComponent(ComponentUpdateService* cus, PrefService* prefs); #endif // CHROME_BROWSER_COMPONENT_UPDATER_RECOVERY_COMPONENT_INSTALLER_H_ diff --git a/chrome/browser/ui/browser_init.cc b/chrome/browser/ui/browser_init.cc index 943137b..4db2cb5 100644 --- a/chrome/browser/ui/browser_init.cc +++ b/chrome/browser/ui/browser_init.cc @@ -534,7 +534,7 @@ void RegisterComponentsForUpdate() { // Registration can be before of after cus->Start() so it is ok to post // a task to the UI thread to do registration once you done the necessary // file IO to know you existing component version. - RegisterRecoveryComponent(cus, chrome::VersionInfo().Version().c_str()); + RegisterRecoveryComponent(cus, g_browser_process->local_state()); RegisterPepperFlashComponent(cus); RegisterNPAPIFlashComponent(cus); |