Migrate chrome/browser/chromeos/policy to NetworkConnectionTracker

This migrates AutoEnrollmentClientImpl and AppInstallEventLoCollector
from using net::NetworkChangeNotifier to
content::NetworkConnectionTracker, which works with the network service
enabled.

Bug: 821009
Change-Id: I33dbd4ab0102d5a55bf34affdb7366b444e842ac
Reviewed-on: https://chromium-review.googlesource.com/1147602
Commit-Queue: Robbie McElrath <rmcelrath@chromium.org>
Reviewed-by: Maksim Ivanov <emaxx@chromium.org>
Cr-Commit-Position: refs/heads/master@{#579187}
diff --git a/chrome/browser/chromeos/policy/app_install_event_log_collector.cc b/chrome/browser/chromeos/policy/app_install_event_log_collector.cc
index a6fcbe2..7b00403 100644
--- a/chrome/browser/chromeos/policy/app_install_event_log_collector.cc
+++ b/chrome/browser/chromeos/policy/app_install_event_log_collector.cc
@@ -65,7 +65,8 @@
       pending_packages_(pending_packages) {
   chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
       this);
-  net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
+  g_browser_process->network_connection_tracker()->AddNetworkConnectionObserver(
+      this);
   // Might not be available in unit test.
   arc::ArcPolicyBridge* const policy_bridge =
       arc::ArcPolicyBridge::GetForBrowserContext(profile_);
@@ -85,7 +86,8 @@
   }
   chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
       this);
-  net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
+  g_browser_process->network_connection_tracker()
+      ->RemoveNetworkConnectionObserver(this);
   arc::ArcPolicyBridge* const policy_bridge =
       arc::ArcPolicyBridge::GetForBrowserContext(profile_);
   if (policy_bridge) {
@@ -133,8 +135,8 @@
       CreateSessionChangeEvent(em::AppInstallReportLogEvent::RESUME));
 }
 
