Remove unused DMTokenStorage class

The class was used for active directory in the past.
CL that introduced it: https://issues.chromium.org/issues/41286804

Now it's unused.

BUG=b:320682630
TEST=CQ passes

Change-Id: I98f1aec7a271588ca1253b1375431a085fb5bdc7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5803194
Reviewed-by: Marc Treib <[email protected]>
Commit-Queue: Igor <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1344782}
diff --git a/chrome/browser/ash/policy/core/BUILD.gn b/chrome/browser/ash/policy/core/BUILD.gn
index 220e89fdd..5c8697d 100644
--- a/chrome/browser/ash/policy/core/BUILD.gn
+++ b/chrome/browser/ash/policy/core/BUILD.gn
@@ -42,8 +42,6 @@
     "device_policy_decoder.cc",
     "device_policy_decoder.h",
     "device_policy_remover.h",
-    "dm_token_storage.cc",
-    "dm_token_storage.h",
     "file_util.cc",
     "file_util.h",
     "policy_oauth2_token_fetcher.cc",
@@ -213,7 +211,6 @@
     "device_local_account_policy_service_unittest.cc",
     "device_local_account_unittest.cc",
     "device_policy_decoder_unittest.cc",
-    "dm_token_storage_unittest.cc",
     "reporting_user_tracker_unittest.cc",
     "user_cloud_policy_manager_ash_unittest.cc",
     "user_cloud_policy_store_ash_unittest.cc",
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 ec26b4dc..3450d0d1 100644
--- a/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc
+++ b/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc
@@ -29,7 +29,6 @@
 #include "chrome/browser/ash/policy/core/device_cloud_policy_store_ash.h"
 #include "chrome/browser/ash/policy/core/device_local_account.h"
 #include "chrome/browser/ash/policy/core/device_local_account_policy_service.h"
-#include "chrome/browser/ash/policy/core/dm_token_storage.h"
 #include "chrome/browser/ash/policy/enrollment/auto_enrollment_type_checker.h"
 #include "chrome/browser/ash/policy/enrollment/device_cloud_policy_initializer.h"
 #include "chrome/browser/ash/policy/enrollment/enrollment_requisition_manager.h"
