Remove ActiveDirectory code from BrowserPolicyConnectorAsh

As documented in crrev.com/c/4463118, it is safe to assume that
InstallAttributes::IsActiveDirectoryManaged() always returns false.

This CL removes respective active directory related code blocks.
It also removes a browser test from
chrome/browser/ash/policy/active_directory to break a circular
dependency. Note that we intend to remove ALL files from that
directory in b/274762979 anyway.

Bug: b/279364186 b/274762979
Change-Id: Icb295677d4d96074bba60c9f012b3b4ed6079286
Tests: Existing unit and browser tests
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4466053
Reviewed-by: Igor <igorcov@chromium.org>
Commit-Queue: Roland Bock <rbock@google.com>
Code-Coverage: Findit <findit-for-me@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/heads/main@{#1135951}
diff --git a/chrome/browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc b/chrome/browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc
deleted file mode 100644
index f7e7c073..0000000
--- a/chrome/browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <string>
-
-#include "ash/constants/ash_switches.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/functional/bind.h"
-#include "base/memory/ref_counted.h"
-#include "base/path_service.h"
-#include "chrome/browser/extensions/extension_browsertest.h"
-#include "chrome/browser/policy/profile_policy_connector.h"
-#include "chrome/common/chrome_paths.h"
-#include "chromeos/ash/components/cryptohome/cryptohome_parameters.h"
-#include "chromeos/ash/components/dbus/login_manager/policy_descriptor.pb.h"
-#include "chromeos/ash/components/dbus/session_manager/fake_session_manager_client.h"
-#include "chromeos/ash/components/install_attributes/stub_install_attributes.h"
-#include "components/policy/core/common/cloud/cloud_policy_constants.h"
-#include "components/policy/core/common/cloud/test/policy_builder.h"
-#include "components/policy/core/common/policy_service.h"
-#include "components/user_manager/user_names.h"
-#include "content/public/test/browser_test.h"
-#include "extensions/common/extension.h"
-#include "extensions/test/extension_test_message_listener.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace policy {
-
-namespace {
-
-constexpr char kTestDomain[] = "test_domain";
-constexpr char kTestDeviceId[] = "test_device_id";
-
-constexpr char kTestExtensionId[] = "kjmkgkdkpedkejedfhmfcenooemhbpbo";
-constexpr base::FilePath::CharType kTestExtensionPath[] =
-    FILE_PATH_LITERAL("extensions/managed_extension");
-
-constexpr char kTestExtension2Id[] = "behllobkkfkfnphdnhnkndlbkcpglgmj";
-constexpr base::FilePath::CharType kTestExtension2Path[] =
-    FILE_PATH_LITERAL("extensions/managed_extension2");
-
-constexpr char kTestPolicy[] = R"({
-  "Policy": {
-    "Name": "disable_all_the_things"
-  }
-})";
-constexpr char kTestPolicyJSON[] = R"({"Name":"disable_all_the_things"})";
-
-constexpr char kTestPolicy2[] = R"({
-  "Policy": {
-    "Another": "turn_it_off"
-  }
-})";
-constexpr char kTestPolicy2JSON[] = R"({"Another":"turn_it_off"})";
-
-constexpr char kEmptyPolicy[] = "{}";
-
-void ExpectSuccess(base::OnceClosure callback, bool result) {
-  EXPECT_TRUE(result);
-  std::move(callback).Run();
-}
-
-}  // namespace
-
-class ComponentActiveDirectoryPolicyTest
-    : public extensions::ExtensionBrowserTest {
- protected:
-  ComponentActiveDirectoryPolicyTest()
-      : install_attributes_(
-            ash::StubInstallAttributes::CreateActiveDirectoryManaged(
-                kTestDomain,
-                kTestDeviceId)) {
-    builder_.policy_data().set_policy_type(
-        dm_protocol::kChromeExtensionPolicyType);
-    builder_.policy_data().set_settings_entity_id(kTestExtensionId);
-  }
-
-  void SetUpCommandLine(base::CommandLine* command_line) override {
-    ExtensionBrowserTest::SetUpCommandLine(command_line);
-
-    // Log in as Active Directory user.
-    command_line->AppendSwitchASCII(::ash::switches::kLoginUser,
-                                    ::user_manager::kStubAdUserEmail);
-
-    // Without this, user manager code will shut down Chrome since it can't
-    // find any policy.
-    command_line->AppendSwitchASCII(
-        ::ash::switches::kAllowFailedPolicyFetchForTest, "true");
-  }
-
-  void SetUpOnMainThread() override {
-    ExtensionBrowserTest::SetUpOnMainThread();
-
-    // Install the initial extension.
-    ExtensionTestMessageListener ready_listener("ready");
-    event_listener_ = std::make_unique<ExtensionTestMessageListener>(
-        "event", ReplyBehavior::kWillReply);
-    extension_ = LoadExtension(kTestExtensionPath);
-    ASSERT_TRUE(extension_.get());
-    ASSERT_EQ(kTestExtensionId, extension_->id());
-    EXPECT_TRUE(ready_listener.WaitUntilSatisfied());
-
-    // Store test extension policy
-    StorePolicy(kTestExtensionId, kTestPolicy);
-    RefreshPolicies();
-
-    // The extension will receive an update event.
-    EXPECT_TRUE(event_listener_->WaitUntilSatisfied());
-  }
-
-  void TearDownOnMainThread() override {
-    event_listener_.reset();
-    ExtensionBrowserTest::TearDownOnMainThread();
-  }
-
-  scoped_refptr<const extensions::Extension> LoadExtension(
-      const base::FilePath::CharType* path) {
-    base::FilePath full_path;
-    if (!base::PathService::Get(chrome::DIR_TEST_DATA, &full_path)) {
-      ADD_FAILURE();
-      return nullptr;
-    }
-    scoped_refptr<const extensions::Extension> extension(
-        ExtensionBrowserTest::LoadExtension(full_path.Append(path)));
-    if (!extension.get()) {
-      ADD_FAILURE();
-      return nullptr;
-    }
-    return extension;
-  }
-
-  void StorePolicy(const char* extension_id, const char* policy) {
-    const AccountId& account_id = user_manager::StubAdAccountId();
-    login_manager::PolicyDescriptor descriptor;
-    descriptor.set_account_type(login_manager::ACCOUNT_TYPE_USER);
-    descriptor.set_account_id(cryptohome::Identification(account_id).id());
-    descriptor.set_domain(login_manager::POLICY_DOMAIN_EXTENSIONS);
-    descriptor.set_component_id(extension_id);
-
-    builder_.set_payload(policy);
-    builder_.Build();
-    base::RunLoop run_loop;
-    ash::FakeSessionManagerClient::Get()->StorePolicy(
-        descriptor, builder_.GetBlob(),
-        base::BindOnce(&ExpectSuccess, run_loop.QuitClosure()));
-    run_loop.Run();
-  }
-
-  void RefreshPolicies() {
-    ProfilePolicyConnector* profile_connector =
-        browser()->profile()->GetProfilePolicyConnector();
-    PolicyService* policy_service = profile_connector->policy_service();
-    base::RunLoop run_loop;
-    policy_service->RefreshPolicies(run_loop.QuitClosure());
-    run_loop.Run();
-  }
-
-  scoped_refptr<const extensions::Extension> extension_;
-  std::unique_ptr<ExtensionTestMessageListener> event_listener_;
-  ash::ScopedStubInstallAttributes install_attributes_;
-  ComponentActiveDirectoryPolicyBuilder builder_;
-};
-
-// Checks policy "Name" is set with expected value.
-IN_PROC_BROWSER_TEST_F(ComponentActiveDirectoryPolicyTest,
-                       FetchExtensionPolicy) {
-  // Read the initial policy.
-  ExtensionTestMessageListener policy_listener(kTestPolicyJSON);
-  event_listener_->Reply("get-policy-Name");
-  EXPECT_TRUE(policy_listener.WaitUntilSatisfied());
-}
-
-// Uploads "Another" and verifies it. Also verifies that "Name" doesn't exist
-// anymore.
-IN_PROC_BROWSER_TEST_F(ComponentActiveDirectoryPolicyTest,
-                       UpdateExtensionPolicy) {
-  // Update and reload policy and make sure that the update event was received.
-  event_listener_->Reply("idle");
-  event_listener_->Reset();
-  StorePolicy(kTestExtensionId, kTestPolicy2);
-  RefreshPolicies();
-  EXPECT_TRUE(event_listener_->WaitUntilSatisfied());
-
-  // This policy was removed.
-  ExtensionTestMessageListener policy_listener1(kEmptyPolicy,
-                                                ReplyBehavior::kWillReply);
-  event_listener_->Reply("get-policy-Name");
-  EXPECT_TRUE(policy_listener1.WaitUntilSatisfied());
-
-  ExtensionTestMessageListener policy_listener2(kTestPolicy2JSON);
-  policy_listener1.Reply("get-policy-Another");
-  EXPECT_TRUE(policy_listener2.WaitUntilSatisfied());
-}
-
-IN_PROC_BROWSER_TEST_F(ComponentActiveDirectoryPolicyTest,
-                       InstallNewExtension) {
-  event_listener_->Reply("idle");
-  event_listener_.reset();
-
-  // Store policy 2 for extension 2.
-  StorePolicy(kTestExtension2Id, kTestPolicy2);
-
-  // Installing a new extension should trigger a schema update, which should
-  // trigger a policy refresh.
-  ExtensionTestMessageListener result_listener("ok");
-  result_listener.set_failure_message("fail");
-  scoped_refptr<const extensions::Extension> extension2 =
-      LoadExtension(kTestExtension2Path);
-  ASSERT_TRUE(extension2.get());
-  ASSERT_EQ(kTestExtension2Id, extension2->id());
-
-  // This extension only sends the 'policy' signal once it receives the policy,
-  // and after verifying it has the expected value. Otherwise it sends 'fail'.
-  EXPECT_TRUE(result_listener.WaitUntilSatisfied());
-}
-
-}  // namespace policy
diff --git a/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc b/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc
index 9ec9b90..3dabaaca 100644
--- a/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc
+++ b/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc
@@ -110,11 +110,6 @@
   return MarketSegment::UNKNOWN;
 }
 
