Fix early shutdown crash due to out-of-order destruction.

BrowserProcessImpl must take ownership of both
ChromeBrowserPolicyConnector and the Local State PrefService at the same
time. Failure to do so can result in the policy connector being
destroyed before the pref service, resulting in crashes.

This CL also cleans up some dead code left behind when creation of these
things was moved earlier in startup.

BUG=948265

Change-Id: Ia9bf5b9860381d8f865d1447c16d1674d22c4e4d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2362800
Reviewed-by: David Roger <[email protected]>
Commit-Queue: Greg Thompson <[email protected]>
Cr-Commit-Position: refs/heads/master@{#800053}
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 4f656cf..254173b2 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -226,18 +226,16 @@
   return nullptr;
 }
 
-BrowserProcessImpl::BrowserProcessImpl(StartupData* startup_data) {
+BrowserProcessImpl::BrowserProcessImpl(StartupData* startup_data)
+    : startup_data_(startup_data),
+      browser_policy_connector_(startup_data->chrome_feature_list_creator()
+                                    ->TakeChromeBrowserPolicyConnector()),
+      local_state_(
+          startup_data->chrome_feature_list_creator()->TakePrefService()),
+      platform_part_(std::make_unique<BrowserProcessPlatformPart>()) {
   g_browser_process = this;
 
   DCHECK(startup_data);
-  startup_data_ = startup_data;
-
-  chrome_feature_list_creator_ = startup_data->chrome_feature_list_creator();
-  browser_policy_connector_ =
-      chrome_feature_list_creator_->TakeChromeBrowserPolicyConnector();
-  created_browser_policy_connector_ = true;
-
-  platform_part_ = std::make_unique<BrowserProcessPlatformPart>();
   // Most work should be done in Init().
 }
 
@@ -700,8 +698,6 @@
 
 PrefService* BrowserProcessImpl::local_state() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (!local_state_)
-    CreateLocalState();
   return local_state_.get();
 }
 
@@ -749,11 +745,6 @@
 policy::ChromeBrowserPolicyConnector*
 BrowserProcessImpl::browser_policy_connector() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (!created_browser_policy_connector_) {
-    DCHECK(!browser_policy_connector_);
-    browser_policy_connector_ = platform_part_->CreateBrowserPolicyConnector();
-    created_browser_policy_connector_ = true;
-  }
   return browser_policy_connector_.get();
 }
 
@@ -1115,13 +1106,6 @@
   profile_manager_ = std::make_unique<ProfileManager>(user_data_dir);
 }
 
-void BrowserProcessImpl::CreateLocalState() {
-  DCHECK(!local_state_);
-
-  local_state_ = chrome_feature_list_creator_->TakePrefService();
-  DCHECK(local_state_);
-}
-
 void BrowserProcessImpl::PreCreateThreads(
     const base::CommandLine& command_line) {
 #if BUILDFLAG(ENABLE_EXTENSIONS)