Index: chrome/browser/upgrade_detector.cc |
diff --git a/chrome/browser/upgrade_detector.cc b/chrome/browser/upgrade_detector.cc |
index ae92c99692bdc8a42e968921eb47d5815086aaf9..49db0ce83e1b7a0668fc20826d3d92e8ad191e58 100644 |
--- a/chrome/browser/upgrade_detector.cc |
+++ b/chrome/browser/upgrade_detector.cc |
@@ -102,10 +102,19 @@ class DetectUpgradeTask : public Task { |
NOTREACHED() << "Failed to get current file version"; |
return; |
} |
- scoped_ptr<Version> running_version(Version::GetVersionFromString( |
- WideToUTF16(version->file_version()))); |
- if (installed_version->IsHigherThan(running_version.get())) { |
+ scoped_ptr<Version> running_version( |
+ Version::GetVersionFromString(WideToUTF16(version->file_version()))); |
+ if (running_version.get() == NULL) { |
+ NOTREACHED() << "Failed to parse version info"; |
+ return; |
+ } |
+ |
+ // |installed_version| may be NULL when the user downgrades on Linux (by |
+ // switching from dev to beta channel, for example). The user needs a |
+ // restart in this case as well. See http://crbug.com/46547 |
+ if (!installed_version.get() || |
+ installed_version->IsHigherThan(running_version.get())) { |
ChromeThread::PostTask(ChromeThread::UI, FROM_HERE, |
upgrade_detected_task_); |
upgrade_detected_task_ = NULL; |