-void AppInstallEventLogCollector::OnNetworkChanged(
-    net::NetworkChangeNotifier::ConnectionType type) {
+void AppInstallEventLogCollector::OnConnectionChanged(
+    network::mojom::ConnectionType type) {
   const bool currently_online = GetOnlineState();
   if (currently_online == online_) {
     return;
diff --git a/chrome/browser/chromeos/policy/app_install_event_log_collector.h b/chrome/browser/chromeos/policy/app_install_event_log_collector.h
index 7394f7e..6f7ac761 100644
--- a/chrome/browser/chromeos/policy/app_install_event_log_collector.h
+++ b/chrome/browser/chromeos/policy/app_install_event_log_collector.h
@@ -18,7 +18,7 @@
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
 #include "chromeos/dbus/power_manager_client.h"
 #include "components/arc/common/policy.mojom.h"
-#include "net/base/network_change_notifier.h"
+#include "content/public/browser/network_connection_tracker.h"
 
 class Profile;
 
@@ -31,7 +31,7 @@
 class AppInstallEventLogCollector
     : public chromeos::PowerManagerClient::Observer,
       public arc::ArcPolicyBridge::Observer,
-      public net::NetworkChangeNotifier::NetworkChangeObserver,
+      public content::NetworkConnectionTracker::NetworkConnectionObserver,
       public ArcAppListPrefs::Observer {
  public:
   // The delegate that events are forwarded to for inclusion in the log.
@@ -76,9 +76,8 @@
   void SuspendImminent(power_manager::SuspendImminent::Reason reason) override;
   void SuspendDone(const base::TimeDelta& sleep_duration) override;
 
-  // net::NetworkChangeNotifier::NetworkChangeObserver:
-  void OnNetworkChanged(
-      net::NetworkChangeNotifier::ConnectionType type) override;
+  // content::NetworkConnectionTracker::NetworkConnectionObserver:
+  void OnConnectionChanged(network::mojom::ConnectionType type) override;
 
   // arc::ArcPolicyBridge::Observer:
   void OnCloudDpsRequested(base::Time time,
diff --git a/chrome/browser/chromeos/policy/app_install_event_log_collector_unittest.cc b/chrome/browser/chromeos/policy/app_install_event_log_collector_unittest.cc
index b6b6ed0..21f291f 100644
--- a/chrome/browser/chromeos/policy/app_install_event_log_collector_unittest.cc
+++ b/chrome/browser/chromeos/policy/app_install_event_log_collector_unittest.cc
@@ -120,8 +120,6 @@
     chromeos::DBusThreadManager::Initialize();
     chromeos::NetworkHandler::Initialize();
     profile_ = std::make_unique<TestingProfile>();
-    network_change_notifier_ =
-        base::WrapUnique(net::NetworkChangeNotifier::CreateMock());
 
     service_test_ = chromeos::DBusThreadManager::Get()
                         ->GetShillServiceClient()
@@ -146,27 +144,29 @@
     TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr);
   }
 
-  void SetNetworkState(const std::string& service_path,
-                       const std::string& state) {
+  void SetNetworkState(
+      content::NetworkConnectionTracker::NetworkConnectionObserver* observer,
+      const std::string& service_path,
+      const std::string& state) {
     service_test_->SetServiceProperty(service_path, shill::kStateProperty,
                                       base::Value(state));
     base::RunLoop().RunUntilIdle();
 
-    net::NetworkChangeNotifier::ConnectionType connection_type =
-        net::NetworkChangeNotifier::CONNECTION_NONE;
+    network::mojom::ConnectionType connection_type =
+        network::mojom::ConnectionType::CONNECTION_NONE;
     std::string network_state;
     service_test_->GetServiceProperties(kWifiServicePath)
         ->GetString(shill::kStateProperty, &network_state);
     if (network_state == shill::kStateOnline) {
-      connection_type = net::NetworkChangeNotifier::CONNECTION_WIFI;
+      connection_type = network::mojom::ConnectionType::CONNECTION_WIFI;
     }
     service_test_->GetServiceProperties(kEthernetServicePath)
         ->GetString(shill::kStateProperty, &network_state);
     if (network_state == shill::kStateOnline) {
-      connection_type = net::NetworkChangeNotifier::CONNECTION_ETHERNET;
+      connection_type = network::mojom::ConnectionType::CONNECTION_ETHERNET;
     }
-    net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
-        connection_type);
+    if (observer)
+      observer->OnConnectionChanged(connection_type);
     base::RunLoop().RunUntilIdle();
   }
 
@@ -179,7 +179,6 @@
 
   const std::set<std::string> packages_ = {kPackageName};
 
-  std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_;
   chromeos::ShillServiceClient::TestInterface* service_test_ = nullptr;
 
  private:
@@ -301,7 +300,7 @@
 // to WiFi with a pending captive portal. Verify that no event is recorded.
 // Then, pass the captive portal. Verify that a connectivity change is recorded.
 TEST_F(AppInstallEventLogCollectorTest, ConnectivityChanges) {
-  SetNetworkState(kEthernetServicePath, shill::kStateOnline);
+  SetNetworkState(nullptr, kEthernetServicePath, shill::kStateOnline);
 
   std::unique_ptr<AppInstallEventLogCollector> collector =
       std::make_unique<AppInstallEventLogCollector>(delegate(), profile(),
@@ -317,22 +316,22 @@
             delegate()->last_event().session_state_change_type());
   EXPECT_TRUE(delegate()->last_event().online());
 
-  SetNetworkState(kWifiServicePath, shill::kStateOnline);
+  SetNetworkState(collector.get(), kWifiServicePath, shill::kStateOnline);
   EXPECT_EQ(1, delegate()->add_for_all_count());
 
-  SetNetworkState(kEthernetServicePath, shill::kStateOffline);
+  SetNetworkState(collector.get(), kEthernetServicePath, shill::kStateOffline);
   EXPECT_EQ(1, delegate()->add_for_all_count());
 
-  SetNetworkState(kWifiServicePath, shill::kStateOffline);
+  SetNetworkState(collector.get(), kWifiServicePath, shill::kStateOffline);
   EXPECT_EQ(2, delegate()->add_for_all_count());
   EXPECT_EQ(em::AppInstallReportLogEvent::CONNECTIVITY_CHANGE,
             delegate()->last_event().event_type());
   EXPECT_FALSE(delegate()->last_event().online());
 
-  SetNetworkState(kWifiServicePath, shill::kStatePortal);
+  SetNetworkState(collector.get(), kWifiServicePath, shill::kStatePortal);
   EXPECT_EQ(2, delegate()->add_for_all_count());
 
-  SetNetworkState(kWifiServicePath, shill::kStateOnline);
+  SetNetworkState(collector.get(), kWifiServicePath, shill::kStateOnline);
   EXPECT_EQ(3, delegate()->add_for_all_count());
   EXPECT_EQ(em::AppInstallReportLogEvent::CONNECTIVITY_CHANGE,
             delegate()->last_event().event_type());
diff --git a/chrome/browser/chromeos/policy/auto_enrollment_client_impl.cc b/chrome/browser/chromeos/policy/auto_enrollment_client_impl.cc
index 9121532b..3bd6673 100644
--- a/chrome/browser/chromeos/policy/auto_enrollment_client_impl.cc
+++ b/chrome/browser/chromeos/policy/auto_enrollment_client_impl.cc
@@ -14,6 +14,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/policy/server_backed_device_state.h"
 #include "chrome/common/chrome_content_client.h"
 #include "chrome/common/pref_names.h"
@@ -375,7 +376,8 @@
 }
 
 AutoEnrollmentClientImpl::~AutoEnrollmentClientImpl() {
-  net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
+  g_browser_process->network_connection_tracker()
+      ->RemoveNetworkConnectionObserver(this);
 }
 
 // static
@@ -386,8 +388,10 @@
 
 void AutoEnrollmentClientImpl::Start() {
   // (Re-)register the network change observer.
-  net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
-  net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
+  g_browser_process->network_connection_tracker()
+      ->RemoveNetworkConnectionObserver(this);
+  g_browser_process->network_connection_tracker()->AddNetworkConnectionObserver(
+      this);
 
   // Drop the previous job and reset state.
   request_job_.reset();
@@ -425,9 +429,9 @@
   return state_;
 }
 
-void AutoEnrollmentClientImpl::OnNetworkChanged(
-    net::NetworkChangeNotifier::ConnectionType type) {
-  if (type != net::NetworkChangeNotifier::CONNECTION_NONE &&
+void AutoEnrollmentClientImpl::OnConnectionChanged(
+    network::mojom::ConnectionType type) {
+  if (type != network::mojom::ConnectionType::CONNECTION_NONE &&
       !progress_callback_.is_null()) {
     RetryStep();
   }
diff --git a/chrome/browser/chromeos/policy/auto_enrollment_client_impl.h b/chrome/browser/chromeos/policy/auto_enrollment_client_impl.h
index 56595c0..15742b72 100644
--- a/chrome/browser/chromeos/policy/auto_enrollment_client_impl.h
+++ b/chrome/browser/chromeos/policy/auto_enrollment_client_impl.h
@@ -15,7 +15,7 @@
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
-#include "net/base/network_change_notifier.h"
+#include "content/public/browser/network_connection_tracker.h"
 #include "third_party/protobuf/src/google/protobuf/repeated_field.h"
 
 class PrefRegistrySimple;
@@ -35,7 +35,7 @@
 // OOBE.
 class AutoEnrollmentClientImpl
     : public AutoEnrollmentClient,
-      public net::NetworkChangeNotifier::NetworkChangeObserver {
+      public content::NetworkConnectionTracker::NetworkConnectionObserver {
  public:
   // Subclasses of this class provide an identifier and specify the identifier
   // set for the DeviceAutoEnrollmentRequest,
@@ -86,9 +86,8 @@
   std::string device_id() const override;
   AutoEnrollmentState state() const override;
 
-  // Implementation of net::NetworkChangeNotifier::NetworkChangeObserver:
-  void OnNetworkChanged(
-      net::NetworkChangeNotifier::ConnectionType type) override;
+  // content::NetworkConnectionTracker::NetworkConnectionObserver:
+  void OnConnectionChanged(network::mojom::ConnectionType type) override;
 
  private:
   typedef bool (AutoEnrollmentClientImpl::*RequestCompletionHandler)(
diff --git a/chrome/browser/chromeos/policy/auto_enrollment_client_impl_unittest.cc b/chrome/browser/chromeos/policy/auto_enrollment_client_impl_unittest.cc
index d07e02b..050a8cc 100644
--- a/chrome/browser/chromeos/policy/auto_enrollment_client_impl_unittest.cc
+++ b/chrome/browser/chromeos/policy/auto_enrollment_client_impl_unittest.cc
@@ -460,7 +460,8 @@
 
   // Network changes don't trigger retries after obtaining a response from
   // the server.
-  client()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+  client()->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_);
 }
 
@@ -479,7 +480,8 @@
 
   // Network changes don't trigger retries after obtaining a response from
   // the server.
-  client()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+  client()->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_);
 }
 
@@ -502,7 +504,8 @@
 
   // Network changes don't trigger retries after obtaining a response from
   // the server.
-  client()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+  client()->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ZERO_TOUCH, state_);
 }
 
@@ -648,7 +651,8 @@
   EXPECT_FALSE(HasServerBackedState());
 
   // The client doesn't retry if no new connection became available.
-  client()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE);
+  client()->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_NONE);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_);
   EXPECT_FALSE(HasCachedDecision());
   EXPECT_FALSE(HasServerBackedState());
@@ -659,7 +663,8 @@
       "example.com",
       em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED,
       kDisabledMessage);
-  client()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+  client()->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_);
   EXPECT_TRUE(HasCachedDecision());
   VerifyServerBackedState("example.com",
@@ -667,8 +672,10 @@
                           kDisabledMessage);
 
   // Subsequent network changes don't trigger retries.
-  client()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE);
-  client()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+  client()->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_NONE);
+  client()->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_);
   EXPECT_TRUE(HasCachedDecision());
   VerifyServerBackedState("example.com",
@@ -712,7 +719,8 @@
   EXPECT_TRUE(base::MessageLoopCurrent::Get()->IsIdleForTesting());
 
   // Network change events are ignored while a request is pending.
-  client->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+  client->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_);
 
   // The client cleans itself up once a reply is received.
@@ -723,7 +731,8 @@
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_);
 
   // Network changes that have been posted before are also ignored:
-  client->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+  client->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_);
 }
 
@@ -786,7 +795,8 @@
   EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _));
 
   // Trigger a network change event.
-  client()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+  client()->OnConnectionChanged(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_);
   EXPECT_TRUE(HasCachedDecision());
   VerifyServerBackedState("example.com",