-// Checks whether forced re-enrollment is enabled.
-bool IsForcedReEnrollmentEnabled() {
-  return AutoEnrollmentTypeChecker::IsFREEnabled();
-}
-
 std::unique_ptr<ash::attestation::AttestationFlow> CreateAttestationFlow() {
   return std::make_unique<ash::attestation::AttestationFlowAdaptive>(
       std::make_unique<ash::attestation::AttestationCAClient>());
@@ -143,37 +138,24 @@
             ash::DeviceSettingsService::Get(), ash::InstallAttributes::Get(),
             CreateBackgroundTaskRunner());
 
-    if (ash::InstallAttributes::Get()->IsActiveDirectoryManaged()) {
-      ash::UpstartClient::Get()->StartAuthPolicyService();
+    state_keys_broker_ = std::make_unique<ServerBackedStateKeysBroker>(
+        ash::SessionManagerClient::Get());
 
-      device_active_directory_policy_manager_ =
-          new DeviceActiveDirectoryPolicyManager(
-              std::move(device_cloud_policy_store));
-      providers_for_init_.push_back(
-          base::WrapUnique<ConfigurationPolicyProvider>(
-              device_active_directory_policy_manager_.get()));
-    } else {
-      state_keys_broker_ = std::make_unique<ServerBackedStateKeysBroker>(
-          ash::SessionManagerClient::Get());
+    const base::FilePath device_policy_external_data_path =
+        base::PathService::CheckedGet(ash::DIR_DEVICE_POLICY_EXTERNAL_DATA);
 
-      const base::FilePath device_policy_external_data_path =
-          base::PathService::CheckedGet(ash::DIR_DEVICE_POLICY_EXTERNAL_DATA);
+    auto external_data_manager =
+        std::make_unique<DevicePolicyCloudExternalDataManager>(
+            base::BindRepeating(&GetChromePolicyDetails),
+            CreateBackgroundTaskRunner(), device_policy_external_data_path,
+            device_cloud_policy_store.get());
 
-      auto external_data_manager =
-          std::make_unique<DevicePolicyCloudExternalDataManager>(
-              base::BindRepeating(&GetChromePolicyDetails),
-              CreateBackgroundTaskRunner(), device_policy_external_data_path,
-              device_cloud_policy_store.get());
-
-      device_cloud_policy_manager_ = new DeviceCloudPolicyManagerAsh(
-          std::move(device_cloud_policy_store),
-          std::move(external_data_manager),
-          base::SingleThreadTaskRunner::GetCurrentDefault(),
-          state_keys_broker_.get());
-      providers_for_init_.push_back(
-          base::WrapUnique<ConfigurationPolicyProvider>(
-              device_cloud_policy_manager_.get()));
-    }
+    device_cloud_policy_manager_ = new DeviceCloudPolicyManagerAsh(
+        std::move(device_cloud_policy_store), std::move(external_data_manager),
+        base::SingleThreadTaskRunner::GetCurrentDefault(),
+        state_keys_broker_.get());
+    providers_for_init_.push_back(base::WrapUnique<ConfigurationPolicyProvider>(
+        device_cloud_policy_manager_.get()));
   }
 
   global_user_cloud_policy_provider_ = new ProxyPolicyProvider();