diff --git a/chrome/browser/ash/policy/core/dm_token_storage.cc b/chrome/browser/ash/policy/core/dm_token_storage.cc
deleted file mode 100644
index e612b43c..0000000
--- a/chrome/browser/ash/policy/core/dm_token_storage.cc
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright 2016 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/policy/core/dm_token_storage.h"
-
-#include "base/functional/bind.h"
-#include "base/logging.h"
-#include "base/task/thread_pool.h"
-#include "chrome/browser/ash/settings/token_encryptor.h"
-#include "chrome/common/pref_names.h"
-#include "chromeos/ash/components/cryptohome/system_salt_getter.h"
-#include "components/prefs/pref_registry_simple.h"
-#include "components/prefs/pref_service.h"
-#include "content/public/browser/browser_thread.h"
-
-namespace {
-
-std::string EncryptToken(const std::string& system_salt,
-                         const std::string& dm_token) {
-  ash::CryptohomeTokenEncryptor encryptor(system_salt);
-  return encryptor.EncryptWithSystemSalt(dm_token);
-}
-
-std::string DecryptToken(const std::string& system_salt,
-                         const std::string encrypted_dm_token,
-                         bool is_weakly_encrypted) {
-  ash::CryptohomeTokenEncryptor encryptor(system_salt);
-  return is_weakly_encrypted
-             ? encryptor.WeakDecryptWithSystemSalt(encrypted_dm_token)
-             : encryptor.DecryptWithSystemSalt(encrypted_dm_token);
-}
-
-}  // namespace
-
-namespace policy {
-
-DMTokenStorageBase::~DMTokenStorageBase() = default;
-
-DMTokenStorage::DMTokenStorage(PrefService* local_state)
-    : local_state_(local_state) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  ash::SystemSaltGetter::Get()->GetSystemSalt(base::BindOnce(
-      &DMTokenStorage::OnSystemSaltReceived, weak_ptr_factory_.GetWeakPtr()));
-}
-
-DMTokenStorage::~DMTokenStorage() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  FlushStoreTokenCallback(false);
-  FlushRetrieveTokenCallback(std::string());
-}
-
-// static
-void DMTokenStorage::RegisterPrefs(PrefRegistrySimple* registry) {
-  registry->RegisterStringPref(prefs::kDeviceDMTokenV1, std::string());
-  registry->RegisterStringPref(prefs::kDeviceDMTokenV2, std::string());
-}
-
-void DMTokenStorage::StoreDMToken(const std::string& dm_token,
-                                  StoreCallback callback) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (!store_callback_.is_null()) {
-    DLOG(ERROR)
-        << "Failed to store DM token: Previous store operation is not finished";
-    std::move(callback).Run(false);
-    return;
-  }
-  if (!retrieve_callbacks_.empty()) {
-    DLOG(ERROR)
-        << "Failed to store DM token: Retrieve operation is not finished";
-    std::move(callback).Run(false);
-    return;
-  }
-  store_callback_ = std::move(callback);
-  dm_token_ = dm_token;
-  switch (state_) {
-    case SaltState::LOADING:
-      // Do nothing. Waiting for system salt.
-      break;
-    case SaltState::LOADED:
-      EncryptAndStoreToken();
-      break;
-    case SaltState::ERROR:
-      FlushStoreTokenCallback(false);
-      break;
-  }
-}
-
-void DMTokenStorage::RetrieveDMToken(RetrieveCallback callback) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (!store_callback_.is_null()) {
-    DCHECK(retrieve_callbacks_.empty());
-    DLOG(ERROR)
-        << "Failed to retrieve DM token: Store operation is not finished";
-    std::move(callback).Run(std::string());
-    return;
-  }
-  retrieve_callbacks_.push_back(std::move(callback));
-  switch (state_) {
-    case SaltState::LOADING:
-      // Do nothing. Waiting for system salt.
-      break;
-    case SaltState::LOADED:
-      if (retrieve_callbacks_.size() == 1) {  // First consumer.
-        LoadAndDecryptToken();
-      }
-      break;
-    case SaltState::ERROR:
-      FlushRetrieveTokenCallback(std::string());
-      break;
-  }
-}
-
-void DMTokenStorage::OnSystemSaltReceived(const std::string& system_salt) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  system_salt_ = system_salt;
-  if (system_salt_.empty()) {
-    state_ = SaltState::ERROR;
-    DLOG(ERROR) << "Failed to get system salt.";
-    FlushStoreTokenCallback(false);
-    FlushRetrieveTokenCallback(std::string());
-    return;
-  }
-  // Should not be concurrent store and get operations.
-  DCHECK(store_callback_.is_null() || retrieve_callbacks_.empty());
-  state_ = SaltState::LOADED;
-  if (!store_callback_.is_null())
-    EncryptAndStoreToken();
-  else if (!retrieve_callbacks_.empty())
-    LoadAndDecryptToken();
-}
-
-void DMTokenStorage::EncryptAndStoreToken() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  DCHECK(!system_salt_.empty());
-  DCHECK(!dm_token_.empty());
-  base::ThreadPool::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
-      base::BindOnce(&EncryptToken, system_salt_, dm_token_),
-      base::BindOnce(&DMTokenStorage::OnTokenEncrypted,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void DMTokenStorage::OnTokenEncrypted(const std::string& encrypted_dm_token) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (encrypted_dm_token.empty()) {
-    DLOG(ERROR) << "Failed to encrypt DM token.";
-  } else {
-    local_state_->SetString(prefs::kDeviceDMTokenV2, encrypted_dm_token);
-  }
-  FlushStoreTokenCallback(!encrypted_dm_token.empty());
-}
-
-void DMTokenStorage::LoadAndDecryptToken() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  DCHECK_EQ(SaltState::LOADED, state_);
-  bool is_weakly_encrypted = false;
-  std::string encrypted_dm_token =
-      local_state_->GetString(prefs::kDeviceDMTokenV2);
-  if (encrypted_dm_token.empty()) {
-    is_weakly_encrypted = true;
-    encrypted_dm_token = local_state_->GetString(prefs::kDeviceDMTokenV1);
-  }
-  if (!encrypted_dm_token.empty()) {
-    base::ThreadPool::PostTaskAndReplyWithResult(
-        FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
-        base::BindOnce(&DecryptToken, system_salt_, encrypted_dm_token,
-                       is_weakly_encrypted),
-        base::BindOnce(&DMTokenStorage::FlushRetrieveTokenCallback,
-                       weak_ptr_factory_.GetWeakPtr()));
-  } else {
-    DLOG(ERROR) << "No DM token in the local state.";
-    FlushRetrieveTokenCallback(std::string());
-  }
-}
-
-void DMTokenStorage::FlushStoreTokenCallback(bool status) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (!store_callback_.is_null()) {
-    std::move(store_callback_).Run(status);
-  }
-}
-
-void DMTokenStorage::FlushRetrieveTokenCallback(const std::string& dm_token) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (retrieve_callbacks_.empty())
-    return;
-  if (dm_token.empty())
-    DLOG(ERROR) << "Failed to retrieve DM token.";
-  std::vector<RetrieveCallback> callbacks;
-  callbacks.swap(retrieve_callbacks_);
-  for (RetrieveCallback& callback : callbacks)
-    std::move(callback).Run(dm_token);
-}
-
-}  // namespace policy
diff --git a/chrome/browser/ash/policy/core/dm_token_storage.h b/chrome/browser/ash/policy/core/dm_token_storage.h
deleted file mode 100644
index 7e779553..0000000
--- a/chrome/browser/ash/policy/core/dm_token_storage.h
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2016 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_POLICY_CORE_DM_TOKEN_STORAGE_H_
-#define CHROME_BROWSER_ASH_POLICY_CORE_DM_TOKEN_STORAGE_H_
-
-#include <string>
-#include <vector>
-
-#include "base/functional/callback.h"
-#include "base/memory/raw_ptr.h"
-#include "base/memory/weak_ptr.h"
-
-class PrefRegistrySimple;
-class PrefService;
-
-namespace policy {
-
-// Interface to store/retrieve DM token.
-// TODO(b/181210862): Refactor and align with "Impl" naming convention.
-class DMTokenStorageBase {
- public:
-  using StoreCallback = base::OnceCallback<void(bool success)>;
-  using RetrieveCallback =
-      base::OnceCallback<void(const std::string& dm_token)>;
-
-  virtual ~DMTokenStorageBase();
-
-  // Persists |dm_token|. Signals completion via |callback|, passing true if the
-  // operation succeeded.
-  virtual void StoreDMToken(const std::string& dm_token,
-                            StoreCallback callback) = 0;
-
-  // Loads DM token. Fires callback on completion. Empty |dm_token| means error.
-  virtual void RetrieveDMToken(RetrieveCallback callback) = 0;
-};
-
-// Implementation of DMTokenStorageBase interface to store/retrieve DM token
-// to/from local state on the device. This is needed for Active Directory
-// management because AD devices lacks DM token in the policies.
-//
-// Note that requests must be made from the UI thread because SystemSaltGetter
-// calls CryptohomeMiscClient which must be called from the UI thread.
-class DMTokenStorage : public DMTokenStorageBase {
- public:
-  explicit DMTokenStorage(PrefService* local_state);
-  ~DMTokenStorage() override;
-
-  static void RegisterPrefs(PrefRegistrySimple* registry);
-
-  // Persists |dm_token| on the device. Overwrites any previous value. Signals
-  // completion via |callback|, passing true if the operation succeeded. Fails
-  // if another operation is running (store or retrieve).
-  void StoreDMToken(const std::string& dm_token,
-                    StoreCallback callback) override;
-
-  // Loads DM token from the local state and decrypts it. Fires callback on
-  // completion. Empty |dm_token| means error. Calls |callback| with empty token
-  // if store operation is running.
-  void RetrieveDMToken(RetrieveCallback callback) override;
-
- private:
-  enum class SaltState {
-    // Pending system salt.
-    LOADING,
-    // Failed to load system salt.
-    ERROR,
-    // System salt is loaded.
-    LOADED,
-  };
-
-  // Callback for SystemSaltRetrieveter.
-  void OnSystemSaltReceived(const std::string& system_salt);
-
-  // Encrypts DM token using system salt and stores it into the local state.
-  void EncryptAndStoreToken();
-
-  // Callback waiting for DM token to be encrypted.
-  void OnTokenEncrypted(const std::string& encrypted_dm_token);
-
-  // Loads encrypted DM token from the local state and decrypts it using system
-  // salt.
-  void LoadAndDecryptToken();
-
-  // Fires StoreCallback (if exists) with the status.
-  void FlushStoreTokenCallback(bool status);
-
-  // Fires RetrieveCallbacks (if exists) with |dm_token|.
-  void FlushRetrieveTokenCallback(const std::string& dm_token);
-
-  raw_ptr<PrefService> local_state_;
-  SaltState state_ = SaltState::LOADING;
-  std::string system_salt_;
-  // Stored |dm_token| while waiting for system salt.
-  std::string dm_token_;
-  StoreCallback store_callback_;
-  std::vector<RetrieveCallback> retrieve_callbacks_;
-  base::WeakPtrFactory<DMTokenStorage> weak_ptr_factory_{this};
-};
-
-}  // namespace policy
-
-#endif  // CHROME_BROWSER_ASH_POLICY_CORE_DM_TOKEN_STORAGE_H_
diff --git a/chrome/browser/ash/policy/core/dm_token_storage_unittest.cc b/chrome/browser/ash/policy/core/dm_token_storage_unittest.cc
deleted file mode 100644
index bf4a6675..0000000
--- a/chrome/browser/ash/policy/core/dm_token_storage_unittest.cc
+++ /dev/null
@@ -1,265 +0,0 @@
-// Copyright 2016 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/policy/core/dm_token_storage.h"
-
-#include <memory>
-
-#include "base/functional/bind.h"
-#include "base/functional/callback.h"
-#include "base/run_loop.h"
-#include "base/test/test_future.h"
-#include "chrome/browser/ash/settings/token_encryptor.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/test/base/scoped_testing_local_state.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "chromeos/ash/components/cryptohome/system_salt_getter.h"
-#include "chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.h"
-#include "content/public/test/browser_task_environment.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-
-namespace policy {
-namespace {
-
-using ::ash::FakeCryptohomeMiscClient;
-using ::base::test::TestFuture;
-
-}  // namespace
-
-class DMTokenStorageTest : public testing::Test {
- public:
-  DMTokenStorageTest()
-      : scoped_testing_local_state_(TestingBrowserProcess::GetGlobal()) {}
-  ~DMTokenStorageTest() override {}
-
-  std::string GetStubSaltAsString() {
-    std::vector<uint8_t> bytes = FakeCryptohomeMiscClient::GetStubSystemSalt();
-    return std::string(bytes.begin(), bytes.end());
-  }
-
-  void SetSaltPending() {
-    // Clear the cached salt.
-    ash::SystemSaltGetter::Shutdown();
-    FakeCryptohomeMiscClient::Get()->set_system_salt(std::vector<uint8_t>());
-    FakeCryptohomeMiscClient::Get()->SetServiceIsAvailable(false);
-    ash::SystemSaltGetter::Initialize();
-  }
-
-  void SetSaltAvailable() {
-    FakeCryptohomeMiscClient::Get()->set_system_salt(
-        FakeCryptohomeMiscClient::GetStubSystemSalt());
-    FakeCryptohomeMiscClient::Get()->SetServiceIsAvailable(true);
-  }
-
-  void SetSaltError() {
-    FakeCryptohomeMiscClient::Get()->set_system_salt(std::vector<uint8_t>());
-    FakeCryptohomeMiscClient::Get()->SetServiceIsAvailable(true);
-  }
-
-  void SetUp() override {
-    ash::CryptohomeMiscClient::InitializeFake();
-    SetSaltAvailable();
-
-    ash::SystemSaltGetter::Initialize();
-  }
-
-  void TearDown() override {
-    dm_token_storage_.reset();
-    ash::SystemSaltGetter::Shutdown();
-    ash::CryptohomeMiscClient::Shutdown();
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void CreateDMStorage() {
-    dm_token_storage_ =
-        std::make_unique<DMTokenStorage>(scoped_testing_local_state_.Get());
-  }
-
-  void StoreDMToken() {
-    TestFuture<bool> store_result_future;
-    dm_token_storage_->StoreDMToken("test-token",
-                                    store_result_future.GetCallback());
-    EXPECT_TRUE(store_result_future.Get());
-    EXPECT_TRUE(scoped_testing_local_state_.Get()
-                    ->GetString(prefs::kDeviceDMTokenV1)
-                    .empty());
-    EXPECT_FALSE(scoped_testing_local_state_.Get()
-                     ->GetString(prefs::kDeviceDMTokenV2)
-                     .empty());
-  }
-
-  void StoreV1Token(const std::string& token) {
-    ash::CryptohomeTokenEncryptor encryptor(GetStubSaltAsString());
-    scoped_testing_local_state_.Get()->SetString(
-        prefs::kDeviceDMTokenV1, encryptor.WeakEncryptWithSystemSalt(token));
-  }
-
-  void StoreV2Token(const std::string& token) {
-    ash::CryptohomeTokenEncryptor encryptor(GetStubSaltAsString());
-    scoped_testing_local_state_.Get()->SetString(
-        prefs::kDeviceDMTokenV2, encryptor.EncryptWithSystemSalt(token));
-  }
-
-  content::BrowserTaskEnvironment task_environment_;
-  ScopedTestingLocalState scoped_testing_local_state_;
-  std::unique_ptr<DMTokenStorage> dm_token_storage_;
-};
-
-TEST_F(DMTokenStorageTest, SaveEncryptedToken) {
-  CreateDMStorage();
-  StoreDMToken();
-
-  TestFuture<std::string> token_future1;
-  dm_token_storage_->RetrieveDMToken(
-      token_future1.GetCallback<const std::string&>());
-  EXPECT_EQ(token_future1.Get(), "test-token");
-
-  // Reload shouldn't change the token.
-  CreateDMStorage();
-  TestFuture<std::string> token_future2;
-  dm_token_storage_->RetrieveDMToken(
-      token_future2.GetCallback<const std::string&>());
-  EXPECT_EQ(token_future2.Get(), "test-token");
-
-  // Subsequent retrieving DM token should succeed.
-  TestFuture<std::string> token_future3;
-  dm_token_storage_->RetrieveDMToken(
-      token_future3.GetCallback<const std::string&>());
-  EXPECT_EQ(token_future3.Get(), "test-token");
-}
-
-TEST_F(DMTokenStorageTest, RetrieveV1Token) {
-  StoreV1Token("test-token");
-  CreateDMStorage();
-
-  TestFuture<std::string> token_future;
-  dm_token_storage_->RetrieveDMToken(
-      token_future.GetCallback<const std::string&>());
-  EXPECT_EQ(token_future.Get(), "test-token");
-}
-
-TEST_F(DMTokenStorageTest, RetrieveV2Token) {
-  StoreV2Token("test-token");
-  CreateDMStorage();
-
-  TestFuture<std::string> token_future;
-  dm_token_storage_->RetrieveDMToken(
-      token_future.GetCallback<const std::string&>());
-  EXPECT_EQ(token_future.Get(), "test-token");
-}
-
-TEST_F(DMTokenStorageTest, RetrievePrefersV2Token) {
-  StoreV1Token("test-token-v1");
-  StoreV2Token("test-token-v2");
-  CreateDMStorage();
-
-  TestFuture<std::string> token_future;
-  dm_token_storage_->RetrieveDMToken(
-      token_future.GetCallback<const std::string&>());
-  EXPECT_EQ(token_future.Get(), "test-token-v2");
-}
-
-TEST_F(DMTokenStorageTest, RetrieveEncryptedTokenWithPendingSalt) {
-  CreateDMStorage();
-  StoreDMToken();
-
-  SetSaltPending();
-  CreateDMStorage();
-
-  TestFuture<std::string> token_future;
-  dm_token_storage_->RetrieveDMToken(
-      token_future.GetCallback<const std::string&>());
-  SetSaltAvailable();
-  EXPECT_EQ(token_future.Get(), "test-token");
-}
-
-TEST_F(DMTokenStorageTest, StoreEncryptedTokenWithPendingSalt) {
-  SetSaltPending();
-  CreateDMStorage();
-
-  TestFuture<bool> store_result_future;
-  dm_token_storage_->StoreDMToken("test-token",
-                                  store_result_future.GetCallback());
-  SetSaltAvailable();
-  EXPECT_TRUE(store_result_future.Get());
-}
-
-TEST_F(DMTokenStorageTest, MultipleRetrieveTokenCalls) {
-  CreateDMStorage();
-  StoreDMToken();
-
-  std::vector<TestFuture<std::string>> token_futures(3);
-  for (TestFuture<std::string>& token_future : token_futures) {
-    dm_token_storage_->RetrieveDMToken(
-        token_future.GetCallback<const std::string&>());
-  }
-  for (TestFuture<std::string>& token_future : token_futures) {
-    EXPECT_EQ(token_future.Get(), "test-token");
-  }
-}
-
-TEST_F(DMTokenStorageTest, StoreWithSaltError) {
-  SetSaltError();
-  CreateDMStorage();
-
-  TestFuture<bool> store_result_future;
-  dm_token_storage_->StoreDMToken("test-token",
-                                  store_result_future.GetCallback());
-  EXPECT_FALSE(store_result_future.Get());
-}
-
-TEST_F(DMTokenStorageTest, RetrieveWithSaltError) {
-  CreateDMStorage();
-  StoreDMToken();
-  SetSaltPending();
-  CreateDMStorage();
-
-  TestFuture<std::string> token_future;
-  dm_token_storage_->RetrieveDMToken(
-      token_future.GetCallback<const std::string&>());
-  SetSaltError();
-  EXPECT_EQ(token_future.Get(), "");
-}
-
-TEST_F(DMTokenStorageTest, RetrieveWithNoToken) {
-  CreateDMStorage();
-
-  TestFuture<std::string> token_future;
-  dm_token_storage_->RetrieveDMToken(
-      token_future.GetCallback<const std::string&>());
-  EXPECT_EQ(token_future.Get(), "");
-}
-
-TEST_F(DMTokenStorageTest, RetrieveFailIfStoreRunning) {
-  SetSaltPending();
-  CreateDMStorage();
-
-  TestFuture<bool> store_result_future;
-  dm_token_storage_->StoreDMToken("test-token",
-                                  store_result_future.GetCallback());
-  TestFuture<std::string> token_future;
-  dm_token_storage_->RetrieveDMToken(
-      token_future.GetCallback<const std::string&>());
-  SetSaltAvailable();
-  EXPECT_TRUE(store_result_future.Get());
-  EXPECT_EQ(token_future.Get(), "");
-}
-
-TEST_F(DMTokenStorageTest, StoreFailIfAnotherStoreRunning) {
-  SetSaltPending();
-  CreateDMStorage();
-
-  TestFuture<bool> first_store_result_future;
-  TestFuture<bool> later_store_result_future;
-  dm_token_storage_->StoreDMToken("test-token",
-                                  first_store_result_future.GetCallback());
-  dm_token_storage_->StoreDMToken("test-token",
-                                  later_store_result_future.GetCallback());
-  SetSaltAvailable();
-  EXPECT_TRUE(first_store_result_future.Get());
-  EXPECT_FALSE(later_store_result_future.Get());
-}
-
-}  // namespace policy
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index bcbad496..22cb825 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -405,7 +405,6 @@
 #include "chrome/browser/ash/plugin_vm/plugin_vm_pref_names.h"
 #include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
 #include "chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.h"
-#include "chrome/browser/ash/policy/core/dm_token_storage.h"
 #include "chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.h"
 #include "chrome/browser/ash/policy/enrollment/enrollment_requisition_manager.h"
 #include "chrome/browser/ash/policy/external_data/handlers/device_wallpaper_image_external_data_handler.h"
@@ -1049,6 +1048,12 @@
 constexpr char kSafeBrowsingEsbOptInWithFriendlierSettings[] =
     "safebrowsing.esb_opt_in_with_friendlier_settings";
 
+// Deprecated 08/2024.
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+constexpr char kDeviceDMTokenV1[] = "device_dm_token";
+constexpr char kDeviceDMTokenV2[] = "device_dm_token_v2";
+#endif
+
 // Register local state used only for migration (clearing or moving to a new
 // key).
 void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) {
@@ -1131,6 +1136,12 @@
   // Deprecated 07/2024.
   registry->RegisterStringPref(kFirstRunStudyGroup, std::string());
 #endif
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  // Deprecated 08/2024.
+  registry->RegisterStringPref(kDeviceDMTokenV1, std::string());
+  registry->RegisterStringPref(kDeviceDMTokenV2, std::string());
+#endif
 }
 
 // Register prefs used only for migration (clearing or moving to a new key).
