Index: chrome/browser/metrics/variations_service.cc |
diff --git a/chrome/browser/metrics/variations_service.cc b/chrome/browser/metrics/variations_service.cc |
index 5ee2ee13fa8ec28026d9dd672fb2121520cf63ea..0682f3b74726c8794f4e9e7b5e6ff20d1abb20d5 100644 |
--- a/chrome/browser/metrics/variations_service.cc |
+++ b/chrome/browser/metrics/variations_service.cc |
@@ -16,10 +16,12 @@ |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/metrics/proto/trials_seed.pb.h" |
#include "chrome/browser/prefs/pref_service.h" |
+#include "chrome/common/chrome_notification_types.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/metrics/experiments_helper.h" |
#include "chrome/common/pref_names.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/notification_service.h" |
#include "content/public/common/url_fetcher.h" |
#include "googleurl/src/gurl.h" |
#include "net/base/load_flags.h" |
@@ -99,6 +101,8 @@ GURL GetVariationsServerURL() { |
VariationsService::VariationsService() |
: variations_server_url_(GetVariationsServerURL()) { |
+ registrar_.Add(this, chrome::NOTIFICATION_UPGRADE_RECOMMENDED, |
+ content::NotificationService::AllSources()); |
} |
VariationsService::~VariationsService() {} |
@@ -140,6 +144,27 @@ void VariationsService::StartRepeatedVariationsSeedFetch() { |
this, &VariationsService::FetchVariationsSeed); |
} |
+// static |
+void VariationsService::RegisterPrefs(PrefService* prefs) { |
+ prefs->RegisterStringPref(prefs::kVariationsSeed, std::string()); |
+ prefs->RegisterInt64Pref(prefs::kVariationsSeedDate, |
+ base::Time().ToInternalValue()); |
+} |
+ |
+void VariationsService::Observe(int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ DCHECK(type == chrome::NOTIFICATION_UPGRADE_RECOMMENDED); |
+ // An upgrade is ready, so attempt to fetch the Variations seed in case there |
+ // were updates. |
+ FetchVariationsSeed(); |
+ |
+ // Since we explicitly call FetchVariationsSeed here, we can reset the timer |
+ // so that we don't retry for another full period. |
+ timer_.Reset(); |
+} |
+ |
void VariationsService::FetchVariationsSeed() { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
@@ -186,13 +211,6 @@ void VariationsService::OnURLFetchComplete(const net::URLFetcher* source) { |
StoreSeedData(seed_data, response_date, g_browser_process->local_state()); |
} |
-// static |
-void VariationsService::RegisterPrefs(PrefService* prefs) { |
- prefs->RegisterStringPref(prefs::kVariationsSeed, std::string()); |
- prefs->RegisterInt64Pref(prefs::kVariationsSeedDate, |
- base::Time().ToInternalValue()); |
-} |
- |
bool VariationsService::StoreSeedData(const std::string& seed_data, |
const base::Time& seed_date, |
PrefService* local_prefs) { |