@@ -204,34 +186,14 @@
     RestartDeviceCloudPolicyInitializer();
   }
 
-  if (!ash::InstallAttributes::Get()->IsActiveDirectoryManaged()) {
-    device_local_account_policy_service_ =
-        std::make_unique<DeviceLocalAccountPolicyService>(
-            ash::SessionManagerClient::Get(), ash::DeviceSettingsService::Get(),
-            ash::CrosSettings::Get(),
-            affiliated_invalidation_service_provider_.get(),
-            CreateBackgroundTaskRunner(), CreateBackgroundTaskRunner(),
-            CreateBackgroundTaskRunner(), url_loader_factory);
-    device_local_account_policy_service_->Connect(device_management_service());
-  } else if (IsForcedReEnrollmentEnabled()) {
-    // Initialize state keys and enrollment ID upload mechanisms to DM Server in
-    // Active Directory mode.
-    state_keys_broker_ = std::make_unique<ServerBackedStateKeysBroker>(
-        ash::SessionManagerClient::Get());
-    active_directory_device_state_uploader_ =
-        std::make_unique<ActiveDirectoryDeviceStateUploader>(
-            /*client_id=*/GetInstallAttributes()->GetDeviceId(),
-            device_management_service(), state_keys_broker_.get(),
-            url_loader_factory, std::make_unique<DMTokenStorage>(local_state),
-            local_state);
-    active_directory_device_state_uploader_->Init();
-
-    // Initialize the manager that will start the migration of Chromad devices
-    // into cloud management, when all pre-requisites are met.
-    active_directory_migration_manager_ =
-        std::make_unique<ActiveDirectoryMigrationManager>(local_state);
-    active_directory_migration_manager_->Init();
-  }
+  device_local_account_policy_service_ =
+      std::make_unique<DeviceLocalAccountPolicyService>(
+          ash::SessionManagerClient::Get(), ash::DeviceSettingsService::Get(),
+          ash::CrosSettings::Get(),
+          affiliated_invalidation_service_provider_.get(),
+          CreateBackgroundTaskRunner(), CreateBackgroundTaskRunner(),
+          CreateBackgroundTaskRunner(), url_loader_factory);
+  device_local_account_policy_service_->Connect(device_management_service());
 
   if (device_cloud_policy_manager_) {
     device_cloud_policy_invalidator_ =
diff --git a/chrome/browser/ash/policy/core/browser_policy_connector_ash.h b/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
index bd9ed32..cc31eb4 100644
--- a/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
+++ b/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
@@ -98,6 +98,10 @@
   bool IsCloudManaged() const;
 
   // Checks whether this is an Active Directory managed enterprise device.
+  // In theory, this can still yield true for a few left-over AD devices.
+  // However, starting in M114, it is considered safe to assume that this
+  // function always returns false.
+  // TODO(b/279364186) Remove.
   bool IsActiveDirectoryManaged() const;
 
   // Returns the enterprise enrollment domain if device is managed.
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 50e420fc..51a46bb 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4037,7 +4037,6 @@
         "../browser/ash/os_url_handler_browsertest.cc",
         "../browser/ash/platform_keys/key_permissions/key_permissions_manager_browsertest.cc",
         "../browser/ash/platform_keys/platform_keys_service_browsertest.cc",
-        "../browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc",
         "../browser/ash/policy/affiliation/affiliation_mixin.cc",
         "../browser/ash/policy/affiliation/affiliation_mixin.h",
         "../browser/ash/policy/affiliation/affiliation_test_helper.cc",