@@ -1678,7 +1689,6 @@
       registry);
   policy::DeviceStatusCollector::RegisterPrefs(registry);
   policy::DeviceWallpaperImageExternalDataHandler::RegisterPrefs(registry);
-  policy::DMTokenStorage::RegisterPrefs(registry);
   policy::EnrollmentRequisitionManager::RegisterPrefs(registry);
   policy::EuiccStatusUploader::RegisterLocalStatePrefs(registry);
   policy::MinimumVersionPolicyHandler::RegisterPrefs(registry);
@@ -2349,6 +2359,12 @@
   local_state->ClearPref(kFirstRunStudyGroup);
 #endif
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  // Added 08/2024.
+  local_state->ClearPref(kDeviceDMTokenV1);
+  local_state->ClearPref(kDeviceDMTokenV2);
+#endif
+
   // Please don't delete the following line. It is used by PRESUBMIT.py.
   // END_MIGRATE_OBSOLETE_LOCAL_STATE_PREFS
 
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 25817a57..4d48d017 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -2958,12 +2958,6 @@
 // Whether the user may exit enrollment.
 inline constexpr char kDeviceEnrollmentCanExit[] = "enrollment.can_exit";
 
-// DM token fetched from the DM server during enrollment. Stored for Active
-// Directory devices only. The versions are used to distinguish different token
-// formats.
-inline constexpr char kDeviceDMTokenV1[] = "device_dm_token";
-inline constexpr char kDeviceDMTokenV2[] = "device_dm_token_v2";
-
 // A string pref with initial locale set in VPD or manifest.
 inline constexpr char kInitialLocale[] = "intl.initial_locale";