Use ChromeBrowserStateManager instead of BrowserListIOS.

The BrowserListIOS was there as a parallel to BrowserList while the
code was forked and is now only of historical interest as all of its
methods can be implemented using ChromeBrowserStateManager.

The following rules were used when converting from BrowserListIOS to
ChromeBrowserStateManager:

- re-implement BrowserListIOS::GetLastActiveWithBrowserState in term
  of iterating over all ios::ChromeBrowserState registered with the
  ChromeBrowserStateManager, and then over the TabModels associated
  with those ios::ChromeBrowserState

- iteration over BrowserListIOS::begin()/BrowserListIOS::end() can be
  replaced by iterating over the list from GetLoadedBrowserState() and
  if off-the-record ios::ChromeBrowserState are wanted it, and for each
  of them iterating over the TabModels associated

- BrowserListIOS::IsOffTheRecordSessionActive is re-implemented as
  a free function implemented on top of ChromeBrowserStateManager using
  the same rules.

BUG=None

Review-Url: https://codereview.chromium.org/2615003002
Cr-Original-Commit-Position: refs/heads/master@{#443590}
Committed: https://chromium.googlesource.com/chromium/src/+/20f7270f96d194b98f3053a1f5035552cf758c2c
Review-Url: https://codereview.chromium.org/2615003002
Cr-Commit-Position: refs/heads/master@{#443900}
diff --git a/ios/chrome/browser/metrics/BUILD.gn b/ios/chrome/browser/metrics/BUILD.gn
index cfccc2c..cc28d43 100644
--- a/ios/chrome/browser/metrics/BUILD.gn
+++ b/ios/chrome/browser/metrics/BUILD.gn
@@ -48,7 +48,7 @@
     "//ios/chrome/browser/google",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/sync",
-    "//ios/chrome/browser/ui:browser_list",
+    "//ios/chrome/browser/tabs",
     "//ios/chrome/browser/variations",
     "//ios/chrome/browser/variations:ios_chrome_ui_string_overrider_factory",
     "//ios/chrome/common",
@@ -101,7 +101,6 @@
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/tabs",
     "//ios/chrome/browser/ui",
-    "//ios/chrome/browser/ui:browser_list",
     "//ios/web",
     "//ui/base",
     "//url",
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
index 3fbd9cc3..bb7b2128 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
@@ -51,7 +51,7 @@
 #include "ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_delegate.h"
 #include "ios/chrome/browser/sync/ios_chrome_sync_client.h"
 #include "ios/chrome/browser/tab_parenting_global_observer.h"
-#include "ios/chrome/browser/ui/browser_list_ios.h"
+#include "ios/chrome/browser/tabs/tab_model_list.h"
 #include "ios/chrome/common/channel_info.h"
 #include "ios/web/public/web_thread.h"
 
@@ -193,7 +193,7 @@
   // be worth revisiting this to still log events from non-incognito sessions.
   metrics_service_->RegisterMetricsProvider(
       base::MakeUnique<OmniboxMetricsProvider>(
-          base::Bind(&BrowserListIOS::IsOffTheRecordSessionActive)));
+          base::Bind(&::IsOffTheRecordSessionActive)));
 
   {
     auto stability_metrics_provider =
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
index d528c47..9d4cf92 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
@@ -16,7 +16,7 @@
 #include "ios/chrome/browser/chrome_switches.h"
 #include "ios/chrome/browser/metrics/ios_chrome_metrics_service_accessor.h"
 #include "ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h"
-#include "ios/chrome/browser/ui/browser_list_ios.h"
+#include "ios/chrome/browser/tabs/tab_model_list.h"
 #include "ios/chrome/browser/variations/ios_chrome_variations_service_client.h"
 #include "ios/chrome/browser/variations/ios_ui_string_overrider_factory.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
@@ -63,7 +63,7 @@
 IOSChromeMetricsServicesManagerClient::CreateRapporServiceImpl() {
   DCHECK(thread_checker_.CalledOnValidThread());
   return base::MakeUnique<rappor::RapporServiceImpl>(
-      local_state_, base::Bind(&BrowserListIOS::IsOffTheRecordSessionActive));
+      local_state_, base::Bind(&::IsOffTheRecordSessionActive));
 }
 
 std::unique_ptr<variations::VariationsService>
diff --git a/ios/chrome/browser/metrics/new_tab_page_uma.mm b/ios/chrome/browser/metrics/new_tab_page_uma.mm
index 48fe6db..47375cc 100644
--- a/ios/chrome/browser/metrics/new_tab_page_uma.mm
+++ b/ios/chrome/browser/metrics/new_tab_page_uma.mm
@@ -10,16 +10,15 @@
 #include "ios/chrome/browser/chrome_url_constants.h"
 #import "ios/chrome/browser/tabs/tab.h"
 #import "ios/chrome/browser/tabs/tab_model.h"
-#import "ios/chrome/browser/ui/browser_list_ios.h"
+#import "ios/chrome/browser/tabs/tab_model_list.h"
 #include "url/gurl.h"
 
 namespace new_tab_page_uma {
 
 bool IsCurrentlyOnNTP(ios::ChromeBrowserState* browserState) {
-  Tab* currentTab =
-      [[BrowserListIOS::GetLastActiveWithBrowserState(browserState) tabModel]
-          currentTab];
-  return currentTab && currentTab.url == GURL(kChromeUINewTabURL);
+  TabModel* tabModel = GetLastActiveTabModelForChromeBrowserState(browserState);
+  return tabModel.currentTab &&
+         tabModel.currentTab.url == GURL(kChromeUINewTabURL);
 }
 
 void RecordAction(ios::ChromeBrowserState* browserState, ActionType type) {