Introduce a MetricsServicesManager class.
This class now owns MetricsService, VariationsService
and RapporService as well as MetricsStateManager.
The motivation is to be able to pass MetricsStateManager
to VariationsService (in a followup CL), so that it
can be used for simulation.
BUG=315807
Review URL: https://codereview.chromium.org/263093003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269144 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 935c016..1189149 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -44,8 +44,8 @@
#include "chrome/browser/io_thread.h"
#include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/browser/metrics/metrics_service.h"
+#include "chrome/browser/metrics/metrics_services_manager.h"
#include "chrome/browser/metrics/thread_watcher.h"
-#include "chrome/browser/metrics/variations/variations_service.h"
#include "chrome/browser/net/chrome_net_log.h"
#include "chrome/browser/net/crl_set_fetcher.h"
#include "chrome/browser/net/sdch_dictionary_fetcher.h"
@@ -75,7 +75,6 @@
#include "chrome/common/url_constants.h"
#include "chrome/installer/util/google_update_constants.h"
#include "components/policy/core/common/policy_service.h"
-#include "components/rappor/rappor_service.h"
#include "components/signin/core/common/profile_management_switches.h"
#include "components/translate/core/browser/translate_download_manager.h"
#include "content/public/browser/browser_thread.h"
@@ -143,8 +142,7 @@
BrowserProcessImpl::BrowserProcessImpl(
base::SequencedTaskRunner* local_state_task_runner,
const CommandLine& command_line)
- : created_metrics_service_(false),
- created_watchdog_thread_(false),
+ : created_watchdog_thread_(false),
created_browser_policy_connector_(false),
created_profile_manager_(false),
created_local_state_(false),
@@ -205,15 +203,13 @@
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&SdchDictionaryFetcher::Shutdown));
- // We need to destroy the MetricsService, RapporService, VariationsService,
- // IntranetRedirectDetector, PromoResourceService, and SafeBrowsing
- // ClientSideDetectionService (owned by the SafeBrowsingService) before the
- // io_thread_ gets destroyed, since their destructors can call the URLFetcher
- // destructor, which does a PostDelayedTask operation on the IO thread. (The
- // IO thread will handle that URLFetcher operation before going away.)
- metrics_service_.reset();
- rappor_service_.reset();
- variations_service_.reset();
+ // We need to destroy the MetricsServicesManager, IntranetRedirectDetector,
+ // PromoResourceService, and SafeBrowsing ClientSideDetectionService (owned by
+ // the SafeBrowsingService) before the io_thread_ gets destroyed, since their
+ // destructors can call the URLFetcher destructor, which does a
+ // PostDelayedTask operation on the IO thread. (The IO thread will handle that
+ // URLFetcher operation before going away.)
+ metrics_services_manager_.reset();
intranet_redirect_detector_.reset();
#if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
if (safe_browsing_service_.get())
@@ -412,16 +408,12 @@
MetricsService* BrowserProcessImpl::metrics_service() {
DCHECK(CalledOnValidThread());
- if (!created_metrics_service_)
- CreateMetricsService();
- return metrics_service_.get();
+ return GetMetricsServicesManager()->GetMetricsService();
}
rappor::RapporService* BrowserProcessImpl::rappor_service() {
DCHECK(CalledOnValidThread());
- if (!rappor_service_.get())
- rappor_service_.reset(new rappor::RapporService());
- return rappor_service_.get();
+ return GetMetricsServicesManager()->GetRapporService();
}
IOThread* BrowserProcessImpl::io_thread() {
@@ -459,11 +451,7 @@
chrome_variations::VariationsService* BrowserProcessImpl::variations_service() {
DCHECK(CalledOnValidThread());
- if (!variations_service_.get()) {
- variations_service_.reset(
- chrome_variations::VariationsService::Create(local_state()));
- }
- return variations_service_.get();
+ return GetMetricsServicesManager()->GetVariationsService();
}
BrowserProcessPlatformPart* BrowserProcessImpl::platform_part() {
@@ -784,13 +772,6 @@
ApplyAllowCrossOriginAuthPromptPolicy();
}
-void BrowserProcessImpl::CreateMetricsService() {
- DCHECK(!created_metrics_service_ && metrics_service_.get() == NULL);
- created_metrics_service_ = true;
-
- metrics_service_.reset(new MetricsService);
-}
-
void BrowserProcessImpl::CreateWatchdogThread() {
DCHECK(!created_watchdog_thread_ && watchdog_thread_.get() == NULL);
created_watchdog_thread_ = true;
@@ -979,6 +960,13 @@
#endif
}
+MetricsServicesManager* BrowserProcessImpl::GetMetricsServicesManager() {
+ DCHECK(CalledOnValidThread());
+ if (!metrics_services_manager_)
+ metrics_services_manager_.reset(new MetricsServicesManager(local_state()));
+ return metrics_services_manager_.get();
+}
+
void BrowserProcessImpl::ApplyDefaultBrowserPolicy() {
if (local_state()->GetBoolean(prefs::kDefaultBrowserSettingEnabled)) {
scoped_refptr<ShellIntegration::DefaultWebClientWorker>