Index: chromecast/browser/cast_browser_main_parts.cc |
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc |
index ccb0fa874aa8c87c1a354ff3640c59041160c6de..75c39e0506e161d5ba32794645d07e2d1fa810a1 100644 |
--- a/chromecast/browser/cast_browser_main_parts.cc |
+++ b/chromecast/browser/cast_browser_main_parts.cc |
@@ -22,11 +22,13 @@ |
#include "build/build_config.h" |
#include "cc/base/switches.h" |
#include "chromecast/base/cast_constants.h" |
+#include "chromecast/base/cast_features.h" |
#include "chromecast/base/cast_paths.h" |
#include "chromecast/base/cast_sys_info_util.h" |
#include "chromecast/base/chromecast_switches.h" |
#include "chromecast/base/metrics/cast_metrics_helper.h" |
#include "chromecast/base/metrics/grouped_histogram.h" |
+#include "chromecast/base/pref_names.h" |
#include "chromecast/base/version.h" |
#include "chromecast/browser/cast_browser_context.h" |
#include "chromecast/browser/cast_browser_process.h" |
@@ -277,6 +279,7 @@ CastBrowserMainParts::CastBrowserMainParts( |
URLRequestContextFactory* url_request_context_factory) |
: BrowserMainParts(), |
cast_browser_process_(new CastBrowserProcess()), |
+ field_trial_list_(nullptr), |
parameters_(parameters), |
url_request_context_factory_(url_request_context_factory), |
net_log_(new CastNetLog()), |
@@ -412,6 +415,26 @@ int CastBrowserMainParts::PreCreateThreads() { |
if (!base::CreateDirectory(home_dir)) |
return 1; |
+ scoped_refptr<PrefRegistrySimple> pref_registry(new PrefRegistrySimple()); |
+ metrics::RegisterPrefs(pref_registry.get()); |
+ PrefProxyConfigTrackerImpl::RegisterPrefs(pref_registry.get()); |
+ cast_browser_process_->SetPrefService( |
+ PrefServiceHelper::CreatePrefService(pref_registry.get())); |
+ |
+ // As soon as the PrefService is set, initialize the base::FeatureList, so |
+ // objects initialized after this point can use features from |
+ // base::FeatureList. |
+ const auto* features_dict = |
+ cast_browser_process_->pref_service()->GetDictionary( |
+ prefs::kLatestDCSFeatures); |
+ const auto* experiment_ids = cast_browser_process_->pref_service()->GetList( |
+ prefs::kActiveDCSExperiments); |
+ auto* command_line = base::CommandLine::ForCurrentProcess(); |
+ InitializeFeatureList( |
+ *features_dict, *experiment_ids, |
+ command_line->GetSwitchValueASCII(switches::kEnableFeatures), |
+ command_line->GetSwitchValueASCII(switches::kDisableFeatures)); |
+ |
// Hook for internal code |
cast_browser_process_->browser_client()->PreCreateThreads(); |
@@ -436,11 +459,6 @@ int CastBrowserMainParts::PreCreateThreads() { |
} |
void CastBrowserMainParts::PreMainMessageLoopRun() { |
- scoped_refptr<PrefRegistrySimple> pref_registry(new PrefRegistrySimple()); |
- metrics::RegisterPrefs(pref_registry.get()); |
- PrefProxyConfigTrackerImpl::RegisterPrefs(pref_registry.get()); |
- cast_browser_process_->SetPrefService( |
- PrefServiceHelper::CreatePrefService(pref_registry.get())); |
#if !defined(OS_ANDROID) |
memory_pressure_monitor_.reset(new CastMemoryPressureMonitor()); |