summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorcpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-18 02:35:59 +0000
committercpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-18 02:35:59 +0000
commit0c5051e0e08680e9d53be36775c4b0874b3158d4 (patch)
tree54ae9c152756f65955fcdd176dcc2388d7ef3d5d /chrome/browser
parent0db70f67b5bb0c70c45ed85a983ab9a9188445be (diff)
downloadchromium_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.cc59
-rw-r--r--chrome/browser/component_updater/recovery_component_installer.h4
-rw-r--r--chrome/browser/ui/browser_init.cc2
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);