Extract PowerManagerClient from DBusThreadManager

Tests can now use [Fake]PowerManagerClient::Get() instead of creating
their own FakePowerManagerClient. The presence or absence of the system
bus is used to determine whether to make FakePowerManagerClient or
PowerManagerClientImpl.

Many tests are updated. Most of the more substantive-looking changes
are just refactoring code to do more setup/teardown in SetUp and
TearDown instead of in ctor/dtor, which is necessary since we're
enforcing that PowerManagerClient is a singleton.

Bug: 647367,644348

Change-Id: I42da97755ae839d7c98bcae2e5d02c7341c38580
Reviewed-on: https://chromium-review.googlesource.com/c/1484852
Commit-Queue: Evan Stade <estade@chromium.org>
Reviewed-by: Karan Bhatia <karandeepb@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Sergey Poromov <poromov@chromium.org>
Reviewed-by: Steven Bennetts <stevenjb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#637139}
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc
index 37d25d9..a4e9835 100644
--- a/ash/accelerators/accelerator_controller.cc
+++ b/ash/accelerators/accelerator_controller.cc
@@ -725,7 +725,7 @@
 
 void HandleSuspend() {
   base::RecordAction(UserMetricsAction("Accel_Suspend"));
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestSuspend();
+  chromeos::PowerManagerClient::Get()->RequestSuspend();
 }
 
 bool CanHandleCycleUser() {
diff --git a/ash/accessibility/accessibility_controller_unittest.cc b/ash/accessibility/accessibility_controller_unittest.cc
index 03513e8..2486a75 100644
--- a/ash/accessibility/accessibility_controller_unittest.cc
+++ b/ash/accessibility/accessibility_controller_unittest.cc
@@ -19,7 +19,6 @@
 #include "base/macros.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "components/prefs/pref_service.h"
 #include "ui/keyboard/keyboard_util.h"
@@ -43,32 +42,7 @@
   DISALLOW_COPY_AND_ASSIGN(TestAccessibilityObserver);
 };
 
-class AccessibilityControllerTest : public AshTestBase {
- public:
-  AccessibilityControllerTest() = default;
-  ~AccessibilityControllerTest() override = default;
-
-  void SetUp() override {
-    auto power_manager_client =
-        std::make_unique<chromeos::FakePowerManagerClient>();
-    power_manager_client_ = power_manager_client.get();
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::move(power_manager_client));
-
-    AshTestBase::SetUp();
-  }
-  void TearDown() override {
-    AshTestBase::TearDown();
-    chromeos::DBusThreadManager::Shutdown();
-  }
-
- protected:
-  // Owned by chromeos::DBusThreadManager.
-  chromeos::FakePowerManagerClient* power_manager_client_ = nullptr;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityControllerTest);
-};
+using AccessibilityControllerTest = AshTestBase;
 
 TEST_F(AccessibilityControllerTest, PrefsAreRegistered) {
   PrefService* prefs =
@@ -354,15 +328,17 @@
 }
 
 TEST_F(AccessibilityControllerTest, SetDarkenScreen) {
-  ASSERT_FALSE(power_manager_client_->backlights_forced_off());
+  ASSERT_FALSE(
+      chromeos::FakePowerManagerClient::Get()->backlights_forced_off());
 
   AccessibilityController* controller =
       Shell::Get()->accessibility_controller();
   controller->SetDarkenScreen(true);
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(chromeos::FakePowerManagerClient::Get()->backlights_forced_off());
 
   controller->SetDarkenScreen(false);
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(
+      chromeos::FakePowerManagerClient::Get()->backlights_forced_off());
 }
 
 TEST_F(AccessibilityControllerTest, ShowNotificationOnSpokenFeedback) {
diff --git a/ash/ash_service.cc b/ash/ash_service.cc
index 30c5b58..b00ba5d 100644
--- a/ash/ash_service.cc
+++ b/ash/ash_service.cc
@@ -88,6 +88,7 @@
   device::BluetoothAdapterFactory::Shutdown();
   bluez::BluezDBusManager::Shutdown();
   chromeos::PowerPolicyController::Shutdown();
+  chromeos::PowerManagerClient::Shutdown();
   chromeos::DBusThreadManager::Shutdown();
 
   // |gpu_host_| must be completely destroyed before Env as GpuHost depends on
@@ -155,8 +156,9 @@
   dbus::Bus* bus = chromeos::DBusThreadManager::Get()->GetSystemBus();
   chromeos::SystemClockClient::Initialize(bus);
 
+  chromeos::PowerManagerClient::Initialize(bus);
   chromeos::PowerPolicyController::Initialize(
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+      chromeos::PowerManagerClient::Get());
 
   // TODO(ortuno): Eliminate BluezDBusManager code from Ash, crbug.com/830893.
   bluez::BluezDBusManager::Initialize();
diff --git a/ash/detachable_base/detachable_base_handler.cc b/ash/detachable_base/detachable_base_handler.cc
index ed1a526..a1ad7d31 100644
--- a/ash/detachable_base/detachable_base_handler.cc
+++ b/ash/detachable_base/detachable_base_handler.cc
@@ -57,7 +57,7 @@
 
   hammerd_observer_.Add(chromeos::DBusThreadManager::Get()->GetHammerdClient());
   chromeos::PowerManagerClient* power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   power_manager_observer_.Add(power_manager_client);
 
   power_manager_client->GetSwitchStates(
diff --git a/ash/detachable_base/detachable_base_handler_unittest.cc b/ash/detachable_base/detachable_base_handler_unittest.cc
index 138d586..b97cdb3 100644
--- a/ash/detachable_base/detachable_base_handler_unittest.cc
+++ b/ash/detachable_base/detachable_base_handler_unittest.cc
@@ -93,12 +93,9 @@
     hammerd_client_ = hammerd_client.get();
     dbus_setter->SetHammerdClient(std::move(hammerd_client));
 
-    auto power_manager_client =
-        std::make_unique<chromeos::FakePowerManagerClient>();
-    power_manager_client->SetTabletMode(
+    chromeos::PowerManagerClient::Initialize();
+    chromeos::FakePowerManagerClient::Get()->SetTabletMode(
         chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
-    power_manager_client_ = power_manager_client.get();
-    dbus_setter->SetPowerManagerClient(std::move(power_manager_client));
 
     default_user_ = CreateUser("user_1@foo.bar", "111111", UserType::kNormal);
 
@@ -107,20 +104,21 @@
     handler_->OnLocalStatePrefServiceInitialized(&local_state_);
     handler_->AddObserver(&detachable_base_observer_);
   }
+
   void TearDown() override {
     handler_->RemoveObserver(&detachable_base_observer_);
     handler_.reset();
     hammerd_client_ = nullptr;
-    power_manager_client_ = nullptr;
+    chromeos::PowerManagerClient::Shutdown();
     chromeos::DBusThreadManager::Shutdown();
   }
 
  protected:
   // Simulates system events associated with the detachable base being switched.
   void ChangePairedBase(const std::vector<uint8_t>& base_id) {
-    power_manager_client_->SetTabletMode(
+    chromeos::FakePowerManagerClient::Get()->SetTabletMode(
         chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
-    power_manager_client_->SetTabletMode(
+    chromeos::FakePowerManagerClient::Get()->SetTabletMode(
         chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
     detachable_base_observer_.reset_pairing_status_changed_count();
 
@@ -146,7 +144,6 @@
 
   // Owned by DBusThreadManager:
   chromeos::FakeHammerdClient* hammerd_client_ = nullptr;
-  chromeos::FakePowerManagerClient* power_manager_client_ = nullptr;
 
   TestBaseObserver detachable_base_observer_;
 
@@ -172,11 +169,11 @@
 }
 
 TEST_F(DetachableBaseHandlerTest, TabletModeOnOnStartup) {
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
   RestartHandler();
 
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
   hammerd_client_->FirePairChallengeSucceededSignal({0x01, 0x02, 0x03, 0x04});
 
@@ -206,7 +203,7 @@
   detachable_base_observer_.reset_pairing_status_changed_count();
 
   // Assume the base has been detached when the device switches to tablet mode.
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
   EXPECT_EQ(1, detachable_base_observer_.pairing_status_changed_count());
   EXPECT_EQ(DetachableBasePairingStatus::kNone, handler_->GetPairingStatus());
@@ -215,7 +212,7 @@
 
   // When the device exits tablet mode again, the base should not be reported
   // as paired until it's finished pairing.
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
   EXPECT_EQ(DetachableBasePairingStatus::kNone, handler_->GetPairingStatus());
   EXPECT_FALSE(handler_->PairedBaseMatchesLastUsedByUser(*default_user_));
@@ -242,7 +239,7 @@
   detachable_base_observer_.reset_pairing_status_changed_count();
 
   // Assume the base has been detached when the device switches to tablet mode.
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
   EXPECT_EQ(1, detachable_base_observer_.pairing_status_changed_count());
   EXPECT_EQ(DetachableBasePairingStatus::kNone, handler_->GetPairingStatus());
@@ -264,7 +261,7 @@
   detachable_base_observer_.reset_pairing_status_changed_count();
 
   // Assume the base has been detached when the device switches to tablet mode.
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
   EXPECT_EQ(1, detachable_base_observer_.pairing_status_changed_count());
   EXPECT_EQ(DetachableBasePairingStatus::kNone, handler_->GetPairingStatus());
@@ -334,7 +331,7 @@
 
 TEST_F(DetachableBaseHandlerTest, TabletModeTurnedOnDuringHandlerInit) {
   hammerd_client_->FirePairChallengeSucceededSignal({0x01, 0x02, 0x03, 0x04});
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
 
   // Run loop so the callback for getting the initial power manager state gets
@@ -347,7 +344,7 @@
 }
 
 TEST_F(DetachableBaseHandlerTest, DetachableBaseChangeDetection) {
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
   // Run loop so the callback for getting the initial power manager state gets
   // run.
@@ -468,9 +465,9 @@
 
   // Switch to non-trusted base, and verify it's reported as such regardless
   // of whether the user had previously used a detachable base.
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
   detachable_base_observer_.reset_pairing_status_changed_count();
 
@@ -497,9 +494,9 @@
 
   // Switch to an invalid base, and verify it's reported as such regardless
   // of whether the user had previously used a base.
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
   detachable_base_observer_.reset_pairing_status_changed_count();
 
@@ -651,7 +648,7 @@
   EXPECT_EQ(1, detachable_base_observer_.update_required_changed_count());
   EXPECT_TRUE(detachable_base_observer_.requires_update());
 
-  power_manager_client_->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
   EXPECT_EQ(2, detachable_base_observer_.update_required_changed_count());
   EXPECT_FALSE(detachable_base_observer_.requires_update());
diff --git a/ash/detachable_base/detachable_base_notification_controller_unittest.cc b/ash/detachable_base/detachable_base_notification_controller_unittest.cc
index b5c78da..af48a9e 100644
--- a/ash/detachable_base/detachable_base_notification_controller_unittest.cc
+++ b/ash/detachable_base/detachable_base_notification_controller_unittest.cc
@@ -14,7 +14,6 @@
 #include "ash/test/ash_test_base.h"
 #include "base/macros.h"
 #include "base/time/time.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "components/account_id/account_id.h"
 #include "components/user_manager/user_type.h"
@@ -41,15 +40,10 @@
   void SetUp() override {
     AshTestBase::SetUp();
 
-    GetPowerManagerClient()->SetTabletMode(
+    chromeos::FakePowerManagerClient::Get()->SetTabletMode(
         chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
   }
 
-  chromeos::FakePowerManagerClient* GetPowerManagerClient() {
-    return static_cast<chromeos::FakePowerManagerClient*>(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
-  }
-
   bool IsBaseChangedNotificationVisible() {
     return message_center::MessageCenter::Get()->FindVisibleNotificationById(
         DetachableBaseNotificationController::kBaseChangedNotificationId);
@@ -244,7 +238,7 @@
   EXPECT_TRUE(IsBaseRequiresUpdateNotificationVisible());
 
   // The notification should be removed when the base gets detached.
-  GetPowerManagerClient()->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
   EXPECT_FALSE(IsBaseRequiresUpdateNotificationVisible());
 }
@@ -261,7 +255,7 @@
   EXPECT_TRUE(IsBaseRequiresUpdateNotificationVisible());
 
   // The notification should be removed when the base gets detached.
-  GetPowerManagerClient()->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
   EXPECT_FALSE(IsBaseRequiresUpdateNotificationVisible());
 }
@@ -276,7 +270,7 @@
   EXPECT_TRUE(IsBaseRequiresUpdateNotificationVisible());
 
   // The notification should be removed when the base gets detached.
-  GetPowerManagerClient()->SetTabletMode(
+  chromeos::FakePowerManagerClient::Get()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks());
   EXPECT_FALSE(IsBaseRequiresUpdateNotificationVisible());
 }
diff --git a/ash/display/projecting_observer.cc b/ash/display/projecting_observer.cc
index 80444b7..a27952a 100644
--- a/ash/display/projecting_observer.cc
+++ b/ash/display/projecting_observer.cc
@@ -63,12 +63,7 @@
   bool projecting =
       has_internal_output_ && (output_count_ + casting_session_count_ > 1);
 
-  chromeos::PowerManagerClient* power_manager_client =
-      power_manager_client_for_test_
-          ? power_manager_client_for_test_
-          : chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
-  if (power_manager_client)
-    power_manager_client->SetIsProjecting(projecting);
+  chromeos::PowerManagerClient::Get()->SetIsProjecting(projecting);
 }
 
 }  // namespace ash
diff --git a/ash/display/projecting_observer.h b/ash/display/projecting_observer.h
index 28b1bad..12badcc 100644
--- a/ash/display/projecting_observer.h
+++ b/ash/display/projecting_observer.h
@@ -10,10 +10,6 @@
 #include "base/macros.h"
 #include "ui/display/manager/display_configurator.h"
 
-namespace chromeos {
-class PowerManagerClient;
-}
-
 namespace ash {
 
 class ASH_EXPORT ProjectingObserver
@@ -35,11 +31,6 @@
  private:
   friend class ProjectingObserverTest;
 
-  void set_power_manager_client_for_test(
-      chromeos::PowerManagerClient* power_manager_client) {
-    power_manager_client_for_test_ = power_manager_client;
-  }
-
   // Sends the current projecting state to power manager.
   void SetIsProjecting();
 
@@ -55,9 +46,6 @@
   // Number of outstanding casting sessions.
   int casting_session_count_ = 0;
 
-  // Weak pointer to the DBusClient PowerManagerClient for testing;
-  chromeos::PowerManagerClient* power_manager_client_for_test_ = nullptr;
-
   DISALLOW_COPY_AND_ASSIGN(ProjectingObserver);
 };
 
diff --git a/ash/display/projecting_observer_unittest.cc b/ash/display/projecting_observer_unittest.cc
index 6bab544..bdae9f4 100644
--- a/ash/display/projecting_observer_unittest.cc
+++ b/ash/display/projecting_observer_unittest.cc
@@ -43,15 +43,25 @@
 
 class ProjectingObserverTest : public testing::Test {
  public:
-  ProjectingObserverTest() {
+  ProjectingObserverTest() = default;
+
+  void SetUp() override {
+    chromeos::PowerManagerClient::Initialize();
     observer_ = std::make_unique<ProjectingObserver>(nullptr);
-    observer_->set_power_manager_client_for_test(&fake_power_client_);
+  }
+
+  void TearDown() override {
+    observer_.reset();
+    chromeos::PowerManagerClient::Shutdown();
   }
 
   ~ProjectingObserverTest() override = default;
 
  protected:
-  chromeos::FakePowerManagerClient fake_power_client_;
+  chromeos::FakePowerManagerClient* power_client() {
+    return chromeos::FakePowerManagerClient::Get();
+  }
+
   std::unique_ptr<ProjectingObserver> observer_;
 
  private:
@@ -62,8 +72,8 @@
   std::vector<std::unique_ptr<display::DisplaySnapshot>> displays;
   observer_->OnDisplayModeChanged(GetPointers(displays));
 
-  EXPECT_EQ(1, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_FALSE(fake_power_client_.is_projecting());
+  EXPECT_EQ(1, power_client()->num_set_is_projecting_calls());
+  EXPECT_FALSE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest, CheckWithoutInternalDisplay) {
@@ -71,8 +81,8 @@
   displays.push_back(CreateVGASnapshot());
   observer_->OnDisplayModeChanged(GetPointers(displays));
 
-  EXPECT_EQ(1, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_FALSE(fake_power_client_.is_projecting());
+  EXPECT_EQ(1, power_client()->num_set_is_projecting_calls());
+  EXPECT_FALSE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest, CheckWithInternalDisplay) {
@@ -80,8 +90,8 @@
   displays.push_back(CreateInternalSnapshot());
   observer_->OnDisplayModeChanged(GetPointers(displays));
 
-  EXPECT_EQ(1, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_FALSE(fake_power_client_.is_projecting());
+  EXPECT_EQ(1, power_client()->num_set_is_projecting_calls());
+  EXPECT_FALSE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest, CheckWithTwoVGADisplays) {
@@ -90,9 +100,9 @@
   displays.push_back(CreateVGASnapshot());
   observer_->OnDisplayModeChanged(GetPointers(displays));
 
-  EXPECT_EQ(1, fake_power_client_.num_set_is_projecting_calls());
+  EXPECT_EQ(1, power_client()->num_set_is_projecting_calls());
   // We need at least 1 internal display to set projecting to on.
-  EXPECT_FALSE(fake_power_client_.is_projecting());
+  EXPECT_FALSE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest, CheckWithInternalAndVGADisplays) {
@@ -101,8 +111,8 @@
   displays.push_back(CreateVGASnapshot());
   observer_->OnDisplayModeChanged(GetPointers(displays));
 
-  EXPECT_EQ(1, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_TRUE(fake_power_client_.is_projecting());
+  EXPECT_EQ(1, power_client()->num_set_is_projecting_calls());
+  EXPECT_TRUE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest, CheckWithVGADisplayAndOneCastingSession) {
@@ -112,9 +122,9 @@
 
   observer_->OnCastingSessionStartedOrStopped(true);
 
-  EXPECT_EQ(2, fake_power_client_.num_set_is_projecting_calls());
+  EXPECT_EQ(2, power_client()->num_set_is_projecting_calls());
   // Need at least one internal display to set projecting state to |true|.
-  EXPECT_FALSE(fake_power_client_.is_projecting());
+  EXPECT_FALSE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest, CheckWithInternalDisplayAndOneCastingSession) {
@@ -124,8 +134,8 @@
 
   observer_->OnCastingSessionStartedOrStopped(true);
 
-  EXPECT_EQ(2, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_TRUE(fake_power_client_.is_projecting());
+  EXPECT_EQ(2, power_client()->num_set_is_projecting_calls());
+  EXPECT_TRUE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest, CheckProjectingAfterClosingACastingSession) {
@@ -136,13 +146,13 @@
   observer_->OnCastingSessionStartedOrStopped(true);
   observer_->OnCastingSessionStartedOrStopped(true);
 
-  EXPECT_EQ(3, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_TRUE(fake_power_client_.is_projecting());
+  EXPECT_EQ(3, power_client()->num_set_is_projecting_calls());
+  EXPECT_TRUE(power_client()->is_projecting());
 
   observer_->OnCastingSessionStartedOrStopped(false);
 
-  EXPECT_EQ(4, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_TRUE(fake_power_client_.is_projecting());
+  EXPECT_EQ(4, power_client()->num_set_is_projecting_calls());
+  EXPECT_TRUE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest,
@@ -154,8 +164,8 @@
   observer_->OnCastingSessionStartedOrStopped(true);
   observer_->OnCastingSessionStartedOrStopped(false);
 
-  EXPECT_EQ(3, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_FALSE(fake_power_client_.is_projecting());
+  EXPECT_EQ(3, power_client()->num_set_is_projecting_calls());
+  EXPECT_FALSE(power_client()->is_projecting());
 }
 
 TEST_F(ProjectingObserverTest,
@@ -169,8 +179,8 @@
   displays.erase(displays.begin() + 1);
   observer_->OnDisplayModeChanged(GetPointers(displays));
 
-  EXPECT_EQ(2, fake_power_client_.num_set_is_projecting_calls());
-  EXPECT_FALSE(fake_power_client_.is_projecting());
+  EXPECT_EQ(2, power_client()->num_set_is_projecting_calls());
+  EXPECT_FALSE(power_client()->is_projecting());
 }
 
 }  // namespace ash
diff --git a/ash/lock_screen_action/lock_screen_note_display_state_handler_unittest.cc b/ash/lock_screen_action/lock_screen_note_display_state_handler_unittest.cc
index 82b0827..398f072 100644
--- a/ash/lock_screen_action/lock_screen_note_display_state_handler_unittest.cc
+++ b/ash/lock_screen_action/lock_screen_note_display_state_handler_unittest.cc
@@ -22,7 +22,6 @@
 #include "base/command_line.h"
 #include "base/run_loop.h"
 #include "base/test/simple_test_tick_clock.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "services/ws/public/cpp/input_devices/input_device_client_test_api.h"
@@ -36,9 +35,8 @@
 
 class TestPowerManagerObserver : public chromeos::PowerManagerClient::Observer {
  public:
-  explicit TestPowerManagerObserver(
-      chromeos::FakePowerManagerClient* power_manager)
-      : power_manager_(power_manager), scoped_observer_(this) {
+  TestPowerManagerObserver()
+      : power_manager_(chromeos::FakePowerManagerClient::Get()) {
     scoped_observer_.Add(power_manager_);
     power_manager_->set_user_activity_callback(base::BindRepeating(
         &TestPowerManagerObserver::OnUserActivity, base::Unretained(this)));
@@ -72,7 +70,7 @@
 
   ScopedObserver<chromeos::PowerManagerClient,
                  chromeos::PowerManagerClient::Observer>
-      scoped_observer_;
+      scoped_observer_{this};
 
   DISALLOW_COPY_AND_ASSIGN(TestPowerManagerObserver);
 };
@@ -89,20 +87,13 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kAshEnableTabletMode);
 
-    auto power_manager_client =
-        std::make_unique<chromeos::FakePowerManagerClient>();
-    power_manager_client_ = power_manager_client.get();
+    AshTestBase::SetUp();
 
     power_manager::SetBacklightBrightnessRequest request;
     request.set_percent(kVisibleBrightnessPercent);
-    power_manager_client_->SetScreenBrightness(request);
+    power_manager_client()->SetScreenBrightness(request);
 
-    power_manager_observer_ =
-        std::make_unique<TestPowerManagerObserver>(power_manager_client_);
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::move(power_manager_client));
-
-    AshTestBase::SetUp();
+    power_manager_observer_ = std::make_unique<TestPowerManagerObserver>();
 
     BlockUserSession(BLOCKED_BY_LOCK_SCREEN);
     InitializeTabletPowerButtonState();
@@ -122,7 +113,6 @@
   void TearDown() override {
     power_manager_observer_.reset();
     AshTestBase::TearDown();
-    chromeos::DBusThreadManager::Shutdown();
   }
 
   bool LaunchTimeoutRunning() {
@@ -147,18 +137,18 @@
   }
 
   void TurnScreenOffForUserInactivity() {
-    power_manager_client_->set_screen_brightness_percent(0);
+    power_manager_client()->set_screen_brightness_percent(0);
     power_manager::BacklightBrightnessChange change;
     change.set_percent(0.0);
     change.set_cause(power_manager::BacklightBrightnessChange_Cause_OTHER);
-    power_manager_client_->SendScreenBrightnessChanged(change);
+    power_manager_client()->SendScreenBrightnessChanged(change);
     power_manager_observer_->ClearBrightnessChanges();
   }
 
   void SimulatePowerButtonPress() {
-    power_manager_client_->SendPowerButtonEvent(true, tick_clock_.NowTicks());
+    power_manager_client()->SendPowerButtonEvent(true, tick_clock_.NowTicks());
     tick_clock_.Advance(base::TimeDelta::FromMilliseconds(10));
-    power_manager_client_->SendPowerButtonEvent(false, tick_clock_.NowTicks());
+    power_manager_client()->SendPowerButtonEvent(false, tick_clock_.NowTicks());
     base::RunLoop().RunUntilIdle();
   }
 
@@ -185,7 +175,6 @@
   }
 
  protected:
-  chromeos::FakePowerManagerClient* power_manager_client_ = nullptr;
   std::unique_ptr<TestPowerManagerObserver> power_manager_observer_;
   TestTrayActionClient tray_action_client_;
 
@@ -210,7 +199,7 @@
   devices_test_api.NotifyObserversStylusStateChanged(ui::StylusState::REMOVED);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(power_manager_observer_->brightness_changes().empty());
 
   ASSERT_TRUE(SimulateNoteLaunchStartedIfNoteActionRequested(
@@ -220,7 +209,7 @@
       mojom::TrayActionState::kActive);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(power_manager_observer_->brightness_changes().empty());
 
   ASSERT_FALSE(LaunchTimeoutRunning());
@@ -233,7 +222,7 @@
   devices_test_api.NotifyObserversStylusStateChanged(ui::StylusState::REMOVED);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({0.0}),
             power_manager_observer_->brightness_changes());
   power_manager_observer_->ClearBrightnessChanges();
@@ -245,7 +234,7 @@
       mojom::TrayActionState::kActive);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({kVisibleBrightnessPercent}),
             power_manager_observer_->brightness_changes());
 
@@ -259,7 +248,7 @@
   Shell::Get()->tray_action()->UpdateLockScreenNoteState(
       mojom::TrayActionState::kNotAvailable);
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(power_manager_observer_->brightness_changes().empty());
 
   ws::InputDeviceClientTestApi devices_test_api;
@@ -267,7 +256,7 @@
   base::RunLoop().RunUntilIdle();
 
   // Styluls eject is expected to turn the screen on due to user activity.
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({kVisibleBrightnessPercent}),
             power_manager_observer_->brightness_changes());
   power_manager_observer_->ClearBrightnessChanges();
@@ -282,7 +271,7 @@
       mojom::TrayActionState::kActive);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(power_manager_observer_->brightness_changes().empty());
 
   ASSERT_FALSE(LaunchTimeoutRunning());
@@ -295,7 +284,7 @@
   devices_test_api.NotifyObserversStylusStateChanged(ui::StylusState::REMOVED);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({0.0}),
             power_manager_observer_->brightness_changes());
   power_manager_observer_->ClearBrightnessChanges();
@@ -307,7 +296,7 @@
       mojom::TrayActionState::kAvailable);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({kVisibleBrightnessPercent}),
             power_manager_observer_->brightness_changes());
 
@@ -322,7 +311,7 @@
 TEST_F(LockScreenNoteDisplayStateHandlerTest, EjectWhileScreenForcedOff) {
   SimulatePowerButtonPress();
 
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({0.0}),
             power_manager_observer_->brightness_changes());
   power_manager_observer_->ClearBrightnessChanges();
@@ -331,7 +320,7 @@
   devices_test_api.NotifyObserversStylusStateChanged(ui::StylusState::REMOVED);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(power_manager_observer_->brightness_changes().empty());
 
   ASSERT_TRUE(SimulateNoteLaunchStartedIfNoteActionRequested(
@@ -341,7 +330,7 @@
       mojom::TrayActionState::kActive);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({kVisibleBrightnessPercent}),
             power_manager_observer_->brightness_changes());
 
@@ -358,7 +347,7 @@
   ASSERT_TRUE(SimulateNoteLaunchStartedIfNoteActionRequested(
       mojom::LockScreenNoteOrigin::kStylusEject));
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({0.0}),
             power_manager_observer_->brightness_changes());
   power_manager_observer_->ClearBrightnessChanges();
@@ -366,7 +355,7 @@
   ASSERT_TRUE(TriggerNoteLaunchTimeout());
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<double>({kVisibleBrightnessPercent}),
             power_manager_observer_->brightness_changes());
   power_manager_observer_->ClearBrightnessChanges();
@@ -374,7 +363,7 @@
   Shell::Get()->tray_action()->UpdateLockScreenNoteState(
       mojom::TrayActionState::kActive);
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(power_manager_observer_->brightness_changes().empty());
 
   ASSERT_FALSE(LaunchTimeoutRunning());
@@ -385,14 +374,14 @@
 // display configuration to off is still in progress.
 TEST_F(LockScreenNoteDisplayStateHandlerTest,
        StylusEjectWhileForcingDisplayOff) {
-  power_manager_client_
+  power_manager_client()
       ->set_enqueue_brightness_changes_on_backlights_forced_off(true);
 
   SimulatePowerButtonPress();
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(power_manager_observer_->brightness_changes().empty());
   EXPECT_EQ(1u,
-            power_manager_client_->pending_screen_brightness_changes().size());
+            power_manager_client()->pending_screen_brightness_changes().size());
 
   ws::InputDeviceClientTestApi devices_test_api;
   devices_test_api.NotifyObserversStylusStateChanged(ui::StylusState::REMOVED);
@@ -405,12 +394,12 @@
 
   // Apply screen brightness set by forcing backlights off,
   EXPECT_EQ(1u,
-            power_manager_client_->pending_screen_brightness_changes().size());
-  ASSERT_TRUE(power_manager_client_->ApplyPendingScreenBrightnessChange());
+            power_manager_client()->pending_screen_brightness_changes().size());
+  ASSERT_TRUE(power_manager_client()->ApplyPendingScreenBrightnessChange());
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(
-      power_manager_client_->pending_screen_brightness_changes().empty());
+      power_manager_client()->pending_screen_brightness_changes().empty());
   EXPECT_EQ(std::vector<double>({0.0}),
             power_manager_observer_->brightness_changes());
   power_manager_observer_->ClearBrightnessChanges();
@@ -421,8 +410,8 @@
   Shell::Get()->tray_action()->UpdateLockScreenNoteState(
       mojom::TrayActionState::kActive);
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
-  ASSERT_TRUE(power_manager_client_->ApplyPendingScreenBrightnessChange());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->ApplyPendingScreenBrightnessChange());
   EXPECT_EQ(std::vector<double>({kVisibleBrightnessPercent}),
             power_manager_observer_->brightness_changes());
 
@@ -436,7 +425,7 @@
   a11y_controller->SetClient(a11y_client.CreateInterfacePtrAndBind());
 
   SimulatePowerButtonPress();
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
 
   a11y_controller->FlushMojoForTest();
   EXPECT_EQ(mojom::AccessibilityAlert::SCREEN_OFF,
@@ -448,7 +437,7 @@
 
   ASSERT_TRUE(SimulateNoteLaunchStartedIfNoteActionRequested(
       mojom::LockScreenNoteOrigin::kStylusEject));
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 
   // Screen ON alert is delayed until the screen is turned on after lock screen
   // note launch.
diff --git a/ash/login/ui/lock_contents_view.cc b/ash/login/ui/lock_contents_view.cc
index 45730d7..36a6cfd 100644
--- a/ash/login/ui/lock_contents_view.cc
+++ b/ash/login/ui/lock_contents_view.cc
@@ -449,8 +449,7 @@
   AddChildView(auth_error_bubble_);
 
   OnLockScreenNoteStateChanged(initial_note_action_state);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
   RegisterAccelerators();
 }
 
@@ -468,8 +467,7 @@
     Shell::Get()->metrics()->login_metrics_recorder()->RecordNumLoginAttempts(
         unlock_attempt_, false /*success*/);
   }
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void LockContentsView::FocusNextUser() {
diff --git a/ash/login/ui/lock_contents_view_unittest.cc b/ash/login/ui/lock_contents_view_unittest.cc
index c6a23afe..06a6fed 100644
--- a/ash/login/ui/lock_contents_view_unittest.cc
+++ b/ash/login/ui/lock_contents_view_unittest.cc
@@ -35,7 +35,6 @@
 #include "ash/tray_action/tray_action.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/simple_test_tick_clock.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -1880,15 +1879,7 @@
   EXPECT_TRUE(HasFocusInAnyChildView(status_area));
 }
 
-class LockContentsViewPowerManagerUnitTest : public LockContentsViewUnitTest {
- public:
-  void SetUp() override {
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::make_unique<chromeos::FakePowerManagerClient>());
-
-    LockContentsViewUnitTest::SetUp();
-  }
-};
+using LockContentsViewPowerManagerUnitTest = LockContentsViewUnitTest;
 
 // Ensures that a PowerManagerClient::Observer is added on LockScreen::Show()
 // and removed on LockScreen::Destroy().
@@ -1897,16 +1888,12 @@
   ASSERT_NO_FATAL_FAILURE(ShowLockScreen());
   LockContentsView* contents =
       LockScreen::TestApi(LockScreen::Get()).contents_view();
-  EXPECT_TRUE(
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->HasObserver(
-          contents));
+  EXPECT_TRUE(chromeos::PowerManagerClient::Get()->HasObserver(contents));
 
   LockScreen::Get()->Destroy();
   // Wait for LockScreen to be fully destroyed
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->HasObserver(
-          contents));
+  EXPECT_FALSE(chromeos::PowerManagerClient::Get()->HasObserver(contents));
 }
 
 // Verifies that the password box for the active user is cleared if a suspend
diff --git a/ash/login/ui/login_auth_user_view.cc b/ash/login/ui/login_auth_user_view.cc
index 9845884..1900b67 100644
--- a/ash/login/ui/login_auth_user_view.cc
+++ b/ash/login/ui/login_auth_user_view.cc
@@ -654,8 +654,7 @@
   external_binary_enrollment_button_->SetVisible(has_external_binary);
 
   if (has_external_binary) {
-    power_manager_client_observer_.Add(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+    power_manager_client_observer_.Add(chromeos::PowerManagerClient::Get());
   }
 
   int padding_view_height = kDistanceBetweenPasswordFieldAndPinKeyboardDp;
diff --git a/ash/login/ui/login_auth_user_view_unittest.cc b/ash/login/ui/login_auth_user_view_unittest.cc
index b2b5b90..a1ae362 100644
--- a/ash/login/ui/login_auth_user_view_unittest.cc
+++ b/ash/login/ui/login_auth_user_view_unittest.cc
@@ -12,9 +12,7 @@
 #include "base/bind_helpers.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
-#include "chromeos/dbus/power_manager_client.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/test/event_generator.h"
@@ -36,9 +34,6 @@
 
   // LoginTestBase:
   void SetUp() override {
-    power_manager_ = new chromeos::FakePowerManagerClient();
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        base::WrapUnique(power_manager_));
     LoginTestBase::SetUp();
 
     user_ = CreateUser("user@domain.com");
@@ -68,8 +63,6 @@
   mojom::LoginUserInfoPtr user_;
   views::View* container_ = nullptr;   // Owned by test widget view hierarchy.
   LoginAuthUserView* view_ = nullptr;  // Owned by test widget view hierarchy.
-  chromeos::FakePowerManagerClient* power_manager_ =
-      nullptr;  // Owned by DBusThreadmanager
 
  private:
   DISALLOW_COPY_AND_ASSIGN(LoginAuthUserViewUnittest);
@@ -211,8 +204,8 @@
                                ->current_user()
                                ->basic_user_info->account_id,
                            _));
-  power_manager_->SetLidState(chromeos::PowerManagerClient::LidState::OPEN,
-                              base::TimeTicks::Now());
+  power_manager_client()->SetLidState(
+      chromeos::PowerManagerClient::LidState::OPEN, base::TimeTicks::Now());
 
   base::RunLoop().RunUntilIdle();
 
diff --git a/ash/shell.cc b/ash/shell.cc
index bd8158d..a10aff3 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -1123,9 +1123,9 @@
   sticky_keys_controller_.reset(new StickyKeysController);
   screen_pinning_controller_ = std::make_unique<ScreenPinningController>();
 
-  power_prefs_ = std::make_unique<PowerPrefs>(
-      chromeos::PowerPolicyController::Get(),
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+  power_prefs_ =
+      std::make_unique<PowerPrefs>(chromeos::PowerPolicyController::Get(),
+                                   chromeos::PowerManagerClient::Get());
 
   backlights_forced_off_setter_ = std::make_unique<BacklightsForcedOffSetter>();
 
@@ -1278,9 +1278,7 @@
 
   user_metrics_recorder_->OnShellInitialized();
 
-  notification_reporter_ = std::make_unique<NotificationReporter>(
-      message_center::MessageCenter::Get(),
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+  notification_reporter_ = std::make_unique<NotificationReporter>();
 
   // Initialize the D-Bus thread and services for ash.
   ash_dbus_services_ = std::make_unique<AshDBusServices>();
diff --git a/ash/shell.h b/ash/shell.h
index ac9865d..8a2f8cf 100644
--- a/ash/shell.h
+++ b/ash/shell.h
@@ -466,6 +466,9 @@
   NoteTakingController* note_taking_controller() {
     return note_taking_controller_.get();
   }
+  NotificationReporter* notification_reporter() {
+    return notification_reporter_.get();
+  }
   OverlayEventFilter* overlay_filter() { return overlay_filter_.get(); }
   PartialMagnificationController* partial_magnification_controller() {
     return partial_magnification_controller_.get();
diff --git a/ash/shell/content/client/shell_browser_main_parts.cc b/ash/shell/content/client/shell_browser_main_parts.cc
index fb46fed..9381479 100644
--- a/ash/shell/content/client/shell_browser_main_parts.cc
+++ b/ash/shell/content/client/shell_browser_main_parts.cc
@@ -98,7 +98,7 @@
   bluez::BluezDBusManager::Initialize();
 
   chromeos::PowerPolicyController::Initialize(
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+      chromeos::PowerManagerClient::Get());
 
   service_manager::Connector* const connector =
       content::ServiceManagerConnection::GetForProcess()->GetConnector();
diff --git a/ash/shutdown_controller.cc b/ash/shutdown_controller.cc
index 205102f..90717139 100644
--- a/ash/shutdown_controller.cc
+++ b/ash/shutdown_controller.cc
@@ -46,10 +46,10 @@
   std::string description = base::StringPrintf("UI request from ash: %s",
                                                ShutdownReasonToString(reason));
   if (reboot_on_shutdown_) {
-    DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+    chromeos::PowerManagerClient::Get()->RequestRestart(
         power_manager::REQUEST_RESTART_FOR_USER, description);
   } else {
-    DBusThreadManager::Get()->GetPowerManagerClient()->RequestShutdown(
+    chromeos::PowerManagerClient::Get()->RequestShutdown(
         power_manager::REQUEST_SHUTDOWN_FOR_USER, description);
   }
 }
diff --git a/ash/system/audio/display_speaker_controller.cc b/ash/system/audio/display_speaker_controller.cc
index 421c900..c34e424 100644
--- a/ash/system/audio/display_speaker_controller.cc
+++ b/ash/system/audio/display_speaker_controller.cc
@@ -13,17 +13,16 @@
 #include "ui/display/screen.h"
 
 using chromeos::CrasAudioHandler;
-using chromeos::DBusThreadManager;
 
 namespace ash {
 
 DisplaySpeakerController::DisplaySpeakerController() {
   display::Screen::GetScreen()->AddObserver(this);
-  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
 }
 
 DisplaySpeakerController::~DisplaySpeakerController() {
-  DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
   display::Screen::GetScreen()->RemoveObserver(this);
 }
 
diff --git a/ash/system/brightness/brightness_controller_chromeos.cc b/ash/system/brightness/brightness_controller_chromeos.cc
index 6bddde31..4007f92 100644
--- a/ash/system/brightness/brightness_controller_chromeos.cc
+++ b/ash/system/brightness/brightness_controller_chromeos.cc
@@ -20,9 +20,7 @@
   if (accelerator.key_code() == ui::VKEY_BRIGHTNESS_DOWN)
     base::RecordAction(base::UserMetricsAction("Accel_BrightnessDown_F6"));
 
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->DecreaseScreenBrightness(true);
+  chromeos::PowerManagerClient::Get()->DecreaseScreenBrightness(true);
 }
 
 void BrightnessControllerChromeos::HandleBrightnessUp(
@@ -30,9 +28,7 @@
   if (accelerator.key_code() == ui::VKEY_BRIGHTNESS_UP)
     base::RecordAction(base::UserMetricsAction("Accel_BrightnessUp_F7"));
 
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->IncreaseScreenBrightness();
+  chromeos::PowerManagerClient::Get()->IncreaseScreenBrightness();
 }
 
 void BrightnessControllerChromeos::SetBrightnessPercent(double percent,
@@ -45,16 +41,13 @@
           : power_manager::SetBacklightBrightnessRequest_Transition_INSTANT);
   request.set_cause(
       power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST);
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->SetScreenBrightness(request);
+  chromeos::PowerManagerClient::Get()->SetScreenBrightness(request);
 }
 
 void BrightnessControllerChromeos::GetBrightnessPercent(
     base::OnceCallback<void(base::Optional<double>)> callback) {
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->GetScreenBrightnessPercent(std::move(callback));
+  chromeos::PowerManagerClient::Get()->GetScreenBrightnessPercent(
+      std::move(callback));
 }
 
 }  // namespace system
diff --git a/ash/system/keyboard_brightness/keyboard_brightness_controller.cc b/ash/system/keyboard_brightness/keyboard_brightness_controller.cc
index b4ea12c..e62ba7a 100644
--- a/ash/system/keyboard_brightness/keyboard_brightness_controller.cc
+++ b/ash/system/keyboard_brightness/keyboard_brightness_controller.cc
@@ -23,9 +23,7 @@
   if (accelerator.key_code() == ui::VKEY_BRIGHTNESS_DOWN)
     RecordAction(UserMetricsAction("Accel_KeyboardBrightnessDown_F6"));
 
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->DecreaseKeyboardBrightness();
+  chromeos::PowerManagerClient::Get()->DecreaseKeyboardBrightness();
 }
 
 void KeyboardBrightnessController::HandleKeyboardBrightnessUp(
@@ -33,9 +31,7 @@
   if (accelerator.key_code() == ui::VKEY_BRIGHTNESS_UP)
     RecordAction(UserMetricsAction("Accel_KeyboardBrightnessUp_F7"));
 
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->IncreaseKeyboardBrightness();
+  chromeos::PowerManagerClient::Get()->IncreaseKeyboardBrightness();
 }
 
 }  // namespace ash
diff --git a/ash/system/night_light/night_light_controller.cc b/ash/system/night_light/night_light_controller.cc
index c428eb9..6bd95f8 100644
--- a/ash/system/night_light/night_light_controller.cc
+++ b/ash/system/night_light/night_light_controller.cc
@@ -307,13 +307,11 @@
   Shell::Get()->session_controller()->AddObserver(this);
   Shell::Get()->window_tree_host_manager()->AddObserver(this);
   Shell::Get()->aura_env()->AddObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
 }
 
 NightLightController::~NightLightController() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
   Shell::Get()->aura_env()->RemoveObserver(this);
   Shell::Get()->window_tree_host_manager()->RemoveObserver(this);
   Shell::Get()->session_controller()->RemoveObserver(this);
diff --git a/ash/system/power/backlights_forced_off_setter.cc b/ash/system/power/backlights_forced_off_setter.cc
index 985f7f62..b07d8da 100644
--- a/ash/system/power/backlights_forced_off_setter.cc
+++ b/ash/system/power/backlights_forced_off_setter.cc
@@ -11,7 +11,6 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/logging.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "ui/display/manager/touch_device_manager.h"
 
@@ -21,16 +20,13 @@
     : power_manager_observer_(this), weak_ptr_factory_(this) {
   InitDisableTouchscreenWhileScreenOff();
 
-  power_manager_observer_.Add(
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+  power_manager_observer_.Add(chromeos::PowerManagerClient::Get());
   GetInitialBacklightsForcedOff();
 }
 
 BacklightsForcedOffSetter::~BacklightsForcedOffSetter() {
   if (active_backlights_forced_off_count_ > 0) {
-    chromeos::DBusThreadManager::Get()
-        ->GetPowerManagerClient()
-        ->SetBacklightsForcedOff(false);
+    chromeos::PowerManagerClient::Get()->SetBacklightsForcedOff(false);
   }
 }
 
@@ -81,9 +77,8 @@
 
 void BacklightsForcedOffSetter::PowerManagerRestarted() {
   if (backlights_forced_off_.has_value()) {
-    chromeos::DBusThreadManager::Get()
-        ->GetPowerManagerClient()
-        ->SetBacklightsForcedOff(backlights_forced_off_.value());
+    chromeos::PowerManagerClient::Get()->SetBacklightsForcedOff(
+        backlights_forced_off_.value());
   } else {
     GetInitialBacklightsForcedOff();
   }
@@ -91,9 +86,7 @@
 
 void BacklightsForcedOffSetter::ResetForTest() {
   if (active_backlights_forced_off_count_ > 0) {
-    chromeos::DBusThreadManager::Get()
-        ->GetPowerManagerClient()
-        ->SetBacklightsForcedOff(false);
+    chromeos::PowerManagerClient::Get()->SetBacklightsForcedOff(false);
   }
 
   // Cancel all backlights forced off requests.
@@ -113,11 +106,9 @@
 }
 
 void BacklightsForcedOffSetter::GetInitialBacklightsForcedOff() {
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->GetBacklightsForcedOff(base::BindOnce(
-          &BacklightsForcedOffSetter::OnGotInitialBacklightsForcedOff,
-          weak_ptr_factory_.GetWeakPtr()));
+  chromeos::PowerManagerClient::Get()->GetBacklightsForcedOff(base::BindOnce(
+      &BacklightsForcedOffSetter::OnGotInitialBacklightsForcedOff,
+      weak_ptr_factory_.GetWeakPtr()));
 }
 
 void BacklightsForcedOffSetter::OnGotInitialBacklightsForcedOff(
@@ -147,9 +138,7 @@
   }
 
   backlights_forced_off_ = forced_off;
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->SetBacklightsForcedOff(forced_off);
+  chromeos::PowerManagerClient::Get()->SetBacklightsForcedOff(forced_off);
 
   UpdateTouchscreenStatus();
 
diff --git a/ash/system/power/backlights_forced_off_setter_unittest.cc b/ash/system/power/backlights_forced_off_setter_unittest.cc
index a584d38..248e1fd 100644
--- a/ash/system/power/backlights_forced_off_setter_unittest.cc
+++ b/ash/system/power/backlights_forced_off_setter_unittest.cc
@@ -15,7 +15,6 @@
 #include "ash/touch/touch_devices_controller.h"
 #include "base/macros.h"
 #include "base/scoped_observer.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "services/ws/public/cpp/input_devices/input_device_client_test_api.h"
 #include "ui/display/manager/display_manager.h"
@@ -71,12 +70,6 @@
   ~BacklightsForcedOffSetterTest() override = default;
 
   void SetUp() override {
-    auto power_manager_client =
-        std::make_unique<chromeos::FakePowerManagerClient>();
-    power_manager_client_ = power_manager_client.get();
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::move(power_manager_client));
-
     AshTestBase::SetUp();
 
     backlights_forced_off_setter_ =
@@ -89,7 +82,6 @@
     backlights_forced_off_observer_.reset();
     backlights_forced_off_setter_.reset();
     AshTestBase::TearDown();
-    chromeos::DBusThreadManager::Shutdown();
   }
 
   void ResetBacklightsForcedOffSetter() {
@@ -98,9 +90,6 @@
   }
 
  protected:
-  // Owned by DBusThreadManager.
-  chromeos::FakePowerManagerClient* power_manager_client_ = nullptr;
-
   std::unique_ptr<BacklightsForcedOffSetter> backlights_forced_off_setter_;
   std::unique_ptr<TestObserver> backlights_forced_off_observer_;
 
@@ -109,52 +98,52 @@
 };
 
 TEST_F(BacklightsForcedOffSetterTest, SingleForcedOffRequest) {
-  ASSERT_FALSE(power_manager_client_->backlights_forced_off());
+  ASSERT_FALSE(power_manager_client()->backlights_forced_off());
 
   std::unique_ptr<ScopedBacklightsForcedOff> scoped_forced_off =
       backlights_forced_off_setter_->ForceBacklightsOff();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<bool>({true}),
             backlights_forced_off_observer_->forced_off_states());
   backlights_forced_off_observer_->ClearForcedOffStates();
 
   scoped_forced_off.reset();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<bool>({false}),
             backlights_forced_off_observer_->forced_off_states());
 }
 
 TEST_F(BacklightsForcedOffSetterTest, BacklightsForcedOffSetterDeleted) {
-  ASSERT_FALSE(power_manager_client_->backlights_forced_off());
+  ASSERT_FALSE(power_manager_client()->backlights_forced_off());
 
   std::unique_ptr<ScopedBacklightsForcedOff> scoped_forced_off =
       backlights_forced_off_setter_->ForceBacklightsOff();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<bool>({true}),
             backlights_forced_off_observer_->forced_off_states());
   backlights_forced_off_observer_->ClearForcedOffStates();
 
   ResetBacklightsForcedOffSetter();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Verify that deleting scoped forced off request does not affect
   // power manager state (nor cause a crash).
   scoped_forced_off.reset();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 }
 
 TEST_F(BacklightsForcedOffSetterTest,
        OverlappingRequests_SecondRequestResetFirst) {
-  ASSERT_FALSE(power_manager_client_->backlights_forced_off());
+  ASSERT_FALSE(power_manager_client()->backlights_forced_off());
 
   std::unique_ptr<ScopedBacklightsForcedOff> scoped_forced_off_1 =
       backlights_forced_off_setter_->ForceBacklightsOff();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<bool>({true}),
             backlights_forced_off_observer_->forced_off_states());
   backlights_forced_off_observer_->ClearForcedOffStates();
@@ -162,29 +151,29 @@
   std::unique_ptr<ScopedBacklightsForcedOff> scoped_forced_off_2 =
       backlights_forced_off_setter_->ForceBacklightsOff();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(backlights_forced_off_observer_->forced_off_states().empty());
 
   scoped_forced_off_2.reset();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(backlights_forced_off_observer_->forced_off_states().empty());
 
   scoped_forced_off_1.reset();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<bool>({false}),
             backlights_forced_off_observer_->forced_off_states());
 }
 
 TEST_F(BacklightsForcedOffSetterTest,
        OverlappingRequests_FirstRequestResetFirst) {
-  ASSERT_FALSE(power_manager_client_->backlights_forced_off());
+  ASSERT_FALSE(power_manager_client()->backlights_forced_off());
 
   std::unique_ptr<ScopedBacklightsForcedOff> scoped_forced_off_1 =
       backlights_forced_off_setter_->ForceBacklightsOff();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<bool>({true}),
             backlights_forced_off_observer_->forced_off_states());
   backlights_forced_off_observer_->ClearForcedOffStates();
@@ -192,7 +181,7 @@
   std::unique_ptr<ScopedBacklightsForcedOff> scoped_forced_off_2 =
       backlights_forced_off_setter_->ForceBacklightsOff();
 
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(backlights_forced_off_observer_->forced_off_states().empty());
 
   scoped_forced_off_1.reset();
@@ -201,7 +190,7 @@
 
   scoped_forced_off_2.reset();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_EQ(std::vector<bool>({false}),
             backlights_forced_off_observer_->forced_off_states());
 }
@@ -256,7 +245,7 @@
   change.set_cause(power_manager::BacklightBrightnessChange_Cause_OTHER);
   change.set_percent(0.0);
 
-  power_manager_client_->SendScreenBrightnessChanged(change);
+  power_manager_client()->SendScreenBrightnessChanged(change);
 
   // The touchscreens should be enabled.
   EXPECT_TRUE(Shell::Get()->touch_devices_controller()->GetTouchscreenEnabled(
@@ -295,7 +284,7 @@
   change.set_cause(power_manager::BacklightBrightnessChange_Cause_OTHER);
   change.set_percent(0.0);
 
-  power_manager_client_->SendScreenBrightnessChanged(change);
+  power_manager_client()->SendScreenBrightnessChanged(change);
 
   // The touchscreens should be disabled.
   EXPECT_FALSE(Shell::Get()->touch_devices_controller()->GetTouchscreenEnabled(
diff --git a/ash/system/power/notification_reporter.cc b/ash/system/power/notification_reporter.cc
index eda2c76..09f339c 100644
--- a/ash/system/power/notification_reporter.cc
+++ b/ash/system/power/notification_reporter.cc
@@ -4,23 +4,19 @@
 
 #include "ash/system/power/notification_reporter.h"
 
+#include "chromeos/dbus/power_manager_client.h"
+#include "ui/message_center/message_center.h"
 #include "ui/message_center/public/cpp/notification.h"
 #include "ui/message_center/public/cpp/notification_types.h"
 
 namespace ash {
 
-NotificationReporter::NotificationReporter(
-    message_center::MessageCenter* message_center,
-    chromeos::PowerManagerClient* power_manager_client)
-    : message_center_(message_center),
-      power_manager_client_(power_manager_client) {
-  DCHECK(message_center_);
-  DCHECK(power_manager_client_);
-  message_center_->AddObserver(this);
+NotificationReporter::NotificationReporter() {
+  message_center::MessageCenter::Get()->AddObserver(this);
 }
 
 NotificationReporter::~NotificationReporter() {
-  message_center_->RemoveObserver(this);
+  message_center::MessageCenter::Get()->RemoveObserver(this);
 }
 
 void NotificationReporter::OnNotificationAdded(
@@ -37,15 +33,17 @@
     const std::string& notification_id) {
   // Guard against notification removals before observers are notified.
   message_center::Notification* notification =
-      message_center_->FindVisibleNotificationById(notification_id);
+      message_center::MessageCenter::Get()->FindVisibleNotificationById(
+          notification_id);
   if (!notification)
     return;
 
   // If this is a high priority notification wake the display up if the
   // system is in dark resume i.e. transition to full resume.
   if (notification->priority() >
-      message_center::NotificationPriority::DEFAULT_PRIORITY)
-    power_manager_client_->NotifyWakeNotification();
+      message_center::NotificationPriority::DEFAULT_PRIORITY) {
+    chromeos::PowerManagerClient::Get()->NotifyWakeNotification();
+  }
 }
 
 }  // namespace ash
diff --git a/ash/system/power/notification_reporter.h b/ash/system/power/notification_reporter.h
index ed86ba4..e9fc47dc 100644
--- a/ash/system/power/notification_reporter.h
+++ b/ash/system/power/notification_reporter.h
@@ -9,8 +9,6 @@
 
 #include "ash/ash_export.h"
 #include "base/macros.h"
-#include "chromeos/dbus/power_manager_client.h"
-#include "ui/message_center/message_center.h"
 #include "ui/message_center/message_center_observer.h"
 
 namespace ash {
@@ -22,8 +20,7 @@
 class ASH_EXPORT NotificationReporter
     : public message_center::MessageCenterObserver {
  public:
-  NotificationReporter(message_center::MessageCenter* message_center,
-                       chromeos::PowerManagerClient* power_manager_client);
+  NotificationReporter();
   ~NotificationReporter() override;
 
   // Overridden from MessageCenterObserver:
@@ -35,9 +32,6 @@
   // |notification_id| has high priority.
   void MaybeNotifyPowerManager(const std::string& notification_id);
 
-  message_center::MessageCenter* const message_center_;
-  chromeos::PowerManagerClient* const power_manager_client_;
-
   DISALLOW_COPY_AND_ASSIGN(NotificationReporter);
 };
 
diff --git a/ash/system/power/notification_reporter_unittest.cc b/ash/system/power/notification_reporter_unittest.cc
index a45cea0..30f3ef5 100644
--- a/ash/system/power/notification_reporter_unittest.cc
+++ b/ash/system/power/notification_reporter_unittest.cc
@@ -8,6 +8,7 @@
 #include <string>
 #include <utility>
 
+#include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
@@ -16,71 +17,67 @@
 
 namespace ash {
 
-class NotificationReporterTest : public testing::Test {
- public:
-  NotificationReporterTest()
-      : fake_power_manager_client_(new chromeos::FakePowerManagerClient()),
-        notification_reporter_(&fake_message_center_,
-                               fake_power_manager_client_) {
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::unique_ptr<chromeos::PowerManagerClient>(
-            fake_power_manager_client_));
-  }
-  ~NotificationReporterTest() override = default;
-
- protected:
-  message_center::FakeMessageCenter fake_message_center_;
-  // Owned by DBusThreadManager.
-  chromeos::FakePowerManagerClient* fake_power_manager_client_;
-  NotificationReporter notification_reporter_;
-
-  DISALLOW_COPY_AND_ASSIGN(NotificationReporterTest);
-};
+using NotificationReporterTest = AshTestBase;
 
 TEST_F(NotificationReporterTest, CheckNotifyWakeNotification) {
   // Create a high priority notification and check that the power manager got
   // called.
-  auto notification = std::make_unique<message_center::Notification>();
-  const std::string notification_id = notification->id();
-  notification->set_priority(
+  message_center::Notification notification(
+      message_center::NOTIFICATION_TYPE_SIMPLE, "notification-id", {}, {}, {},
+      {}, {}, {}, {}, nullptr);
+  notification.set_priority(
       static_cast<int>(message_center::NotificationPriority::HIGH_PRIORITY));
-  fake_message_center_.AddNotification(std::move(notification));
-  EXPECT_EQ(1, fake_power_manager_client_->num_wake_notification_calls());
+  message_center::MessageCenter::Get()->AddNotification(
+      std::make_unique<message_center::Notification>(notification));
+  EXPECT_EQ(
+      1,
+      chromeos::FakePowerManagerClient::Get()->num_wake_notification_calls());
 
   // Update the old notification. Check if the power manager got called again.
-  notification = std::make_unique<message_center::Notification>();
-  notification->set_priority(
-      static_cast<int>(message_center::NotificationPriority::HIGH_PRIORITY));
-  fake_message_center_.UpdateNotification(notification_id,
-                                          std::move(notification));
-  EXPECT_EQ(2, fake_power_manager_client_->num_wake_notification_calls());
+  message_center::MessageCenter::Get()->UpdateNotification(
+      notification.id(),
+      std::make_unique<message_center::Notification>(notification));
+  EXPECT_EQ(
+      2,
+      chromeos::FakePowerManagerClient::Get()->num_wake_notification_calls());
 
   // A low priority notification should not result in any calls to the power
   // manager.
-  notification = std::make_unique<message_center::Notification>();
-  notification->set_priority(
+  notification.set_priority(
       static_cast<int>(message_center::NotificationPriority::LOW_PRIORITY));
-  fake_message_center_.AddNotification(std::move(notification));
-  EXPECT_EQ(2, fake_power_manager_client_->num_wake_notification_calls());
+  message_center::MessageCenter::Get()->AddNotification(
+      std::make_unique<message_center::Notification>("different-id",
+                                                     notification));
+  EXPECT_EQ(
+      2,
+      chromeos::FakePowerManagerClient::Get()->num_wake_notification_calls());
 }
 
 TEST_F(NotificationReporterTest, CheckDismissedNotification) {
   // Create a high priority notification and check that the power manager got
   // called.
-  auto notification = std::make_unique<message_center::Notification>();
-  const std::string notification_id = notification->id();
-  notification->set_priority(
+  message_center::Notification notification(
+      message_center::NOTIFICATION_TYPE_SIMPLE, "notification-id", {}, {}, {},
+      {}, {}, {}, {}, nullptr);
+  notification.set_priority(
       static_cast<int>(message_center::NotificationPriority::HIGH_PRIORITY));
-  fake_message_center_.AddNotification(std::move(notification));
-  EXPECT_EQ(1, fake_power_manager_client_->num_wake_notification_calls());
+  message_center::MessageCenter::Get()->AddNotification(
+      std::make_unique<message_center::Notification>(notification));
+  EXPECT_EQ(
+      1,
+      chromeos::FakePowerManagerClient::Get()->num_wake_notification_calls());
 
   // Remove the notification from the message center and then directly call the
-  // observer API. This shouldn't call the power manager as
-  // |notification_reporter_| won't be able to find the notification and
-  // consequently determine it's priority.
-  fake_message_center_.RemoveNotification(notification_id, false /* by_user */);
-  notification_reporter_.OnNotificationUpdated(notification_id);
-  EXPECT_EQ(1, fake_power_manager_client_->num_wake_notification_calls());
+  // observer API. This shouldn't call the power manager as NotificationReporter
+  // won't be able to find the notification and consequently determine it's
+  // priority.
+  message_center::MessageCenter::Get()->RemoveNotification(notification.id(),
+                                                           false /* by_user */);
+  Shell::Get()->notification_reporter()->OnNotificationUpdated(
+      notification.id());
+  EXPECT_EQ(
+      1,
+      chromeos::FakePowerManagerClient::Get()->num_wake_notification_calls());
 }
 
 }  // namespace ash
diff --git a/ash/system/power/peripheral_battery_notifier.cc b/ash/system/power/peripheral_battery_notifier.cc
index 6605cbe..99b587a 100644
--- a/ash/system/power/peripheral_battery_notifier.cc
+++ b/ash/system/power/peripheral_battery_notifier.cc
@@ -164,8 +164,7 @@
 PeripheralBatteryNotifier::PeripheralBatteryNotifier()
     : weakptr_factory_(
           new base::WeakPtrFactory<PeripheralBatteryNotifier>(this)) {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
   device::BluetoothAdapterFactory::GetAdapter(
       base::BindOnce(&PeripheralBatteryNotifier::InitializeOnBluetoothReady,
                      weakptr_factory_->GetWeakPtr()));
@@ -174,8 +173,7 @@
 PeripheralBatteryNotifier::~PeripheralBatteryNotifier() {
   if (bluetooth_adapter_.get())
     bluetooth_adapter_->RemoveObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void PeripheralBatteryNotifier::PeripheralBatteryStatusReceived(
diff --git a/ash/system/power/power_button_controller.cc b/ash/system/power/power_button_controller.cc
index 6a6d6df..1e083b5 100644
--- a/ash/system/power/power_button_controller.cc
+++ b/ash/system/power/power_button_controller.cc
@@ -158,7 +158,7 @@
   display_controller_ = std::make_unique<PowerButtonDisplayController>(
       backlights_forced_off_setter_, tick_clock_);
   chromeos::PowerManagerClient* power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   power_manager_client->AddObserver(this);
   power_manager_client->GetSwitchStates(base::BindOnce(
       &PowerButtonController::OnGetSwitchStates, weak_factory_.GetWeakPtr()));
@@ -175,8 +175,7 @@
     Shell::Get()->tablet_mode_controller()->RemoveObserver(this);
   Shell::Get()->display_configurator()->RemoveObserver(this);
   AccelerometerReader::GetInstance()->RemoveObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void PowerButtonController::OnPreShutdownTimeout() {
diff --git a/ash/system/power/power_button_controller_unittest.cc b/ash/system/power/power_button_controller_unittest.cc
index b101561..9a796c5 100644
--- a/ash/system/power/power_button_controller_unittest.cc
+++ b/ash/system/power/power_button_controller_unittest.cc
@@ -74,7 +74,7 @@
     InitPowerButtonControllerMembers(PowerManagerClient::TabletMode::ON);
 
     SendBrightnessChange(kNonZeroBrightness, kUserCause);
-    EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+    EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
     // Advance a duration longer than |kIgnorePowerButtonAfterResumeDelay| to
     // avoid events being ignored.
@@ -94,7 +94,7 @@
     power_manager::BacklightBrightnessChange change;
     change.set_percent(percent);
     change.set_cause(cause);
-    power_manager_client_->SendScreenBrightnessChanged(change);
+    power_manager_client()->SendScreenBrightnessChanged(change);
   }
 
   bool GetLockedState() {
@@ -115,10 +115,10 @@
   void TappingPowerButtonWhenScreenIsIdleOff() {
     SendBrightnessChange(0, kUserCause);
     PressPowerButton();
-    EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+    EXPECT_FALSE(power_manager_client()->backlights_forced_off());
     SendBrightnessChange(kNonZeroBrightness, kUserCause);
     ReleasePowerButton();
-    EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+    EXPECT_FALSE(power_manager_client()->backlights_forced_off());
     EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   }
 
@@ -188,7 +188,7 @@
 TEST_F(PowerButtonControllerTest, TappingPowerButtonOfClamshell) {
   // Should not turn the screen off when screen is on.
   InitPowerButtonControllerMembers(PowerManagerClient::TabletMode::UNSUPPORTED);
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   PressPowerButton();
   power_button_test_api_->SetShowMenuAnimationDone(false);
   // Start the showing power menu animation immediately as pressing the
@@ -196,7 +196,7 @@
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   EXPECT_TRUE(power_button_test_api_->IsMenuOpened());
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   // Start the dimissing power menu animation immediately as releasing the
   // clamsehll power button if showing animation hasn't finished.
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
@@ -217,7 +217,7 @@
   power_button_test_api_->SetShowMenuAnimationDone(true);
   ASSERT_TRUE(power_button_test_api_->TriggerPreShutdownTimeout());
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   // Power button menu should keep opened if showing animation has finished.
   EXPECT_TRUE(power_button_test_api_->IsMenuOpened());
 
@@ -226,7 +226,7 @@
   AdvanceClockToAvoidIgnoring();
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
 }
 
@@ -238,11 +238,11 @@
   PressPowerButton();
   // Showing power menu animation hasn't started as power menu timer is running.
   EXPECT_TRUE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
   ReleasePowerButton();
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
 
   // Should turn screen on if screen is off.
@@ -269,7 +269,7 @@
   EXPECT_TRUE(power_button_test_api_->PreShutdownTimerIsRunning());
   ReleasePowerButton();
   EXPECT_FALSE(power_button_test_api_->PreShutdownTimerIsRunning());
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
 
   // Should turn screen on if screen is off.
@@ -285,10 +285,10 @@
   EnableTabletMode(true);
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // In laptop mode, tapping the power button shouldn't turn the screen off.
   // Instead, we should start showing the power menu animation.
@@ -297,7 +297,7 @@
   PressPowerButton();
   EXPECT_TRUE(power_button_test_api_->IsMenuOpened());
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Tapping power button again in laptop mode when menu is opened should
   // dismiss the menu but keep the screen on.
@@ -307,7 +307,7 @@
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   EXPECT_TRUE(power_button_test_api_->PreShutdownTimerIsRunning());
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
 }
 
@@ -321,19 +321,19 @@
 
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   EnableTabletMode(false);
   AdvanceClockToAvoidIgnoring();
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests that release power button after menu is opened but before trigger
@@ -342,7 +342,7 @@
   EnableTabletMode(true);
   PressPowerButton();
   EXPECT_TRUE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   ASSERT_TRUE(power_button_test_api_->TriggerPowerButtonMenuTimeout());
   ASSERT_TRUE(power_button_test_api_->TriggerPreShutdownTimeout());
   EXPECT_TRUE(lock_state_test_api_->shutdown_timer_is_running());
@@ -350,7 +350,7 @@
   EXPECT_TRUE(power_button_test_api_->IsMenuOpened());
   EXPECT_FALSE(lock_state_test_api_->shutdown_timer_is_running());
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests that tapping the power button dismisses the menu while in laptop mode.
@@ -391,10 +391,10 @@
   EnableTabletMode(true);
   PressLockButton();
   ReleaseLockButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 
   // Press lock button after tap power button should still lock screen.
   PressPowerButton();
@@ -411,14 +411,14 @@
   // and continue to turn screen off.
   Initialize(ButtonType::NORMAL, LoginStatus::USER);
   EnableTabletMode(true);
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   PressPowerButton();
   PressLockButton();
   ReleaseLockButton();
   ReleasePowerButton();
   EXPECT_FALSE(lock_state_test_api_->is_animating_lock());
   EXPECT_EQ(0, session_manager_client_->request_lock_screen_call_count());
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 
   // Turn the screen on.
   PressPowerButton();
@@ -431,7 +431,7 @@
   ReleaseLockButton();
   EXPECT_TRUE(lock_state_test_api_->is_animating_lock());
   EXPECT_EQ(1, session_manager_client_->request_lock_screen_call_count());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests tapping power button when device is suspended without backlights forced
@@ -439,11 +439,11 @@
 TEST_F(PowerButtonControllerTest,
        TappingPowerButtonWhenSuspendedWithoutBacklightsForcedOff) {
   EnableTabletMode(true);
-  power_manager_client_->SendSuspendImminent(
+  power_manager_client()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   SendBrightnessChange(0, kUserCause);
   // There is a power button pressed here, but PowerButtonEvent is sent later.
-  power_manager_client_->SendSuspendDone();
+  power_manager_client()->SendSuspendDone();
   SendBrightnessChange(kNonZeroBrightness, kUserCause);
 
   // Send the power button event after a short delay and check that backlights
@@ -453,7 +453,7 @@
   EXPECT_TRUE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   ReleasePowerButton();
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Send the power button event after a longer delay and check that backlights
   // are forced off.
@@ -463,7 +463,7 @@
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests tapping power button when device is suspended with backlights forced
@@ -474,13 +474,13 @@
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
-  power_manager_client_->SendSuspendImminent(
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
+  power_manager_client()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   // There is a power button pressed here, but PowerButtonEvent is sent later.
   // Because of backlights forced off, resuming system will not restore
   // brightness.
-  power_manager_client_->SendSuspendDone();
+  power_manager_client()->SendSuspendDone();
 
   // Send the power button event after a short delay and check that backlights
   // are not forced off.
@@ -490,7 +490,7 @@
   EXPECT_TRUE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   ReleasePowerButton();
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Send the power button event after a longer delay and check that backlights
   // are forced off.
@@ -500,7 +500,7 @@
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 }
 
 // For convertible device working on tablet mode, keyboard/mouse event should
@@ -511,12 +511,12 @@
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
   PressKey(ui::VKEY_L);
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 
   GenerateMouseMoveEvent();
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests that a single set of power button pressed-and-released operation should
@@ -530,7 +530,7 @@
   // There are two |power_key_pressed| events and |power_key_released| events
   // generated for each pressing and releasing, and multiple repeating pressed
   // events depending on holding.
-  ASSERT_EQ(0, power_manager_client_->num_set_backlights_forced_off_calls());
+  ASSERT_EQ(0, power_manager_client()->num_set_backlights_forced_off_calls());
   EnableTabletMode(true);
   power_button_test_api_->SendKeyEvent(&power_key_pressed);
   power_button_test_api_->SendKeyEvent(&power_key_pressed);
@@ -541,7 +541,7 @@
   ReleasePowerButton();
   power_button_test_api_->SendKeyEvent(&power_key_released);
   power_button_test_api_->SendKeyEvent(&power_key_released);
-  EXPECT_EQ(1, power_manager_client_->num_set_backlights_forced_off_calls());
+  EXPECT_EQ(1, power_manager_client()->num_set_backlights_forced_off_calls());
 }
 
 // Tests that when the power button is pressed/released in tablet mode,
@@ -590,7 +590,7 @@
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   tick_clock_.Advance(base::TimeDelta::FromMilliseconds(1500));
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
 }
 
@@ -601,7 +601,7 @@
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
 
   // Test that a pressing-releasing operation after a short duration, backlights
   // forced off is stopped since we don't drop request for power button pressed.
@@ -609,21 +609,21 @@
   PressPowerButton();
   SendBrightnessChange(kNonZeroBrightness, kUserCause);
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Test that after another short duration, backlights will not be forced off
   // since this immediately following forcing off request needs to be dropped.
   tick_clock_.Advance(base::TimeDelta::FromMilliseconds(200));
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Test that after another long duration, backlights should be forced off.
   tick_clock_.Advance(base::TimeDelta::FromMilliseconds(800));
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests that repeated power button releases of clamshell should cancel the
@@ -655,12 +655,12 @@
   EnableTabletMode(true);
   PressPowerButton();
   ReleasePowerButton();
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
 
   // A lid closed event is received, we should stop forcing off backlights.
-  power_manager_client_->SetLidState(PowerManagerClient::LidState::CLOSED,
-                                     tick_clock_.NowTicks());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  power_manager_client()->SetLidState(PowerManagerClient::LidState::CLOSED,
+                                      tick_clock_.NowTicks());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests that tablet mode events from powerd stop forcing off backlights.
@@ -668,18 +668,18 @@
   EnableTabletMode(true);
   PressPowerButton();
   ReleasePowerButton();
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
-  power_manager_client_->SetTabletMode(PowerManagerClient::TabletMode::OFF,
-                                       tick_clock_.NowTicks());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
+  power_manager_client()->SetTabletMode(PowerManagerClient::TabletMode::OFF,
+                                        tick_clock_.NowTicks());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   AdvanceClockToAvoidIgnoring();
   PressPowerButton();
   ReleasePowerButton();
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
-  power_manager_client_->SetTabletMode(PowerManagerClient::TabletMode::ON,
-                                       tick_clock_.NowTicks());
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
+  power_manager_client()->SetTabletMode(PowerManagerClient::TabletMode::ON,
+                                        tick_clock_.NowTicks());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests that with system reboot, the global touchscreen enabled status should
@@ -691,14 +691,14 @@
 
   // Simulate system reboot by resetting backlights forced off state in powerd
   // and PowerButtonController.
-  power_manager_client_->SetBacklightsForcedOff(false);
+  power_manager_client()->SetBacklightsForcedOff(false);
   ResetPowerButtonController();
   SetTabletModeSwitchState(PowerManagerClient::TabletMode::ON);
 
   // Run the event loop for PowerButtonDisplayController to get backlight state
   // and check that the global touchscreen status is correct.
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(GetGlobalTouchscreenEnabled());
 }
 
@@ -714,7 +714,7 @@
   ReleasePowerButton();
   // Run the event loop for PowerButtonDisplayController to get backlight state.
   base::RunLoop().RunUntilIdle();
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_TRUE(client.media_sessions_suspended());
 }
 
@@ -726,13 +726,13 @@
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
 
   // Simulate an edge case that system resumes because of tablet power button
   // pressed, but power button event is not delivered.
-  power_manager_client_->SendSuspendDone();
+  power_manager_client()->SendSuspendDone();
 
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests that during the interval that the display is turning on, tablet power
@@ -742,7 +742,7 @@
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  ASSERT_TRUE(power_manager_client_->backlights_forced_off());
+  ASSERT_TRUE(power_manager_client()->backlights_forced_off());
 
   // Simiulate the backlight no longer being forced off due to a key event
   // (which we need to briefly leave tablet mode to receive). Chrome will
@@ -750,7 +750,7 @@
   EnableTabletMode(false);
   PressKey(ui::VKEY_L);
   SendBrightnessChange(kNonZeroBrightness, kUserCause);
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Since display could still be off, ignore additional button presses.
   tick_clock_.Advance(PowerButtonController::kScreenStateChangeDelay -
@@ -758,14 +758,14 @@
   EnableTabletMode(true);
   PressPowerButton();
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // After waiting long enough, we should be able to force the display off.
   AdvanceClockToAvoidIgnoring();
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 }
 
 // Tests that a11y alert is sent on tablet power button induced screen state
@@ -904,7 +904,7 @@
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
 
   // Long press the power button when backlights are off will show the menu.
@@ -918,17 +918,17 @@
   PressPowerButton();
   ReleasePowerButton();
   SendBrightnessChange(0, kUserCause);
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
 }
 
 // Tests that suspend will dismiss the opened menu.
 TEST_F(PowerButtonControllerTest, SuspendWithMenuOn) {
   OpenPowerButtonMenu();
-  power_manager_client_->SendSuspendImminent(
+  power_manager_client()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
-  power_manager_client_->SendSuspendDone();
+  power_manager_client()->SendSuspendDone();
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
 }
 
@@ -1079,7 +1079,7 @@
   EXPECT_FALSE(power_button_test_api_->ShowMenuAnimationDone());
   // The partially shown menu should be dismissed by power button up.
   EXPECT_FALSE(power_button_test_api_->IsMenuOpened());
-  EXPECT_TRUE(power_manager_client_->backlights_forced_off());
+  EXPECT_TRUE(power_manager_client()->backlights_forced_off());
 }
 
 class PowerButtonControllerWithPositionTest
diff --git a/ash/system/power/power_button_display_controller.cc b/ash/system/power/power_button_display_controller.cc
index d4c654e..fbdf40a 100644
--- a/ash/system/power/power_button_display_controller.cc
+++ b/ash/system/power/power_button_display_controller.cc
@@ -36,8 +36,7 @@
       backlights_forced_off_observer_(this),
       tick_clock_(tick_clock),
       weak_ptr_factory_(this) {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
   ui::InputDeviceManager::GetInstance()->AddObserver(this);
   Shell::Get()->AddPreTargetHandler(this, ui::EventTarget::Priority::kSystem);
 
@@ -47,8 +46,7 @@
 PowerButtonDisplayController::~PowerButtonDisplayController() {
   Shell::Get()->RemovePreTargetHandler(this);
   ui::InputDeviceManager::GetInstance()->RemoveObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 bool PowerButtonDisplayController::IsScreenOn() const {
diff --git a/ash/system/power/power_button_screenshot_controller_unittest.cc b/ash/system/power/power_button_screenshot_controller_unittest.cc
index fe03c2c..be0fbae 100644
--- a/ash/system/power/power_button_screenshot_controller_unittest.cc
+++ b/ash/system/power/power_button_screenshot_controller_unittest.cc
@@ -149,7 +149,7 @@
 
   // Releases power button now should not set display off.
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   // Releases volume down key, and verifies nothing happens.
   ReleaseKey(ui::VKEY_VOLUME_DOWN);
   EXPECT_EQ(0, GetScreenshotCount());
@@ -174,7 +174,7 @@
   EXPECT_FALSE(LastKeyConsumed());
   // Releases power button now should not set display off.
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   // Releases volume down key, and verifies nothing happens.
   ReleaseKey(ui::VKEY_VOLUME_DOWN);
   EXPECT_EQ(0, GetScreenshotCount());
@@ -192,7 +192,7 @@
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   ReleasePowerButton();
   ReleaseKey(ui::VKEY_VOLUME_DOWN);
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Tests volume up key can stop power button's shutdown timer and power button
   // menu timer. Also tests that volume up key is not consumed.
@@ -203,7 +203,7 @@
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   ReleasePowerButton();
   ReleaseKey(ui::VKEY_VOLUME_UP);
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(LastKeyConsumed());
 }
 
@@ -251,7 +251,7 @@
 
   // Releases power button now should not set display off.
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   // Releases volume down key, and verifies nothing happens.
   ReleaseKey(ui::VKEY_VOLUME_DOWN);
   EXPECT_EQ(0, GetScreenshotCount());
@@ -282,7 +282,7 @@
   EXPECT_FALSE(LastKeyConsumed());
   // Releases power button now should not set display off.
   ReleasePowerButton();
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   // Releases volume down key, and verifies nothing happens.
   ReleaseKey(ui::VKEY_VOLUME_DOWN);
   EXPECT_EQ(0, GetScreenshotCount());
@@ -298,7 +298,7 @@
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   ReleasePowerButton();
   ReleaseKey(ui::VKEY_VOLUME_DOWN);
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
 
   // Tests volume up key invalidates the power button behavior. Also
   // tests that volume up key is not consumed.
@@ -308,7 +308,7 @@
   EXPECT_FALSE(power_button_test_api_->PowerButtonMenuTimerIsRunning());
   ReleasePowerButton();
   ReleaseKey(ui::VKEY_VOLUME_UP);
-  EXPECT_FALSE(power_manager_client_->backlights_forced_off());
+  EXPECT_FALSE(power_manager_client()->backlights_forced_off());
   EXPECT_FALSE(LastKeyConsumed());
 }
 
diff --git a/ash/system/power/power_button_test_base.cc b/ash/system/power/power_button_test_base.cc
index 3662318..4a3de7a 100644
--- a/ash/system/power/power_button_test_base.cc
+++ b/ash/system/power/power_button_test_base.cc
@@ -33,8 +33,6 @@
   // This also initializes DBusThreadManager.
   std::unique_ptr<chromeos::DBusThreadManagerSetter> dbus_setter =
       chromeos::DBusThreadManager::GetSetterForTesting();
-  power_manager_client_ = new chromeos::FakePowerManagerClient();
-  dbus_setter->SetPowerManagerClient(base::WrapUnique(power_manager_client_));
   session_manager_client_ = new chromeos::FakeSessionManagerClient;
   dbus_setter->SetSessionManagerClient(
       base::WrapUnique(session_manager_client_));
diff --git a/ash/system/power/power_button_test_base.h b/ash/system/power/power_button_test_base.h
index 832dc99..b2a37eb 100644
--- a/ash/system/power/power_button_test_base.h
+++ b/ash/system/power/power_button_test_base.h
@@ -13,7 +13,6 @@
 #include "ui/events/keycodes/keyboard_codes_posix.h"
 
 namespace chromeos {
-class FakePowerManagerClient;
 class FakeSessionManagerClient;
 }  // namespace chromeos
 
@@ -86,7 +85,6 @@
   void AdvanceClockToAvoidIgnoring();
 
   // Ownership is passed on to chromeos::DBusThreadManager.
-  chromeos::FakePowerManagerClient* power_manager_client_ = nullptr;
   chromeos::FakeSessionManagerClient* session_manager_client_ = nullptr;
 
   PowerButtonController* power_button_controller_ = nullptr;  // Not owned.
diff --git a/ash/system/power/power_event_observer.cc b/ash/system/power/power_event_observer.cc
index fea6c3d..7741bc8c6 100644
--- a/ash/system/power/power_event_observer.cc
+++ b/ash/system/power/power_event_observer.cc
@@ -218,13 +218,11 @@
                       ? LockState::kLocked
                       : LockState::kUnlocked),
       session_observer_(this) {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
 }
 
 PowerEventObserver::~PowerEventObserver() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void PowerEventObserver::OnLockAnimationsComplete() {
@@ -251,9 +249,9 @@
     power_manager::SuspendImminent::Reason reason) {
   suspend_in_progress_ = true;
 
-  displays_suspended_callback_ = chromeos::DBusThreadManager::Get()
-                                     ->GetPowerManagerClient()
-                                     ->GetSuspendReadinessCallback(FROM_HERE);
+  displays_suspended_callback_ =
+      chromeos::PowerManagerClient::Get()->GetSuspendReadinessCallback(
+          FROM_HERE);
 
   // Stop compositing immediately if
   // * the screen lock flow has already completed
diff --git a/ash/system/power/power_event_observer_unittest.cc b/ash/system/power/power_event_observer_unittest.cc
index 59abb27..f7077aa 100644
--- a/ash/system/power/power_event_observer_unittest.cc
+++ b/ash/system/power/power_event_observer_unittest.cc
@@ -70,8 +70,7 @@
 };
 
 TEST_F(PowerEventObserverTest, LockBeforeSuspend) {
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   ASSERT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks());
 
   // Check that the observer requests a suspend-readiness callback when it hears
@@ -203,8 +202,7 @@
   SetCanLockScreen(true);
   SetShouldLockScreenAutomatically(true);
 
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   observer_->SuspendImminent(power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(1, client->GetNumPendingSuspendReadinessCallbacks());
 
@@ -236,8 +234,7 @@
 
   UpdateDisplay("100x100,200x200");
 
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   observer_->SuspendImminent(power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(1, client->GetNumPendingSuspendReadinessCallbacks());
 
@@ -285,8 +282,7 @@
 
   UpdateDisplay("100x100,200x200");
 
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   observer_->SuspendImminent(power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(1, client->GetNumPendingSuspendReadinessCallbacks());
 
@@ -322,8 +318,7 @@
   SetCanLockScreen(true);
   SetShouldLockScreenAutomatically(true);
 
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   observer_->SuspendImminent(power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(1, client->GetNumPendingSuspendReadinessCallbacks());
 
@@ -389,8 +384,7 @@
 // another wallpaper after the screen is locked).
 TEST_F(PowerEventObserverTest,
        DisplaysNotReadyForSuspendUntilWallpaperAnimationEnds) {
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   ASSERT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks());
 
   SetCanLockScreen(true);
@@ -440,8 +434,7 @@
 // Tests that animated wallpaper changes will be finished immediately when
 // suspend starts (if the screen was locked when suspend started).
 TEST_F(PowerEventObserverTest, EndWallpaperAnimationOnSuspendWhileLocked) {
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   ASSERT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks());
 
   SetCanLockScreen(true);
@@ -482,8 +475,7 @@
 // Tests that animated wallpaper changes will be finished immediately when
 // suspend starts (if the screen lock started before suspend).
 TEST_F(PowerEventObserverTest, EndWallpaperAnimationOnSuspendWhileLocking) {
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   ASSERT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks());
 
   SetCanLockScreen(true);
@@ -525,8 +517,7 @@
 // Tests that animated wallpaper changes will be finished immediately when
 // suspend starts and causes a screen lock.
 TEST_F(PowerEventObserverTest, EndWallpaperAnimationAfterLockDueToSuspend) {
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   ASSERT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks());
 
   SetCanLockScreen(true);
@@ -564,8 +555,7 @@
 // Tests that removing a display while power event observer is waiting for the
 // wallpaper animation does not cause suspend to hang.
 TEST_F(PowerEventObserverTest, DisplayRemovedDuringWallpaperAnimation) {
-  chromeos::PowerManagerClient* client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+  chromeos::PowerManagerClient* client = chromeos::PowerManagerClient::Get();
   ASSERT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks());
 
   SetCanLockScreen(true);
diff --git a/ash/system/power/power_prefs_unittest.cc b/ash/system/power/power_prefs_unittest.cc
index 6f008de..097ab1a 100644
--- a/ash/system/power/power_prefs_unittest.cc
+++ b/ash/system/power/power_prefs_unittest.cc
@@ -17,7 +17,6 @@
 #include "ash/test/ash_test_base.h"
 #include "base/macros.h"
 #include "base/test/simple_test_tick_clock.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/idle.pb.h"
 #include "chromeos/dbus/power_policy_controller.h"
@@ -126,10 +125,6 @@
 
   // NoSessionAshTestBase:
   void SetUp() override {
-    fake_power_manager_client_ = new chromeos::FakePowerManagerClient;
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        base::WrapUnique(fake_power_manager_client_));
-
     NoSessionAshTestBase::SetUp();
 
     power_policy_controller_ = chromeos::PowerPolicyController::Get();
@@ -145,7 +140,7 @@
 
   std::string GetCurrentPowerPolicy() const {
     return chromeos::PowerPolicyController::GetPolicyDebugString(
-        fake_power_manager_client_->policy());
+        power_manager_client()->policy());
   }
 
   bool GetCurrentAllowScreenWakeLocks() const {
@@ -154,9 +149,9 @@
 
   std::vector<power_manager::PowerManagementPolicy_Action>
   GetCurrentPowerPolicyActions() const {
-    return {fake_power_manager_client_->policy().ac_idle_action(),
-            fake_power_manager_client_->policy().battery_idle_action(),
-            fake_power_manager_client_->policy().lid_closed_action()};
+    return {power_manager_client()->policy().ac_idle_action(),
+            power_manager_client()->policy().battery_idle_action(),
+            power_manager_client()->policy().lid_closed_action()};
   }
 
   void SetLockedState(ScreenLockState lock_state) {
@@ -168,12 +163,9 @@
   void NotifyScreenIdleOffChanged(bool off) {
     power_manager::ScreenIdleState proto;
     proto.set_off(off);
-    fake_power_manager_client_->SendScreenIdleStateChanged(proto);
+    power_manager_client()->SendScreenIdleStateChanged(proto);
   }
 
-  // Owned by chromeos::DBusThreadManager.
-  chromeos::FakePowerManagerClient* fake_power_manager_client_;
-
   chromeos::PowerPolicyController* power_policy_controller_ =
       nullptr;                         // Not owned.
   PowerPrefs* power_prefs_ = nullptr;  // Not owned.
diff --git a/ash/system/power/power_status.cc b/ash/system/power/power_status.cc
index b3ed193..082b203 100644
--- a/ash/system/power/power_status.cc
+++ b/ash/system/power/power_status.cc
@@ -240,9 +240,7 @@
 }
 
 void PowerStatus::RequestStatusUpdate() {
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->RequestStatusUpdate();
+  chromeos::PowerManagerClient::Get()->RequestStatusUpdate();
 }
 
 bool PowerStatus::IsBatteryPresent() const {
@@ -483,16 +481,12 @@
 }
 
 PowerStatus::PowerStatus() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->RequestStatusUpdate();
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
+  chromeos::PowerManagerClient::Get()->RequestStatusUpdate();
 }
 
 PowerStatus::~PowerStatus() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void PowerStatus::SetProtoForTesting(
diff --git a/ash/system/power/power_status_unittest.cc b/ash/system/power/power_status_unittest.cc
index 3a3e5c5..2021bd2 100644
--- a/ash/system/power/power_status_unittest.cc
+++ b/ash/system/power/power_status_unittest.cc
@@ -9,7 +9,7 @@
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 #include "ui/gfx/image/image.h"
@@ -47,7 +47,7 @@
   ~PowerStatusTest() override = default;
 
   void SetUp() override {
-    chromeos::DBusThreadManager::Initialize();
+    chromeos::PowerManagerClient::Initialize();
     PowerStatus::Initialize();
     power_status_ = PowerStatus::Get();
     test_observer_.reset(new TestObserver);
@@ -58,7 +58,7 @@
     power_status_->RemoveObserver(test_observer_.get());
     test_observer_.reset();
     PowerStatus::Shutdown();
-    chromeos::DBusThreadManager::Shutdown();
+    chromeos::PowerManagerClient::Shutdown();
   }
 
  protected:
diff --git a/ash/system/power/video_activity_notifier.cc b/ash/system/power/video_activity_notifier.cc
index 5b9bd97..f98f0354 100644
--- a/ash/system/power/video_activity_notifier.cc
+++ b/ash/system/power/video_activity_notifier.cc
@@ -71,10 +71,8 @@
 
 void VideoActivityNotifier::MaybeNotifyPowerManager() {
   if (should_notify_power_manager()) {
-    chromeos::DBusThreadManager::Get()
-        ->GetPowerManagerClient()
-        ->NotifyVideoActivity(video_state_ ==
-                              VideoDetector::State::PLAYING_FULLSCREEN);
+    chromeos::PowerManagerClient::Get()->NotifyVideoActivity(
+        video_state_ == VideoDetector::State::PLAYING_FULLSCREEN);
   }
 }
 
diff --git a/ash/system/power/video_activity_notifier_unittest.cc b/ash/system/power/video_activity_notifier_unittest.cc
index e72e526..04ff159 100644
--- a/ash/system/power/video_activity_notifier_unittest.cc
+++ b/ash/system/power/video_activity_notifier_unittest.cc
@@ -22,7 +22,7 @@
   void SetUp() override {
     AshTestBase::SetUp();
     power_client_ = static_cast<chromeos::FakePowerManagerClient*>(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+        chromeos::PowerManagerClient::Get());
     detector_ = std::make_unique<VideoDetector>();
     notifier_.reset(new VideoActivityNotifier(detector_.get()));
   }
diff --git a/ash/system/unified/unified_system_tray_model.cc b/ash/system/unified/unified_system_tray_model.cc
index a3156f7..51833c6 100644
--- a/ash/system/unified/unified_system_tray_model.cc
+++ b/ash/system/unified/unified_system_tray_model.cc
@@ -38,16 +38,14 @@
 UnifiedSystemTrayModel::DBusObserver::DBusObserver(
     UnifiedSystemTrayModel* owner)
     : owner_(owner) {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
   Shell::Get()->brightness_control_delegate()->GetBrightnessPercent(
       base::BindOnce(&DBusObserver::HandleInitialBrightness,
                      weak_ptr_factory_.GetWeakPtr()));
 }
 
 UnifiedSystemTrayModel::DBusObserver::~DBusObserver() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void UnifiedSystemTrayModel::DBusObserver::HandleInitialBrightness(
diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc
index 28b8d7d..ccaead4 100644
--- a/ash/test/ash_test_base.cc
+++ b/ash/test/ash_test_base.cc
@@ -35,6 +35,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
+#include "chromeos/dbus/fake_power_manager_client.h"
 #include "components/account_id/account_id.h"
 #include "components/user_manager/user_names.h"
 #include "mojo/public/cpp/bindings/map.h"
@@ -495,6 +496,10 @@
   return Shell::Get()->display_manager();
 }
 
+chromeos::FakePowerManagerClient* AshTestBase::power_manager_client() const {
+  return chromeos::FakePowerManagerClient::Get();
+}
+
 bool AshTestBase::TestIfMouseWarpsAt(ui::test::EventGenerator* event_generator,
                                      const gfx::Point& point_in_screen) {
   DCHECK(!Shell::Get()->display_manager()->IsInUnifiedMode());
diff --git a/ash/test/ash_test_base.h b/ash/test/ash_test_base.h
index 0440519..966d4e9 100644
--- a/ash/test/ash_test_base.h
+++ b/ash/test/ash_test_base.h
@@ -34,6 +34,10 @@
 }
 }  // namespace base
 
+namespace chromeos {
+class FakePowerManagerClient;
+}
+
 namespace display {
 class Display;
 class DisplayManager;
@@ -175,6 +179,9 @@
   // Convenience method to return the DisplayManager.
   display::DisplayManager* display_manager();
 
+  // Convenience method to return the FakePowerManagerClient.
+  chromeos::FakePowerManagerClient* power_manager_client() const;
+
   // Test if moving a mouse to |point_in_screen| warps it to another
   // display.
   bool TestIfMouseWarpsAt(ui::test::EventGenerator* event_generator,
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc
index 5af84c9..7b40345 100644
--- a/ash/test/ash_test_helper.cc
+++ b/ash/test/ash_test_helper.cc
@@ -168,9 +168,11 @@
     bluez_dbus_manager_initialized_ = true;
   }
 
+  chromeos::PowerManagerClient::Initialize();
+
   if (!chromeos::PowerPolicyController::IsInitialized()) {
     chromeos::PowerPolicyController::Initialize(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+        chromeos::PowerManagerClient::Get());
     power_policy_controller_initialized_ = true;
   }
 
@@ -261,6 +263,8 @@
     power_policy_controller_initialized_ = false;
   }
 
+  chromeos::PowerManagerClient::Shutdown();
+
   if (bluez_dbus_manager_initialized_) {
     device::BluetoothAdapterFactory::Shutdown();
     bluez::BluezDBusManager::Shutdown();
diff --git a/ash/test/ash_test_helper.h b/ash/test/ash_test_helper.h
index f306f6d..0a2c9a9 100644
--- a/ash/test/ash_test_helper.h
+++ b/ash/test/ash_test_helper.h
@@ -138,11 +138,9 @@
   std::unique_ptr<::wm::WMState> wm_state_;
   std::unique_ptr<AshTestViewsDelegate> test_views_delegate_;
 
-  // Check if DBus Thread Manager was initialized here.
+  // Flags for whether various services were initialized here.
   bool dbus_thread_manager_initialized_ = false;
-  // Check if Bluez DBus Manager was initialized here.
   bool bluez_dbus_manager_initialized_ = false;
-  // Check if PowerPolicyController was initialized here.
   bool power_policy_controller_initialized_ = false;
 
   std::unique_ptr<TestSessionControllerClient> session_controller_client_;
diff --git a/ash/wm/lock_state_controller_unittest.cc b/ash/wm/lock_state_controller_unittest.cc
index c466ad0..e6620ba 100644
--- a/ash/wm/lock_state_controller_unittest.cc
+++ b/ash/wm/lock_state_controller_unittest.cc
@@ -108,7 +108,7 @@
     power_manager::BacklightBrightnessChange change;
     change.set_percent(percent);
     change.set_cause(cause);
-    power_manager_client_->SendScreenBrightnessChanged(change);
+    power_manager_client()->SendScreenBrightnessChanged(change);
   }
 
   void ExpectPreLockAnimationStarted() {
diff --git a/ash/wm/tablet_mode/tablet_mode_controller.cc b/ash/wm/tablet_mode/tablet_mode_controller.cc
index ce569f3..e6bac9f 100644
--- a/ash/wm/tablet_mode/tablet_mode_controller.cc
+++ b/ash/wm/tablet_mode/tablet_mode_controller.cc
@@ -25,7 +25,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/tick_clock.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/display/display.h"
 #include "ui/display/manager/display_manager.h"
@@ -155,7 +155,7 @@
             base::Unretained(this)));
   }
   chromeos::PowerManagerClient* power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   power_manager_client->AddObserver(this);
   power_manager_client->GetSwitchStates(base::BindOnce(
       &TabletModeController::OnGetSwitchStates, weak_factory_.GetWeakPtr()));
@@ -182,8 +182,7 @@
     AccelerometerReader::GetInstance()->RemoveObserver(this);
     ui::InputDeviceManager::GetInstance()->RemoveObserver(this);
   }
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 
   for (auto& observer : tablet_mode_observers_)
     observer.OnTabletControllerDestroyed();
@@ -612,8 +611,7 @@
   // run on DUTs and require switching to/back tablet mode in runtime, like some
   // ARC++ Tast tests.
   AccelerometerReader::GetInstance()->RemoveObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
   EnableTabletModeWindowManager(enabled);
   std::move(callback).Run(IsTabletModeWindowManagerEnabled());
 }
diff --git a/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc b/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
index 2c7a081..90c50ef 100644
--- a/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
+++ b/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
@@ -656,11 +656,7 @@
 // state will trigger a mode update.
 TEST_F(TabletModeControllerTest, InitializedWhileTabletModeSwitchOn) {
   base::RunLoop().RunUntilIdle();
-  // FakePowerManagerClient is always installed for tests
-  chromeos::FakePowerManagerClient* power_manager_client =
-      static_cast<chromeos::FakePowerManagerClient*>(
-          chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
-  power_manager_client->SetTabletMode(
+  power_manager_client()->SetTabletMode(
       chromeos::PowerManagerClient::TabletMode::ON, base::TimeTicks::Now());
 
   // Clear the callback that was set by the original TabletModeController.
diff --git a/chrome/browser/apps/platform_apps/app_browsertest.cc b/chrome/browser/apps/platform_apps/app_browsertest.cc
index 14db9cd..9d9d74b 100644
--- a/chrome/browser/apps/platform_apps/app_browsertest.cc
+++ b/chrome/browser/apps/platform_apps/app_browsertest.cc
@@ -1226,16 +1226,12 @@
 
 class RestartDeviceTest : public PlatformAppBrowserTest {
  public:
-  RestartDeviceTest() : power_manager_client_(NULL), mock_user_manager_(NULL) {}
-  ~RestartDeviceTest() override {}
+  RestartDeviceTest() = default;
+  ~RestartDeviceTest() override = default;
 
   // PlatformAppBrowserTest overrides
   void SetUpInProcessBrowserTestFixture() override {
     PlatformAppBrowserTest::SetUpInProcessBrowserTestFixture();
-
-    power_manager_client_ = new chromeos::FakePowerManagerClient;
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::unique_ptr<chromeos::PowerManagerClient>(power_manager_client_));
   }
 
   void SetUpOnMainThread() override {
@@ -1264,12 +1260,11 @@
   }
 
   int num_request_restart_calls() const {
-    return power_manager_client_->num_request_restart_calls();
+    return chromeos::FakePowerManagerClient::Get()->num_request_restart_calls();
   }
 
  private:
-  chromeos::FakePowerManagerClient* power_manager_client_;
-  chromeos::MockUserManager* mock_user_manager_;
+  chromeos::MockUserManager* mock_user_manager_ = nullptr;
   std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
 
   DISALLOW_COPY_AND_ASSIGN(RestartDeviceTest);
diff --git a/chrome/browser/chromeos/app_mode/app_session.cc b/chrome/browser/chromeos/app_mode/app_session.cc
index 997a8fa..c615bfe 100644
--- a/chrome/browser/chromeos/app_mode/app_session.cc
+++ b/chrome/browser/chromeos/app_mode/app_session.cc
@@ -63,7 +63,7 @@
 }
 
 void RebootDevice() {
-  DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_OTHER, "kiosk app session");
 }
 
diff --git a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc
index d900280..ff67637 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc
@@ -60,13 +60,12 @@
 KioskModeIdleAppNameNotification::~KioskModeIdleAppNameNotification() {
   ui::UserActivityDetector* user_activity_detector =
       ui::UserActivityDetector::Get();
-  if (user_activity_detector && user_activity_detector->HasObserver(this)) {
+  if (user_activity_detector && user_activity_detector->HasObserver(this))
     user_activity_detector->RemoveObserver(this);
-    // At this time the DBusThreadManager might already be gone.
-    if (chromeos::DBusThreadManager::IsInitialized())
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient(
-          )->RemoveObserver(this);
-  }
+
+  auto* power_manager = chromeos::PowerManagerClient::Get();
+  if (power_manager && power_manager->HasObserver(this))
+    power_manager->RemoveObserver(this);
 }
 
 void KioskModeIdleAppNameNotification::Setup() {
@@ -110,8 +109,7 @@
 void KioskModeIdleAppNameNotification::Start() {
   if (!ui::UserActivityDetector::Get()->HasObserver(this)) {
     ui::UserActivityDetector::Get()->AddObserver(this);
-    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-        this);
+    chromeos::PowerManagerClient::Get()->AddObserver(this);
   }
   ResetTimer();
 }
diff --git a/chrome/browser/chromeos/arc/arc_migration_guide_notification.cc b/chrome/browser/chromeos/arc/arc_migration_guide_notification.cc
index 37d113e..4e8b4ee 100644
--- a/chrome/browser/chromeos/arc/arc_migration_guide_notification.cc
+++ b/chrome/browser/chromeos/arc/arc_migration_guide_notification.cc
@@ -44,9 +44,7 @@
       multi_user_util::GetAccountIdFromProfile(profile).GetUserEmail();
 
   base::Optional<power_manager::PowerSupplyProperties> power =
-      chromeos::DBusThreadManager::Get()
-          ->GetPowerManagerClient()
-          ->GetLastStatus();
+      chromeos::PowerManagerClient::Get()->GetLastStatus();
   const bool is_low_battery =
       power &&
       power->battery_state() !=
diff --git a/chrome/browser/chromeos/arc/arc_migration_guide_notification_unittest.cc b/chrome/browser/chromeos/arc/arc_migration_guide_notification_unittest.cc
index a55f9b7..30e1f34 100644
--- a/chrome/browser/chromeos/arc/arc_migration_guide_notification_unittest.cc
+++ b/chrome/browser/chromeos/arc/arc_migration_guide_notification_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/test/base/testing_profile.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "components/sync_preferences/pref_service_syncable.h"
 #include "content/public/test/test_browser_thread_bundle.h"
@@ -25,11 +24,8 @@
   TestingProfile profile;
 
   // Set a high battery state.
-  auto power_manager_client =
-      std::make_unique<chromeos::FakePowerManagerClient>();
-  auto* power_manager = power_manager_client.get();
-  chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-      std::move(power_manager_client));
+  chromeos::PowerManagerClient::Initialize();
+  auto* power_manager = chromeos::FakePowerManagerClient::Get();
   power_manager::PowerSupplyProperties props = *power_manager->GetLastStatus();
   props.set_battery_percent(99);
   power_manager->UpdatePowerProperties(props);
@@ -58,6 +54,8 @@
   EXPECT_NE(message, notifications[0].message());
   EXPECT_THAT(base::UTF16ToUTF8(notifications[0].message()),
               HasSubstr("charge"));
+
+  chromeos::PowerManagerClient::Shutdown();
 }
 
 }  // namespace arc
diff --git a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc b/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc
index 2f7a25d..d184c47 100644
--- a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc
+++ b/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc
@@ -42,6 +42,7 @@
 #include "chromeos/constants/chromeos_switches.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_session_manager_client.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "components/account_id/account_id.h"
 #include "components/arc/arc_features.h"
 #include "components/arc/arc_prefs.h"
@@ -102,8 +103,6 @@
     chromeos::DBusThreadManager::GetSetterForTesting()->SetSessionManagerClient(
         std::make_unique<chromeos::FakeSessionManagerClient>());
 
-    chromeos::DBusThreadManager::Initialize();
-
     ArcSessionManager::SetUiEnabledForTesting(false);
     SetArcBlockedDueToIncompatibleFileSystemForTesting(false);
 
@@ -181,7 +180,7 @@
     chromeos::DBusThreadManager::GetSetterForTesting()->SetSessionManagerClient(
         std::make_unique<chromeos::FakeSessionManagerClient>());
 
-    chromeos::DBusThreadManager::Initialize();
+    chromeos::PowerManagerClient::Initialize();
 
     SetArcAvailableCommandLineForTesting(
         base::CommandLine::ForCurrentProcess());
@@ -209,6 +208,7 @@
     profile_.reset();
     arc_session_manager_.reset();
     arc_service_manager_.reset();
+    chromeos::PowerManagerClient::Shutdown();
     chromeos::DBusThreadManager::Shutdown();
   }
 
diff --git a/chrome/browser/chromeos/attestation/enrollment_policy_observer_unittest.cc b/chrome/browser/chromeos/attestation/enrollment_policy_observer_unittest.cc
index af82a75..85b8173 100644
--- a/chrome/browser/chromeos/attestation/enrollment_policy_observer_unittest.cc
+++ b/chrome/browser/chromeos/attestation/enrollment_policy_observer_unittest.cc
@@ -80,7 +80,11 @@
 
 class EnrollmentPolicyObserverTest : public DeviceSettingsTestBase {
  public:
-  EnrollmentPolicyObserverTest() {
+  EnrollmentPolicyObserverTest() = default;
+  ~EnrollmentPolicyObserverTest() override = default;
+
+  void SetUp() override {
+    DeviceSettingsTestBase::SetUp();
     policy_client_.SetDMToken("fake_dm_token");
 
     std::vector<uint8_t> eid;
@@ -91,13 +95,18 @@
         true /* ignore_cache */, enrollment_id_);
   }
 
+  void TearDown() override {
+    observer_.reset();
+    DeviceSettingsTestBase::TearDown();
+  }
+
  protected:
   static constexpr char kEnrollmentId[] =
       "6fcc0ebddec3db9500cf82476d594f4d60db934c5b47fa6085c707b2a93e205b";
 
   void SetUpObserver() {
     observer_ = std::make_unique<EnrollmentPolicyObserver>(
-        &policy_client_, &device_settings_service_, &cryptohome_client_);
+        &policy_client_, device_settings_service_.get(), &cryptohome_client_);
     observer_->set_retry_limit(3);
     observer_->set_retry_delay(0);
   }
@@ -109,7 +118,8 @@
   }
 
   void SetUpDevicePolicy(bool enrollment_id_needed) {
-    device_policy_.policy_data().set_enrollment_id_needed(enrollment_id_needed);
+    device_policy_->policy_data().set_enrollment_id_needed(
+        enrollment_id_needed);
   }
 
   void PropagateDevicePolicy() {
@@ -125,6 +135,9 @@
   StrictMock<policy::MockCloudPolicyClient> policy_client_;
   std::unique_ptr<EnrollmentPolicyObserver> observer_;
   std::string enrollment_id_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(EnrollmentPolicyObserverTest);
 };
 
 constexpr char EnrollmentPolicyObserverTest::kEnrollmentId[];
diff --git a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.cc b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.cc
index 3b29fb8..22a9d78b 100644
--- a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.cc
+++ b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.cc
@@ -55,7 +55,7 @@
     arc_app_prefs->AddObserver(this);
   session_manager::SessionManager::Get()->AddObserver(this);
   content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
-  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+  PowerManagerClient::Get()->AddObserver(this);
   ScreenTimeControllerFactory::GetForBrowserContext(context_)->AddObserver(
       this);
 }
@@ -129,7 +129,7 @@
     arc_app_prefs->RemoveObserver(this);
   session_manager::SessionManager::Get()->RemoveObserver(this);
   content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this);
-  DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+  PowerManagerClient::Get()->RemoveObserver(this);
   ScreenTimeControllerFactory::GetForBrowserContext(context_)->RemoveObserver(
       this);
 }
diff --git a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc
index 86c432c..2c693c3 100644
--- a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc
+++ b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc
@@ -18,7 +18,6 @@
 #include "chrome/browser/supervised_user/supervised_user_constants.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_test.h"
 #include "chrome/test/base/testing_profile.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/system_clock/system_clock_client.h"
 #include "components/account_id/account_id.h"
@@ -88,10 +87,7 @@
   ~EventBasedStatusReportingServiceTest() override = default;
 
   void SetUp() override {
-    std::unique_ptr<DBusThreadManagerSetter> dbus_setter =
-        DBusThreadManager::GetSetterForTesting();
-    dbus_setter->SetPowerManagerClient(
-        std::make_unique<FakePowerManagerClient>());
+    PowerManagerClient::Initialize();
     SystemClockClient::Initialize(nullptr /* bus */);
     profile_ = std::make_unique<TestingProfile>();
     profile_.get()->SetSupervisedUserId(supervised_users::kChildAccountSUID);
@@ -128,7 +124,7 @@
     service_->Shutdown();
     arc_test_.TearDown();
     profile_.reset();
-    DBusThreadManager::Shutdown();
+    PowerManagerClient::Shutdown();
   }
 
   void SetConnectionType(network::mojom::ConnectionType type) {
@@ -140,8 +136,7 @@
   arc::mojom::AppHost* app_host() { return arc_test_.arc_app_list_prefs(); }
   Profile* profile() { return profile_.get(); }
   FakePowerManagerClient* power_manager_client() {
-    return static_cast<FakePowerManagerClient*>(
-        DBusThreadManager::Get()->GetPowerManagerClient());
+    return FakePowerManagerClient::Get();
   }
 
   TestingConsumerStatusReportingService*
diff --git a/chrome/browser/chromeos/child_accounts/usage_time_state_notifier.cc b/chrome/browser/chromeos/child_accounts/usage_time_state_notifier.cc
index dd5e372..b8de0ff 100644
--- a/chrome/browser/chromeos/child_accounts/usage_time_state_notifier.cc
+++ b/chrome/browser/chromeos/child_accounts/usage_time_state_notifier.cc
@@ -39,7 +39,7 @@
   DCHECK(observer);
   if (!observers_.might_have_observers()) {
     session_manager::SessionManager::Get()->AddObserver(this);
-    DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+    PowerManagerClient::Get()->AddObserver(this);
     last_state_ = GetCurrentState();
   }
   observers_.AddObserver(observer);
@@ -51,7 +51,7 @@
   observers_.RemoveObserver(observer);
   if (!observers_.might_have_observers()) {
     session_manager::SessionManager::Get()->RemoveObserver(this);
-    DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+    PowerManagerClient::Get()->RemoveObserver(this);
   }
 }
 
diff --git a/chrome/browser/chromeos/child_accounts/usage_time_state_notifier_unittest.cc b/chrome/browser/chromeos/child_accounts/usage_time_state_notifier_unittest.cc
index 2b794c4..b45f894 100644
--- a/chrome/browser/chromeos/child_accounts/usage_time_state_notifier_unittest.cc
+++ b/chrome/browser/chromeos/child_accounts/usage_time_state_notifier_unittest.cc
@@ -8,7 +8,6 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "components/session_manager/core/session_manager.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -47,14 +46,12 @@
   ~UsageTimeStateNotifierTest() override = default;
 
   void SetUp() override {
-    DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::make_unique<FakePowerManagerClient>());
-
+    PowerManagerClient::Initialize();
     session_manager_.SetSessionState(
         session_manager::SessionState::LOGIN_PRIMARY);
   }
 
-  void TearDown() override { DBusThreadManager::Shutdown(); }
+  void TearDown() override { PowerManagerClient::Shutdown(); }
 
   void NotifyScreenIdleOffChanged(bool off) {
     power_manager::ScreenIdleState proto;
@@ -63,8 +60,7 @@
   }
 
   FakePowerManagerClient* power_manager_client() {
-    return static_cast<FakePowerManagerClient*>(
-        DBusThreadManager::Get()->GetPowerManagerClient());
+    return FakePowerManagerClient::Get();
   }
 
   session_manager::SessionManager* session_manager() {
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
index bc5770c..4e8b5a0 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -285,8 +285,7 @@
 
     if (!::features::IsMultiProcessMash()) {
       // In Mash, power policy is sent to powerd by ash.
-      PowerPolicyController::Initialize(
-          DBusThreadManager::Get()->GetPowerManagerClient());
+      PowerPolicyController::Initialize(PowerManagerClient::Get());
     }
 
     dbus::Bus* system_bus = DBusThreadManager::Get()->IsUsingFakes()
@@ -940,8 +939,7 @@
       std::make_unique<FreezerCgroupProcessManager>());
 
   power_metrics_reporter_ = std::make_unique<PowerMetricsReporter>(
-      DBusThreadManager::Get()->GetPowerManagerClient(),
-      g_browser_process->local_state());
+      PowerManagerClient::Get(), g_browser_process->local_state());
 
   g_browser_process->platform_part()->InitializeAutomaticRebootManager();
   user_removal_manager::RemoveUsersIfNeeded();
diff --git a/chrome/browser/chromeos/dbus/dbus_helper.cc b/chrome/browser/chromeos/dbus/dbus_helper.cc
index 7ee3868..9f13621 100644
--- a/chrome/browser/chromeos/dbus/dbus_helper.cc
+++ b/chrome/browser/chromeos/dbus/dbus_helper.cc
@@ -7,6 +7,7 @@
 #include "chrome/browser/chromeos/settings/device_settings_service.h"
 #include "chromeos/cryptohome/system_salt_getter.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/dbus/system_clock/system_clock_client.h"
 #include "chromeos/tpm/install_attributes.h"
 
@@ -20,6 +21,7 @@
 
   // Initialize Chrome dbus clients.
   dbus::Bus* bus = DBusThreadManager::Get()->GetSystemBus();
+  PowerManagerClient::Initialize(bus);
   SystemClockClient::Initialize(bus);
 
   // Initialize the device settings service so that we'll take actions per
@@ -31,6 +33,7 @@
 
 void ShutdownDBus() {
   // NOTE: These must only be called if InitializeDBus() was called.
+  PowerManagerClient::Shutdown();
   SystemClockClient::Shutdown();
   DBusThreadManager::Shutdown();
   SystemSaltGetter::Shutdown();
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
index 56e89cf1..4f0d6db0 100644
--- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
@@ -36,7 +36,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
 #include "chromeos/components/drivefs/drivefs_host.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/disks/disk.h"
 #include "chromeos/login/login_state/login_state.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
@@ -504,7 +504,7 @@
   }
 
   chromeos::PowerManagerClient* const power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   power_manager_client->RemoveObserver(device_event_router_.get());
 
   profile_ = nullptr;
@@ -533,7 +533,7 @@
   }
 
   chromeos::PowerManagerClient* const power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   power_manager_client->AddObserver(device_event_router_.get());
 
   DriveIntegrationService* const integration_service =
diff --git a/chrome/browser/chromeos/file_manager/volume_manager_factory.cc b/chrome/browser/chromeos/file_manager/volume_manager_factory.cc
index 4ff5dad..37543d4 100644
--- a/chrome/browser/chromeos/file_manager/volume_manager_factory.cc
+++ b/chrome/browser/chromeos/file_manager/volume_manager_factory.cc
@@ -11,7 +11,7 @@
 #include "chrome/browser/chromeos/file_system_provider/service_factory.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/disks/disk_mount_manager.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/storage_monitor/storage_monitor.h"
@@ -46,7 +46,7 @@
   Profile* const profile = Profile::FromBrowserContext(context);
   VolumeManager* instance = new VolumeManager(
       profile, drive::DriveIntegrationServiceFactory::GetForProfile(profile),
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient(),
+      chromeos::PowerManagerClient::Get(),
       chromeos::disks::DiskMountManager::GetInstance(),
       chromeos::file_system_provider::ServiceFactory::Get(context),
       VolumeManager::GetMtpStorageInfoCallback());
diff --git a/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc b/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc
index ad53b0e..4343288 100644
--- a/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc
+++ b/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc
@@ -244,11 +244,10 @@
   };
 
   void SetUp() override {
-    power_manager_client_ =
-        std::make_unique<chromeos::FakePowerManagerClient>();
+    chromeos::PowerManagerClient::Initialize();
     disk_mount_manager_ = std::make_unique<FakeDiskMountManager>();
     main_profile_ = std::make_unique<ProfileEnvironment>(
-        power_manager_client_.get(), disk_mount_manager_.get());
+        chromeos::PowerManagerClient::Get(), disk_mount_manager_.get());
   }
 
   Profile* profile() const { return main_profile_->profile(); }
@@ -258,7 +257,6 @@
 
   content::TestBrowserThreadBundle thread_bundle_;
   content::TestServiceManagerContext context_;
-  std::unique_ptr<chromeos::FakePowerManagerClient> power_manager_client_;
   std::unique_ptr<FakeDiskMountManager> disk_mount_manager_;
   std::unique_ptr<ProfileEnvironment> main_profile_;
 };
@@ -624,9 +622,9 @@
 
   // Emulate system suspend and then resume.
   {
-    power_manager_client_->SendSuspendImminent(
+    chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
         power_manager::SuspendImminent_Reason_OTHER);
-    power_manager_client_->SendSuspendDone();
+    chromeos::FakePowerManagerClient::Get()->SendSuspendDone();
 
     // After resume, the device is unmounted and then mounted.
     volume_manager()->OnMountEvent(DiskMountManager::UNMOUNTING,
@@ -783,7 +781,7 @@
 }
 
 TEST_F(VolumeManagerTest, ExternalStorageDisabledPolicyMultiProfile) {
-  ProfileEnvironment secondary(power_manager_client_.get(),
+  ProfileEnvironment secondary(chromeos::PowerManagerClient::Get(),
                                disk_mount_manager_.get());
   volume_manager()->Initialize();
   secondary.volume_manager()->Initialize();
diff --git a/chrome/browser/chromeos/lock_screen_apps/state_controller.cc b/chrome/browser/chromeos/lock_screen_apps/state_controller.cc
index 789a666..92d6a65 100644
--- a/chrome/browser/chromeos/lock_screen_apps/state_controller.cc
+++ b/chrome/browser/chromeos/lock_screen_apps/state_controller.cc
@@ -251,8 +251,7 @@
 void StateController::InitializeWithStylusInputPresent() {
   stylus_input_missing_ = false;
 
-  power_manager_client_observer_.Add(
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+  power_manager_client_observer_.Add(chromeos::PowerManagerClient::Get());
   session_observer_.Add(session_manager::SessionManager::Get());
   OnSessionStateChanged();
 
diff --git a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
index 262d48b..36f7d31 100644
--- a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
+++ b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
@@ -37,7 +37,6 @@
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
 #include "components/arc/arc_service_manager.h"
@@ -384,11 +383,6 @@
     command_line_->GetProcessCommandLine()->InitFromArgv({""});
     SetUpCommandLine(command_line_->GetProcessCommandLine());
 
-    std::unique_ptr<chromeos::DBusThreadManagerSetter> dbus_setter =
-        chromeos::DBusThreadManager::GetSetterForTesting();
-    dbus_setter->SetPowerManagerClient(
-        std::make_unique<chromeos::FakePowerManagerClient>());
-
     BrowserWithTestWindowTest::SetUp();
 
     SetUpStylusAvailability();
@@ -626,11 +620,6 @@
     return lock_screen_profile_creator_->lock_screen_profile();
   }
 
-  chromeos::FakePowerManagerClient* GetPowerManagerClient() {
-    return static_cast<chromeos::FakePowerManagerClient*>(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
-  }
-
   session_manager::SessionManager* session_manager() {
     return session_manager_.get();
   }
@@ -665,7 +654,6 @@
   // in |InitializeNoteTakingApp|)
   bool is_first_app_run_test_ = false;
 
- private:
   std::unique_ptr<base::test::ScopedCommandLine> command_line_;
 
   chromeos::FakeChromeUserManager* fake_user_manager_;
@@ -1241,7 +1229,7 @@
   ASSERT_TRUE(InitializeNoteTakingApp(TrayActionState::kActive,
                                       true /* enable_app_launch */));
 
-  GetPowerManagerClient()->SendSuspendImminent(
+  chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(TrayActionState::kAvailable,
             state_controller()->GetLockScreenNoteState());
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.cc
index 4b25e598..39feb81 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.cc
@@ -145,12 +145,10 @@
  public:
   explicit PowerMonitor(EasyUnlockService* service)
       : service_(service), waking_up_(false), weak_ptr_factory_(this) {
-    DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+    PowerManagerClient::Get()->AddObserver(this);
   }
 
-  ~PowerMonitor() override {
-    DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
-  }
+  ~PowerMonitor() override { PowerManagerClient::Get()->RemoveObserver(this); }
 
   // Called when the remote device has been authenticated to record the time
   // delta from waking up. No time will be recorded if the start-up time has
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_unittest_chromeos.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_unittest_chromeos.cc
index 829a87d..f4fccec 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_unittest_chromeos.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_unittest_chromeos.cc
@@ -28,8 +28,6 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_power_manager_client.h"
-#include "chromeos/dbus/power_manager/suspend.pb.h"
 #include "chromeos/services/device_sync/public/cpp/fake_device_sync_client.h"
 #include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
 #include "components/account_id/account_id.h"
@@ -113,12 +111,6 @@
         .WillRepeatedly(testing::Invoke(
             this, &EasyUnlockServiceTest::is_bluetooth_adapter_present));
 
-    std::unique_ptr<DBusThreadManagerSetter> dbus_setter =
-        DBusThreadManager::GetSetterForTesting();
-    power_manager_client_ = new FakePowerManagerClient;
-    dbus_setter->SetPowerManagerClient(
-        std::unique_ptr<PowerManagerClient>(power_manager_client_));
-
     ON_CALL(*mock_user_manager_, Shutdown()).WillByDefault(Return());
     ON_CALL(*mock_user_manager_, IsLoggedInAsUserWithGaiaAccount())
         .WillByDefault(Return(true));
@@ -148,10 +140,6 @@
     return is_bluetooth_adapter_present_;
   }
 
-  FakePowerManagerClient* power_manager_client() {
-    return power_manager_client_;
-  }
-
   // Sets up a test profile using the provided |email|. Will generate a unique
   // gaia id and output to |gaia_id|. Returns the created TestingProfile.
   std::unique_ptr<TestingProfile> SetUpProfile(const std::string& email,
@@ -194,17 +182,15 @@
   std::string secondary_profile_gaia_id_;
   MockUserManager* mock_user_manager_;
 
- private:
   user_manager::ScopedUserManager scoped_user_manager_;
 
-  FakePowerManagerClient* power_manager_client_;
-
   bool is_bluetooth_adapter_present_;
   scoped_refptr<testing::NiceMock<MockBluetoothAdapter>> mock_adapter_;
 
   // PrefService which contains the browser process' local storage.
   TestingPrefServiceSimple local_pref_service_;
 
+ private:
   DISALLOW_COPY_AND_ASSIGN(EasyUnlockServiceTest);
 };
 
diff --git a/chrome/browser/chromeos/login/enable_debugging_browsertest.cc b/chrome/browser/chromeos/login/enable_debugging_browsertest.cc
index 8be9c73..a11a76c 100644
--- a/chrome/browser/chromeos/login/enable_debugging_browsertest.cc
+++ b/chrome/browser/chromeos/login/enable_debugging_browsertest.cc
@@ -156,9 +156,7 @@
 class EnableDebuggingTest : public LoginManagerTest {
  public:
   EnableDebuggingTest()
-      : LoginManagerTest(false, true /* should_initialize_webui */),
-        debug_daemon_client_(NULL),
-        power_manager_client_(NULL) {}
+      : LoginManagerTest(false, true /* should_initialize_webui */) {}
   ~EnableDebuggingTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -173,9 +171,6 @@
   void SetUpInProcessBrowserTestFixture() override {
     std::unique_ptr<DBusThreadManagerSetter> dbus_setter =
         chromeos::DBusThreadManager::GetSetterForTesting();
-    power_manager_client_ = new FakePowerManagerClient;
-    dbus_setter->SetPowerManagerClient(
-        std::unique_ptr<PowerManagerClient>(power_manager_client_));
     debug_daemon_client_ = new TestDebugDaemonClient;
     dbus_setter->SetDebugDaemonClient(
         std::unique_ptr<DebugDaemonClient>(debug_daemon_client_));
@@ -259,8 +254,10 @@
         "!document.querySelector('#debugging.wait-view')");
   }
 
-  TestDebugDaemonClient* debug_daemon_client_;
-  FakePowerManagerClient* power_manager_client_;
+  TestDebugDaemonClient* debug_daemon_client_ = nullptr;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(EnableDebuggingTest);
 };
 
 // Show remove protection screen, click on [Cancel] button.
@@ -286,7 +283,7 @@
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(debug_daemon_client_->num_remove_protection(), 1);
   EXPECT_EQ(debug_daemon_client_->num_enable_debugging_features(), 0);
-  EXPECT_EQ(power_manager_client_->num_request_restart_calls(), 1);
+  EXPECT_EQ(FakePowerManagerClient::Get()->num_request_restart_calls(), 1);
 }
 
 // Show setup screen. Click on [Enable] button. Wait until done screen is shown.
diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc
index 54eb691..01676f4 100644
--- a/chrome/browser/chromeos/login/reset_browsertest.cc
+++ b/chrome/browser/chromeos/login/reset_browsertest.cc
@@ -33,11 +33,7 @@
 
 class ResetTest : public LoginManagerTest {
  public:
-  ResetTest()
-      : LoginManagerTest(false, true /* should_initialize_webui */),
-        update_engine_client_(NULL),
-        session_manager_client_(NULL),
-        power_manager_client_(NULL) {}
+  ResetTest() : LoginManagerTest(false, true /* should_initialize_webui */) {}
   ~ResetTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -51,9 +47,6 @@
     session_manager_client_ = new FakeSessionManagerClient;
     dbus_setter->SetSessionManagerClient(
         std::unique_ptr<SessionManagerClient>(session_manager_client_));
-    power_manager_client_ = new FakePowerManagerClient;
-    dbus_setter->SetPowerManagerClient(
-        std::unique_ptr<PowerManagerClient>(power_manager_client_));
     update_engine_client_ = new FakeUpdateEngineClient;
     dbus_setter->SetUpdateEngineClient(
         std::unique_ptr<UpdateEngineClient>(update_engine_client_));
@@ -103,9 +96,11 @@
         "['reset-confirm-dismissed']);");
   }
 
-  FakeUpdateEngineClient* update_engine_client_;
-  FakeSessionManagerClient* session_manager_client_;
-  FakePowerManagerClient* power_manager_client_;
+  FakeUpdateEngineClient* update_engine_client_ = nullptr;
+  FakeSessionManagerClient* session_manager_client_ = nullptr;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ResetTest);
 };
 
 class ResetFirstAfterBootTest : public ResetTest {
@@ -138,10 +133,10 @@
   PrefService* prefs = g_browser_process->local_state();
 
   InvokeResetScreen();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
   ClickRestartButton();
-  ASSERT_EQ(1, power_manager_client_->num_request_restart_calls());
+  ASSERT_EQ(1, FakePowerManagerClient::Get()->num_request_restart_calls());
   ASSERT_EQ(0, session_manager_client_->start_device_wipe_call_count());
 
   EXPECT_TRUE(prefs->GetBoolean(prefs::kFactoryResetRequested));
@@ -218,13 +213,13 @@
   update_engine_client_->set_can_rollback_check_result(false);
 
   InvokeResetScreen();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   InvokeRollbackOption();  // No changes
   ClickToConfirmButton();
   ClickResetButton();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   CloseResetScreen();
@@ -236,7 +231,7 @@
   InvokeResetScreen();
   ClickToConfirmButton();
   ClickResetButton();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   CloseResetScreen();
@@ -253,12 +248,12 @@
   PrefService* prefs = g_browser_process->local_state();
 
   InvokeResetScreen();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   ClickToConfirmButton();
   ClickResetButton();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   CloseResetScreen();
@@ -273,7 +268,7 @@
   InvokeResetScreen();
   ClickToConfirmButton();
   ClickResetButton();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   CloseResetScreen();
@@ -284,7 +279,7 @@
   InvokeRollbackOption();  // Shows rollback.
   ClickToConfirmButton();
   ClickResetButton();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(1, update_engine_client_->rollback_call_count());
 }
@@ -298,7 +293,7 @@
 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ErrorOnRollbackRequested) {
   update_engine_client_->set_can_rollback_check_result(true);
   OobeScreenWaiter(OobeScreen::SCREEN_OOBE_RESET).Wait();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   test::OobeJS().ExpectTrue(
@@ -306,7 +301,7 @@
   InvokeRollbackOption();
   ClickToConfirmButton();
   ClickResetButton();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(1, update_engine_client_->rollback_call_count());
   test::OobeJS().ExpectTrue(
@@ -326,7 +321,7 @@
 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, RevertAfterCancel) {
   update_engine_client_->set_can_rollback_check_result(true);
   OobeScreenWaiter(OobeScreen::SCREEN_OOBE_RESET).Wait();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   test::OobeJS().ExpectTrue(
diff --git a/chrome/browser/chromeos/login/screens/error_screen.cc b/chrome/browser/chromeos/login/screens/error_screen.cc
index dc2829b..9d710678 100644
--- a/chrome/browser/chromeos/login/screens/error_screen.cc
+++ b/chrome/browser/chromeos/login/screens/error_screen.cc
@@ -322,7 +322,7 @@
 }
 
 void ErrorScreen::OnRebootButtonClicked() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  chromeos::PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_FOR_USER, "login error screen");
 }
 
diff --git a/chrome/browser/chromeos/login/screens/reset_screen.cc b/chrome/browser/chromeos/login/screens/reset_screen.cc
index fcdff05..3f65c5b 100644
--- a/chrome/browser/chromeos/login/screens/reset_screen.cc
+++ b/chrome/browser/chromeos/login/screens/reset_screen.cc
@@ -292,7 +292,7 @@
   }
   prefs->CommitPendingWrite();
 
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  chromeos::PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_FOR_USER, "login reset screen restart");
 }
 
@@ -356,7 +356,7 @@
     get_base_screen_delegate()->ShowErrorScreen();
   } else if (status.status ==
              UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT) {
-    DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+    PowerManagerClient::Get()->RequestRestart(
         power_manager::REQUEST_RESTART_FOR_UPDATE, "login reset screen update");
   }
 }
diff --git a/chrome/browser/chromeos/network_change_manager_client.cc b/chrome/browser/chromeos/network_change_manager_client.cc
index 315af6c3..f64f37f 100644
--- a/chrome/browser/chromeos/network_change_manager_client.cc
+++ b/chrome/browser/chromeos/network_change_manager_client.cc
@@ -22,7 +22,7 @@
     : connection_type_(net::NetworkChangeNotifier::CONNECTION_NONE),
       connection_subtype_(net::NetworkChangeNotifier::SUBTYPE_NONE),
       network_change_notifier_(network_change_notifier) {
-  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+  PowerManagerClient::Get()->AddObserver(this);
   NetworkHandler::Get()->network_state_handler()->AddObserver(this, FROM_HERE);
 
   if (content::IsOutOfProcessNetworkService())
@@ -36,7 +36,7 @@
 NetworkChangeManagerClient::~NetworkChangeManagerClient() {
   NetworkHandler::Get()->network_state_handler()->RemoveObserver(this,
                                                                  FROM_HERE);
-  DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+  PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void NetworkChangeManagerClient::SuspendDone(
diff --git a/chrome/browser/chromeos/network_change_manager_client_unittest.cc b/chrome/browser/chromeos/network_change_manager_client_unittest.cc
index c4ed835..e0e1df6 100644
--- a/chrome/browser/chromeos/network_change_manager_client_unittest.cc
+++ b/chrome/browser/chromeos/network_change_manager_client_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/stl_util.h"
 #include "base/strings/string_split.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/network/network_handler.h"
 #include "chromeos/network/network_state.h"
 #include "content/public/test/test_browser_thread_bundle.h"
@@ -107,16 +108,26 @@
 
 class NetworkChangeManagerClientUpdateTest : public testing::Test {
  protected:
-  NetworkChangeManagerClientUpdateTest() : default_network_("") {
+  NetworkChangeManagerClientUpdateTest() : default_network_("") {}
+  ~NetworkChangeManagerClientUpdateTest() override = default;
+
+  void SetUp() override {
     network_change_notifier_.reset(net::NetworkChangeNotifier::Create());
     DBusThreadManager::Initialize();
+    PowerManagerClient::Initialize();
     NetworkHandler::Initialize();
-    proxy_.reset(new NetworkChangeManagerClient(
+    proxy_ = std::make_unique<NetworkChangeManagerClient>(
         static_cast<net::NetworkChangeNotifierPosix*>(
-            network_change_notifier_.get())));
+            network_change_notifier_.get()));
   }
 
-  ~NetworkChangeManagerClientUpdateTest() override = default;
+  void TearDown() override {
+    proxy_.reset();
+    NetworkHandler::Shutdown();
+    PowerManagerClient::Shutdown();
+    DBusThreadManager::Shutdown();
+    network_change_notifier_.reset();
+  }
 
   void SetNotifierState(const NotifierState& notifier_state) {
     proxy_->connection_type_ = notifier_state.type;
@@ -172,6 +183,8 @@
   NetworkState default_network_;
   std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_;
   std::unique_ptr<NetworkChangeManagerClient> proxy_;
+
+  DISALLOW_COPY_AND_ASSIGN(NetworkChangeManagerClientUpdateTest);
 };
 
 NotifierUpdateTestCase test_cases[] = {
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
index 4c0ce09..68470c2 100644
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
@@ -98,11 +98,12 @@
   void SetUp() override {
     DeviceSettingsTestBase::SetUp();
     provider_.reset(new DeviceSettingsProvider(
-        base::Bind(&OnPrefChanged), &device_settings_service_,
+        base::Bind(&OnPrefChanged), device_settings_service_.get(),
         TestingBrowserProcess::GetGlobal()->local_state()));
-    owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
-    InitOwner(AccountId::FromUserEmail(device_policy_.policy_data().username()),
-              true);
+    owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
+    InitOwner(
+        AccountId::FromUserEmail(device_policy_->policy_data().username()),
+        true);
     FlushDeviceSettings();
 
     service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
@@ -110,13 +111,18 @@
     ASSERT_TRUE(service_);
     ASSERT_TRUE(service_->IsOwner());
 
-    device_policy_.policy_data().set_management_mode(
+    device_policy_->policy_data().set_management_mode(
         em::PolicyData::LOCAL_OWNER);
-    device_policy_.Build();
-    session_manager_client_.set_device_policy(device_policy_.GetBlob());
+    device_policy_->Build();
+    session_manager_client_.set_device_policy(device_policy_->GetBlob());
     ReloadDeviceSettings();
   }
 
+  void TearDown() override {
+    provider_.reset();
+    DeviceSettingsTestBase::TearDown();
+  }
+
   void TestSingleSet(OwnerSettingsServiceChromeOS* service,
                      const std::string& setting,
                      const base::Value& in_value) {
@@ -175,17 +181,17 @@
   checker.Wait();
 
   // Check that DeviceSettingsService's policy isn't updated.
-  ASSERT_EQ(current_channel, device_settings_service_.device_settings()
+  ASSERT_EQ(current_channel, device_settings_service_->device_settings()
                                  ->release_channel()
                                  .release_channel());
 }
 
 TEST_F(OwnerSettingsServiceChromeOSTest, ForceWhitelist) {
-  EXPECT_FALSE(FindInListValue(device_policy_.policy_data().username(),
+  EXPECT_FALSE(FindInListValue(device_policy_->policy_data().username(),
                                provider_->Get(kAccountsPrefUsers)));
   // Force a settings write.
   TestSingleSet(service_, kReleaseChannel, base::Value("dev-channel"));
-  EXPECT_TRUE(FindInListValue(device_policy_.policy_data().username(),
+  EXPECT_TRUE(FindInListValue(device_policy_->policy_data().username(),
                               provider_->Get(kAccountsPrefUsers)));
 }
 
@@ -198,7 +204,7 @@
   void SetUp() override {
     DeviceSettingsTestBase::SetUp();
     provider_.reset(new DeviceSettingsProvider(
-        base::Bind(&OnPrefChanged), &device_settings_service_,
+        base::Bind(&OnPrefChanged), device_settings_service_.get(),
         TestingBrowserProcess::GetGlobal()->local_state()));
     FlushDeviceSettings();
     service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
@@ -216,15 +222,15 @@
 }
 
 TEST_F(OwnerSettingsServiceChromeOSNoOwnerTest, TakeOwnershipForceWhitelist) {
-  EXPECT_FALSE(FindInListValue(device_policy_.policy_data().username(),
+  EXPECT_FALSE(FindInListValue(device_policy_->policy_data().username(),
                                provider_->Get(kAccountsPrefUsers)));
-  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
-  InitOwner(AccountId::FromUserEmail(device_policy_.policy_data().username()),
+  owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
+  InitOwner(AccountId::FromUserEmail(device_policy_->policy_data().username()),
             true);
   ReloadDeviceSettings();
   ASSERT_TRUE(service_->IsOwner());
 
-  EXPECT_TRUE(FindInListValue(device_policy_.policy_data().username(),
+  EXPECT_TRUE(FindInListValue(device_policy_->policy_data().username(),
                               provider_->Get(kAccountsPrefUsers)));
 }
 
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 187ddf4..6dea779 100644
--- a/chrome/browser/chromeos/policy/app_install_event_log_collector.cc
+++ b/chrome/browser/chromeos/policy/app_install_event_log_collector.cc
@@ -64,8 +64,7 @@
       profile_(profile),
       online_(GetOnlineState()),
       pending_packages_(pending_packages) {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
   content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
   // Might not be available in unit test.
   arc::ArcPolicyBridge* const policy_bridge =
@@ -84,8 +83,7 @@
   if (app_prefs) {
     app_prefs->RemoveObserver(this);
   }
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
   content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this);
   arc::ArcPolicyBridge* const policy_bridge =
       arc::ArcPolicyBridge::GetForBrowserContext(profile_);
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 3a0e338..c0f749c5 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
@@ -111,11 +111,7 @@
   void SetUp() override {
     RegisterLocalState(pref_service_.registry());
     TestingBrowserProcess::GetGlobal()->SetLocalState(&pref_service_);
-    std::unique_ptr<chromeos::FakePowerManagerClient> power_manager_client =
-        std::make_unique<chromeos::FakePowerManagerClient>();
-    power_manager_client_ = power_manager_client.get();
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::move(power_manager_client));
+    chromeos::PowerManagerClient::Initialize();
 
     chromeos::DBusThreadManager::Initialize();
     chromeos::NetworkHandler::Initialize();
@@ -141,6 +137,7 @@
     profile_.reset();
     chromeos::NetworkHandler::Shutdown();
     chromeos::DBusThreadManager::Shutdown();
+    chromeos::PowerManagerClient::Shutdown();
     TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr);
   }
 
@@ -172,9 +169,6 @@
 
   TestingProfile* profile() { return profile_.get(); }
   FakeAppInstallEventLogCollectorDelegate* delegate() { return &delegate_; }
-  chromeos::FakePowerManagerClient* power_manager_client() {
-    return power_manager_client_;
-  }
   ArcAppListPrefs* app_prefs() { return arc_app_test_.arc_app_list_prefs(); }
 
   const std::set<std::string> packages_ = {kPackageName};
@@ -186,7 +180,6 @@
   std::unique_ptr<TestingProfile> profile_;
   FakeAppInstallEventLogCollectorDelegate delegate_;
   TestingPrefServiceSimple pref_service_;
-  chromeos::FakePowerManagerClient* power_manager_client_ = nullptr;
   ArcAppTest arc_app_test_;
 
   DISALLOW_COPY_AND_ASSIGN(AppInstallEventLogCollectorTest);
@@ -273,7 +266,7 @@
       std::make_unique<AppInstallEventLogCollector>(delegate(), profile(),
                                                     packages_);
 
-  power_manager_client()->SendSuspendImminent(
+  chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(1, delegate()->add_for_all_count());
   EXPECT_EQ(em::AppInstallReportLogEvent::SESSION_STATE_CHANGE,
@@ -281,7 +274,7 @@
   EXPECT_EQ(em::AppInstallReportLogEvent::SUSPEND,
             delegate()->last_event().session_state_change_type());
 
-  power_manager_client()->SendSuspendDone();
+  chromeos::FakePowerManagerClient::Get()->SendSuspendDone();
   EXPECT_EQ(2, delegate()->add_for_all_count());
   EXPECT_EQ(em::AppInstallReportLogEvent::SESSION_STATE_CHANGE,
             delegate()->last_event().event_type());
diff --git a/chrome/browser/chromeos/policy/app_install_event_logger_unittest.cc b/chrome/browser/chromeos/policy/app_install_event_logger_unittest.cc
index 463281f..cefc78c 100644
--- a/chrome/browser/chromeos/policy/app_install_event_logger_unittest.cc
+++ b/chrome/browser/chromeos/policy/app_install_event_logger_unittest.cc
@@ -15,7 +15,6 @@
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/dbus/cros_disks_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/disks/disk_mount_manager.h"
 #include "chromeos/disks/mock_disk_mount_manager.h"
 #include "chromeos/network/network_handler.h"
@@ -105,10 +104,9 @@
     RegisterLocalState(pref_service_.registry());
     TestingBrowserProcess::GetGlobal()->SetLocalState(&pref_service_);
 
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::make_unique<chromeos::FakePowerManagerClient>());
     chromeos::DBusThreadManager::Initialize();
     chromeos::NetworkHandler::Initialize();
+    chromeos::PowerManagerClient::Initialize();
 
     disk_mount_manager_ = new chromeos::disks::MockDiskMountManager;
     chromeos::disks::DiskMountManager::InitializeForTesting(
@@ -126,6 +124,7 @@
   void TearDown() override {
     logger_.reset();
     browser_thread_bundle_.RunUntilIdle();
+    chromeos::PowerManagerClient::Shutdown();
     chromeos::NetworkHandler::Shutdown();
     chromeos::DBusThreadManager::Shutdown();
     chromeos::disks::DiskMountManager::Shutdown();
diff --git a/chrome/browser/chromeos/policy/cloud_external_data_policy_observer_unittest.cc b/chrome/browser/chromeos/policy/cloud_external_data_policy_observer_unittest.cc
index 0566ae1..83056f5 100644
--- a/chrome/browser/chromeos/policy/cloud_external_data_policy_observer_unittest.cc
+++ b/chrome/browser/chromeos/policy/cloud_external_data_policy_observer_unittest.cc
@@ -185,11 +185,11 @@
       base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
           &url_loader_factory_);
   cros_settings_ = std::make_unique<chromeos::CrosSettings>(
-      &device_settings_service_,
+      device_settings_service_.get(),
       TestingBrowserProcess::GetGlobal()->local_state());
   device_local_account_policy_service_.reset(
       new DeviceLocalAccountPolicyService(
-          &session_manager_client_, &device_settings_service_,
+          &session_manager_client_, device_settings_service_.get(),
           cros_settings_.get(), &affiliated_invalidation_service_provider_,
           base::ThreadTaskRunnerHandle::Get(),
           base::ThreadTaskRunnerHandle::Get(),
@@ -283,19 +283,19 @@
 void CloudExternalDataPolicyObserverTest::AddDeviceLocalAccount(
     const std::string& account_id) {
   em::DeviceLocalAccountInfoProto* account =
-      device_policy_.payload().mutable_device_local_accounts()->add_account();
+      device_policy_->payload().mutable_device_local_accounts()->add_account();
   account->set_account_id(account_id);
   account->set_type(
       em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION);
-  device_policy_.Build();
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
+  device_policy_->Build();
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
   ReloadDeviceSettings();
 }
 
 void CloudExternalDataPolicyObserverTest::RemoveDeviceLocalAccount(
     const std::string& account_id) {
   em::DeviceLocalAccountsProto* accounts =
-      device_policy_.payload().mutable_device_local_accounts();
+      device_policy_->payload().mutable_device_local_accounts();
   std::vector<std::string> account_ids;
   for (int i = 0; i < accounts->account_size(); ++i) {
     if (accounts->account(i).account_id() != account_id)
@@ -309,8 +309,8 @@
     account->set_type(
         em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION);
   }
-  device_policy_.Build();
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
+  device_policy_->Build();
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
   ReloadDeviceSettings();
 }
 
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc
index 3388e7c..fef238b 100644
--- a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc
+++ b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc
@@ -149,13 +149,12 @@
     DeviceSettingsTestBase::SetUp();
     dbus_setter_->SetCryptohomeClient(
         std::unique_ptr<chromeos::CryptohomeClient>(fake_cryptohome_client_));
-    chromeos::DBusThreadManager::Get()->GetCryptohomeClient();
     cryptohome::AsyncMethodCaller::Initialize();
 
     install_attributes_ =
         std::make_unique<chromeos::InstallAttributes>(fake_cryptohome_client_);
     store_ = new DeviceCloudPolicyStoreChromeOS(
-        &device_settings_service_, install_attributes_.get(),
+        device_settings_service_.get(), install_attributes_.get(),
         base::ThreadTaskRunnerHandle::Get());
     manager_ = std::make_unique<TestingDeviceCloudPolicyManagerChromeOS>(
         base::WrapUnique(store_),
@@ -184,6 +183,23 @@
     AllowUninterestingRemoteCommandFetches();
   }
 
+  void TearDown() override {
+    cryptohome::AsyncMethodCaller::Shutdown();
+
+    if (initializer_)
+      initializer_->Shutdown();
+    manager_->RemoveDeviceCloudPolicyManagerObserver(this);
+    manager_->Shutdown();
+    manager_.reset();
+    install_attributes_.reset();
+
+    chromeos::DeviceOAuth2TokenServiceFactory::Shutdown();
+    chromeos::SystemSaltGetter::Shutdown();
+    TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr);
+
+    DeviceSettingsTestBase::TearDown();
+  }
+
   StrictMock<chromeos::attestation::MockAttestationFlow>*
   CreateAttestationFlow() {
     mock_ = new StrictMock<chromeos::attestation::MockAttestationFlow>();
@@ -194,20 +210,6 @@
     return mock_;
   }
 
-  void TearDown() override {
-    cryptohome::AsyncMethodCaller::Shutdown();
-
-    manager_->RemoveDeviceCloudPolicyManagerObserver(this);
-    manager_->Shutdown();
-    if (initializer_)
-      initializer_->Shutdown();
-    DeviceSettingsTestBase::TearDown();
-
-    chromeos::DeviceOAuth2TokenServiceFactory::Shutdown();
-    chromeos::SystemSaltGetter::Shutdown();
-    TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
-  }
-
   void LockDevice() {
     base::RunLoop loop;
     chromeos::InstallAttributes::LockResult result;
@@ -334,9 +336,9 @@
 }
 
 TEST_F(DeviceCloudPolicyManagerChromeOSTest, UnmanagedDevice) {
-  device_policy_.policy_data().set_state(em::PolicyData::UNMANAGED);
-  device_policy_.Build();
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
+  device_policy_->policy_data().set_state(em::PolicyData::UNMANAGED);
+  device_policy_->Build();
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
 
   LockDevice();
   FlushDeviceSettings();
@@ -365,12 +367,12 @@
   EXPECT_TRUE(manager_->GetStatusUploader());
 
   // Switch back to ACTIVE, service the policy fetch and let it propagate.
-  device_policy_.policy_data().set_state(em::PolicyData::ACTIVE);
-  device_policy_.Build();
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
+  device_policy_->policy_data().set_state(em::PolicyData::ACTIVE);
+  device_policy_->Build();
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
   em::DeviceManagementResponse policy_fetch_response;
   policy_fetch_response.mutable_policy_response()->add_responses()->CopyFrom(
-      device_policy_.policy());
+      device_policy_->policy());
   policy_fetch_job->SendResponse(DM_STATUS_SUCCESS, policy_fetch_response);
   FlushDeviceSettings();
 
@@ -444,20 +446,20 @@
     DeviceCloudPolicyManagerChromeOSTest::SetUp();
 
     // Set up test data.
-    device_policy_.SetDefaultNewSigningKey();
-    device_policy_.policy_data().set_timestamp(
+    device_policy_->SetDefaultNewSigningKey();
+    device_policy_->policy_data().set_timestamp(
         base::Time::NowFromSystemTime().ToJavaTime());
-    device_policy_.Build();
+    device_policy_->Build();
 
     register_response_.mutable_register_response()->set_device_management_token(
         PolicyBuilder::kFakeToken);
     register_response_.mutable_register_response()->set_enrollment_type(
         em::DeviceRegisterResponse::ENTERPRISE);
     policy_fetch_response_.mutable_policy_response()->add_responses()->CopyFrom(
-        device_policy_.policy());
+        device_policy_->policy());
     robot_auth_fetch_response_.mutable_service_api_access_response()
         ->set_auth_code("auth_code_for_test");
-    loaded_blob_ = device_policy_.GetBlob();
+    loaded_blob_ = device_policy_->GetBlob();
 
     // Initialize the manager.
     FlushDeviceSettings();
@@ -608,7 +610,7 @@
           chromeos::DeviceOAuth2TokenServiceFactory::Get();
       EXPECT_TRUE(token_service->RefreshTokenIsAvailable(
           token_service->GetRobotAccountId()));
-      EXPECT_EQ(device_policy_.GetBlob(),
+      EXPECT_EQ(device_policy_->GetBlob(),
                 session_manager_client_.device_policy());
     }
     if (done_)
@@ -629,7 +631,7 @@
     // Key installation and policy load.
     session_manager_client_.set_device_policy(loaded_blob_);
     owner_key_util_->SetPublicKeyFromPrivateKey(
-        *device_policy_.GetNewSigningKey());
+        *device_policy_->GetNewSigningKey());
     ReloadDeviceSettings();
 
     // Respond to the second policy refresh.
@@ -745,10 +747,10 @@
 }
 
 TEST_P(DeviceCloudPolicyManagerChromeOSEnrollmentTest, ValidationFailed) {
-  device_policy_.policy().set_policy_data_signature("bad");
+  device_policy_->policy().set_policy_data_signature("bad");
   policy_fetch_response_.clear_policy_response();
   policy_fetch_response_.mutable_policy_response()->add_responses()->CopyFrom(
-      device_policy_.policy());
+      device_policy_->policy());
   RunTest();
   ExpectFailedEnrollment(EnrollmentStatus::VALIDATION_FAILED);
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_INITIAL_SIGNATURE,
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos_unittest.cc b/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos_unittest.cc
index 6af6f4d..0374fda 100644
--- a/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos_unittest.cc
+++ b/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos_unittest.cc
@@ -49,18 +49,19 @@
     : public chromeos::DeviceSettingsTestBase {
  protected:
   DeviceCloudPolicyStoreChromeOSTest()
-      : local_state_(TestingBrowserProcess::GetGlobal()),
-        fake_cryptohome_client_(new chromeos::FakeCryptohomeClient()),
-        install_attributes_(
-            new chromeos::InstallAttributes(fake_cryptohome_client_)),
-        store_(new DeviceCloudPolicyStoreChromeOS(
-            &device_settings_service_,
-            install_attributes_.get(),
-            base::ThreadTaskRunnerHandle::Get())) {}
+      : local_state_(TestingBrowserProcess::GetGlobal()) {}
+
+  ~DeviceCloudPolicyStoreChromeOSTest() override = default;
 
   void SetUp() override {
     DeviceSettingsTestBase::SetUp();
 
+    fake_cryptohome_client_ = new chromeos::FakeCryptohomeClient();
+    install_attributes_ =
+        std::make_unique<chromeos::InstallAttributes>(fake_cryptohome_client_);
+    store_ = std::make_unique<DeviceCloudPolicyStoreChromeOS>(
+        device_settings_service_.get(), install_attributes_.get(),
+        base::ThreadTaskRunnerHandle::Get());
     store_->AddObserver(&observer_);
 
     dbus_setter_->SetCryptohomeClient(
@@ -80,6 +81,8 @@
 
   void TearDown() override {
     store_->RemoveObserver(&observer_);
+    store_.reset();
+    install_attributes_.reset();
     DeviceSettingsTestBase::TearDown();
   }
 
@@ -108,15 +111,15 @@
     FlushDeviceSettings();
     ExpectSuccess();
 
-    device_policy_.UnsetNewSigningKey();
-    device_policy_.Build();
+    device_policy_->UnsetNewSigningKey();
+    device_policy_->Build();
   }
 
   void PrepareNewSigningKey() {
-    device_policy_.SetDefaultNewSigningKey();
-    device_policy_.Build();
+    device_policy_->SetDefaultNewSigningKey();
+    device_policy_->Build();
     owner_key_util_->SetPublicKeyFromPrivateKey(
-        *device_policy_.GetNewSigningKey());
+        *device_policy_->GetNewSigningKey());
   }
 
   void ResetToNonEnterprise() {
@@ -126,7 +129,7 @@
     install_attributes_.reset(
         new chromeos::InstallAttributes(fake_cryptohome_client_));
     store_.reset(new DeviceCloudPolicyStoreChromeOS(
-        &device_settings_service_, install_attributes_.get(),
+        device_settings_service_.get(), install_attributes_.get(),
         base::ThreadTaskRunnerHandle::Get()));
     store_->AddObserver(&observer_);
   }
@@ -167,86 +170,86 @@
   store_->Load();
   FlushDeviceSettings();
   ExpectSuccess();
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
             store_->policy_signature_public_key());
 }
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreSuccess) {
   PrepareExistingPolicy();
-  store_->Store(device_policy_.policy());
+  store_->Store(device_policy_->policy());
   FlushDeviceSettings();
   ExpectSuccess();
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
             store_->policy_signature_public_key());
 }
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreNoSignature) {
   PrepareExistingPolicy();
-  device_policy_.policy().clear_policy_data_signature();
-  store_->Store(device_policy_.policy());
+  device_policy_->policy().clear_policy_data_signature();
+  store_->Store(device_policy_->policy());
   FlushDeviceSettings();
   EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status());
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_SIGNATURE,
             store_->validation_status());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
             store_->policy_signature_public_key());
 }
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreBadSignature) {
   PrepareExistingPolicy();
-  device_policy_.policy().set_policy_data_signature("invalid");
-  store_->Store(device_policy_.policy());
+  device_policy_->policy().set_policy_data_signature("invalid");
+  store_->Store(device_policy_->policy());
   FlushDeviceSettings();
   EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status());
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_SIGNATURE,
             store_->validation_status());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
             store_->policy_signature_public_key());
 }
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreKeyRotation) {
   PrepareExistingPolicy();
-  device_policy_.SetDefaultNewSigningKey();
-  device_policy_.Build();
-  store_->Store(device_policy_.policy());
+  device_policy_->SetDefaultNewSigningKey();
+  device_policy_->Build();
+  store_->Store(device_policy_->policy());
   content::RunAllTasksUntilIdle();
   owner_key_util_->SetPublicKeyFromPrivateKey(
-      *device_policy_.GetNewSigningKey());
+      *device_policy_->GetNewSigningKey());
   ReloadDeviceSettings();
   ExpectSuccess();
-  EXPECT_EQ(device_policy_.GetPublicNewSigningKeyAsString(),
+  EXPECT_EQ(device_policy_->GetPublicNewSigningKeyAsString(),
             store_->policy_signature_public_key());
 }
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest,
        StoreKeyRotationVerificationFailure) {
   PrepareExistingPolicy();
-  device_policy_.SetDefaultNewSigningKey();
-  device_policy_.Build();
-  *device_policy_.policy()
+  device_policy_->SetDefaultNewSigningKey();
+  device_policy_->Build();
+  *device_policy_->policy()
        .mutable_new_public_key_verification_signature_deprecated() = "garbage";
-  store_->Store(device_policy_.policy());
+  store_->Store(device_policy_->policy());
   FlushDeviceSettings();
   EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status());
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE,
             store_->validation_status());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
             store_->policy_signature_public_key());
 }
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest,
        StoreKeyRotationMissingSignatureFailure) {
   PrepareExistingPolicy();
-  device_policy_.SetDefaultNewSigningKey();
-  device_policy_.Build();
-  device_policy_.policy()
+  device_policy_->SetDefaultNewSigningKey();
+  device_policy_->Build();
+  device_policy_->policy()
       .clear_new_public_key_verification_signature_deprecated();
-  store_->Store(device_policy_.policy());
+  store_->Store(device_policy_->policy());
   FlushDeviceSettings();
   EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status());
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE,
             store_->validation_status());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
             store_->policy_signature_public_key());
 }
 
@@ -255,39 +258,39 @@
 
   std::string onc_policy = chromeos::onc::test_utils::ReadTestData(
       "toplevel_with_unknown_fields.onc");
-  device_policy_.payload()
+  device_policy_->payload()
       .mutable_open_network_configuration()
       ->set_open_network_configuration(onc_policy);
-  device_policy_.Build();
+  device_policy_->Build();
 
   EXPECT_CALL(observer_, OnStoreLoaded(store_.get()));
 
-  store_->Store(device_policy_.policy());
+  store_->Store(device_policy_->policy());
   FlushDeviceSettings();
   const CloudPolicyValidatorBase::ValidationResult* validation_result =
       store_->validation_result();
   EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status());
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_OK, validation_result->status);
   EXPECT_EQ(3u, validation_result->value_validation_issues.size());
-  EXPECT_EQ(device_policy_.policy_data().policy_token(),
+  EXPECT_EQ(device_policy_->policy_data().policy_token(),
             validation_result->policy_token);
-  EXPECT_EQ(device_policy_.policy().policy_data_signature(),
+  EXPECT_EQ(device_policy_->policy().policy_data_signature(),
             validation_result->policy_data_signature);
 }
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicySuccess) {
   PrepareNewSigningKey();
-  store_->InstallInitialPolicy(device_policy_.policy());
+  store_->InstallInitialPolicy(device_policy_->policy());
   FlushDeviceSettings();
   ExpectSuccess();
-  EXPECT_EQ(device_policy_.GetPublicNewSigningKeyAsString(),
+  EXPECT_EQ(device_policy_->GetPublicNewSigningKeyAsString(),
             store_->policy_signature_public_key());
 }
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicyNoSignature) {
   PrepareNewSigningKey();
-  device_policy_.policy().clear_policy_data_signature();
-  store_->InstallInitialPolicy(device_policy_.policy());
+  device_policy_->policy().clear_policy_data_signature();
+  store_->InstallInitialPolicy(device_policy_->policy());
   FlushDeviceSettings();
   ExpectFailure(CloudPolicyStore::STATUS_VALIDATION_ERROR);
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_INITIAL_SIGNATURE,
@@ -298,9 +301,9 @@
 TEST_F(DeviceCloudPolicyStoreChromeOSTest,
        InstallInitialPolicyVerificationFailure) {
   PrepareNewSigningKey();
-  *device_policy_.policy()
+  *device_policy_->policy()
        .mutable_new_public_key_verification_signature_deprecated() = "garbage";
-  store_->InstallInitialPolicy(device_policy_.policy());
+  store_->InstallInitialPolicy(device_policy_->policy());
   FlushDeviceSettings();
   ExpectFailure(CloudPolicyStore::STATUS_VALIDATION_ERROR);
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE,
@@ -311,9 +314,9 @@
 TEST_F(DeviceCloudPolicyStoreChromeOSTest,
        InstallInitialPolicyMissingSignatureFailure) {
   PrepareNewSigningKey();
-  device_policy_.policy()
+  device_policy_->policy()
       .clear_new_public_key_verification_signature_deprecated();
-  store_->InstallInitialPolicy(device_policy_.policy());
+  store_->InstallInitialPolicy(device_policy_->policy());
   FlushDeviceSettings();
   ExpectFailure(CloudPolicyStore::STATUS_VALIDATION_ERROR);
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE,
@@ -323,8 +326,8 @@
 
 TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicyNoKey) {
   PrepareNewSigningKey();
-  device_policy_.policy().clear_new_public_key();
-  store_->InstallInitialPolicy(device_policy_.policy());
+  device_policy_->policy().clear_new_public_key();
+  store_->InstallInitialPolicy(device_policy_->policy());
   FlushDeviceSettings();
   ExpectFailure(CloudPolicyStore::STATUS_VALIDATION_ERROR);
   EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_INITIAL_SIGNATURE,
@@ -335,7 +338,7 @@
 TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicyNotEnterprise) {
   PrepareNewSigningKey();
   ResetToNonEnterprise();
-  store_->InstallInitialPolicy(device_policy_.policy());
+  store_->InstallInitialPolicy(device_policy_->policy());
   FlushDeviceSettings();
   ExpectFailure(CloudPolicyStore::STATUS_BAD_STATE);
   EXPECT_EQ(std::string(), store_->policy_signature_public_key());
diff --git a/chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc b/chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc
index d5fc39d..d37435d 100644
--- a/chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc
+++ b/chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc
@@ -87,6 +87,10 @@
   DeviceLocalAccountPolicyServiceTestBase();
   ~DeviceLocalAccountPolicyServiceTestBase() override;
 
+  // chromeos::DeviceSettingsTestBase:
+  void SetUp() override;
+  void TearDown() override;
+
   void CreatePolicyService();
 
   void InstallDeviceLocalAccountPolicy(const std::string& account_id);
@@ -114,6 +118,10 @@
  public:
   MOCK_METHOD1(OnRefreshDone, void(bool));
 
+  // DeviceLocalAccountPolicyServiceTestBase:
+  void SetUp() override;
+  void TearDown() override;
+
  protected:
   DeviceLocalAccountPolicyServiceTest();
   ~DeviceLocalAccountPolicyServiceTest();
@@ -133,11 +141,18 @@
           DeviceLocalAccount::TYPE_PUBLIC_SESSION)),
       account_2_user_id_(GenerateDeviceLocalAccountUserId(
           kAccount2,
-          DeviceLocalAccount::TYPE_PUBLIC_SESSION)),
-      cros_settings_(std::make_unique<chromeos::CrosSettings>(
-          &device_settings_service_,
-          TestingBrowserProcess::GetGlobal()->local_state())),
-      extension_cache_task_runner_(new base::TestSimpleTaskRunner) {
+          DeviceLocalAccount::TYPE_PUBLIC_SESSION)) {}
+
+DeviceLocalAccountPolicyServiceTestBase::
+    ~DeviceLocalAccountPolicyServiceTestBase() = default;
+
+void DeviceLocalAccountPolicyServiceTestBase::SetUp() {
+  chromeos::DeviceSettingsTestBase::SetUp();
+
+  cros_settings_ = std::make_unique<chromeos::CrosSettings>(
+      device_settings_service_.get(),
+      TestingBrowserProcess::GetGlobal()->local_state());
+  extension_cache_task_runner_ = new base::TestSimpleTaskRunner;
   expected_policy_map_.Set(key::kSearchSuggestEnabled, POLICY_LEVEL_MANDATORY,
                            POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
                            std::make_unique<base::Value>(true), nullptr);
@@ -149,18 +164,18 @@
       dm_protocol::kChromePublicAccountPolicyType);
 }
 
-DeviceLocalAccountPolicyServiceTestBase::
-    ~DeviceLocalAccountPolicyServiceTestBase() {
+void DeviceLocalAccountPolicyServiceTestBase::TearDown() {
   service_->Shutdown();
   service_.reset();
   extension_cache_task_runner_->RunUntilIdle();
+  cros_settings_.reset();
   chromeos::DeviceSettingsTestBase::TearDown();
 }
 
 void DeviceLocalAccountPolicyServiceTestBase::CreatePolicyService() {
   service_.reset(new DeviceLocalAccountPolicyService(
-      &session_manager_client_, &device_settings_service_, cros_settings_.get(),
-      &affiliated_invalidation_service_provider_,
+      &session_manager_client_, device_settings_service_.get(),
+      cros_settings_.get(), &affiliated_invalidation_service_provider_,
       base::ThreadTaskRunnerHandle::Get(), extension_cache_task_runner_,
       base::ThreadTaskRunnerHandle::Get(),
       /*url_loader_factory=*/nullptr));
@@ -178,27 +193,34 @@
 void DeviceLocalAccountPolicyServiceTestBase::AddDeviceLocalAccountToPolicy(
     const std::string& account_id) {
   em::DeviceLocalAccountInfoProto* account =
-      device_policy_.payload().mutable_device_local_accounts()->add_account();
+      device_policy_->payload().mutable_device_local_accounts()->add_account();
   account->set_account_id(account_id);
   account->set_type(
       em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION);
 }
 
 void DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy() {
-  device_policy_.Build();
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
+  device_policy_->Build();
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
   ReloadDeviceSettings();
 }
 
-DeviceLocalAccountPolicyServiceTest::DeviceLocalAccountPolicyServiceTest() {
+void DeviceLocalAccountPolicyServiceTest::SetUp() {
+  DeviceLocalAccountPolicyServiceTestBase::SetUp();
   CreatePolicyService();
   service_->AddObserver(&service_observer_);
 }
 
-DeviceLocalAccountPolicyServiceTest::~DeviceLocalAccountPolicyServiceTest() {
+void DeviceLocalAccountPolicyServiceTest::TearDown() {
   service_->RemoveObserver(&service_observer_);
+  DeviceLocalAccountPolicyServiceTestBase::TearDown();
 }
 
+DeviceLocalAccountPolicyServiceTest::DeviceLocalAccountPolicyServiceTest() =
+    default;
+DeviceLocalAccountPolicyServiceTest::~DeviceLocalAccountPolicyServiceTest() =
+    default;
+
 void DeviceLocalAccountPolicyServiceTest::InstallDevicePolicy() {
   EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged());
   DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy();
@@ -346,7 +368,7 @@
   EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_));
   InstallDevicePolicy();
 
-  device_policy_.payload().mutable_device_local_accounts()->clear_account();
+  device_policy_->payload().mutable_device_local_accounts()->clear_account();
   InstallDevicePolicy();
 
   EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_));
@@ -402,8 +424,8 @@
   EXPECT_CALL(
       mock_device_management_service_,
       StartJob(dm_protocol::kValueRequestPolicy, std::string(), std::string(),
-               device_policy_.policy_data().request_token(), std::string(),
-               device_policy_.policy_data().device_id(), _))
+               device_policy_->policy_data().request_token(), std::string(),
+               device_policy_->policy_data().device_id(), _))
       .WillOnce(SaveArg<6>(&request));
   // This will be called twice, because the ComponentCloudPolicyService will
   // also become ready after flushing all the pending tasks.
@@ -643,7 +665,7 @@
   extension_cache_task_runner_->RunUntilIdle();
 
   // Remove account 1 from device policy, triggering a shutdown of its cache.
-  device_policy_.payload().mutable_device_local_accounts()->clear_account();
+  device_policy_->payload().mutable_device_local_accounts()->clear_account();
   InstallDevicePolicy();
 
   // Re-add account 1 to device policy.
@@ -686,7 +708,7 @@
 
   // Remove account 1 from device policy, allowing the shutdown of its cache to
   // finish and the deletion of its now obsolete cache directory to begin.
-  device_policy_.payload().mutable_device_local_accounts()->clear_account();
+  device_policy_->payload().mutable_device_local_accounts()->clear_account();
   InstallDevicePolicy();
   extension_cache_task_runner_->RunUntilIdle();
   base::RunLoop().RunUntilIdle();
@@ -753,7 +775,7 @@
 
   // Remove account 1 from device policy, allowing the deletion of its now
   // obsolete cache directory to finish.
-  device_policy_.payload().mutable_device_local_accounts()->clear_account();
+  device_policy_->payload().mutable_device_local_accounts()->clear_account();
   InstallDevicePolicy();
   extension_cache_task_runner_->RunUntilIdle();
   base::RunLoop().RunUntilIdle();
@@ -829,7 +851,7 @@
   // The account disappearing should *not* flip the initialization flag back.
   EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get()))
       .Times(AnyNumber());
-  device_policy_.payload().mutable_device_local_accounts()->clear_account();
+  device_policy_->payload().mutable_device_local_accounts()->clear_account();
   InstallDevicePolicy();
   Mock::VerifyAndClearExpectations(&provider_observer_);
 
@@ -898,7 +920,7 @@
   // Account disappears, policy should stay in effect.
   EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get()))
       .Times(AnyNumber());
-  device_policy_.payload().mutable_device_local_accounts()->clear_account();
+  device_policy_->payload().mutable_device_local_accounts()->clear_account();
   InstallDevicePolicy();
   Mock::VerifyAndClearExpectations(&provider_observer_);
 
diff --git a/chrome/browser/chromeos/policy/device_status_collector.cc b/chrome/browser/chromeos/policy/device_status_collector.cc
index 006ca3a..42f9368 100644
--- a/chrome/browser/chromeos/policy/device_status_collector.cc
+++ b/chrome/browser/chromeos/policy/device_status_collector.cc
@@ -973,8 +973,7 @@
       tpm_status_fetcher_(tpm_status_fetcher),
       statistics_provider_(provider),
       cros_settings_(chromeos::CrosSettings::Get()),
-      power_manager_(
-          chromeos::DBusThreadManager::Get()->GetPowerManagerClient()),
+      power_manager_(chromeos::PowerManagerClient::Get()),
       session_manager_(session_manager::SessionManager::Get()),
       runtime_probe_(
           chromeos::DBusThreadManager::Get()->GetRuntimeProbeClient()),
diff --git a/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc b/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc
index 44bde3d..db454bd 100644
--- a/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc
+++ b/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc
@@ -404,9 +404,7 @@
     chromeos::CrasAudioHandler::InitializeForTesting();
     chromeos::LoginState::Initialize();
 
-    fake_power_manager_client_ = new chromeos::FakePowerManagerClient;
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        base::WrapUnique(fake_power_manager_client_));
+    chromeos::PowerManagerClient::Initialize();
   }
 
   ~DeviceStatusCollectorTest() override {
@@ -453,19 +451,21 @@
         case DeviceStateTransitions::kEnterIdleState: {
           power_manager::ScreenIdleState state;
           state.set_off(true);
-          fake_power_manager_client_->SendScreenIdleStateChanged(state);
+          chromeos::FakePowerManagerClient::Get()->SendScreenIdleStateChanged(
+              state);
         } break;
         case DeviceStateTransitions::kLeaveIdleState: {
           power_manager::ScreenIdleState state;
           state.set_off(false);
-          fake_power_manager_client_->SendScreenIdleStateChanged(state);
+          chromeos::FakePowerManagerClient::Get()->SendScreenIdleStateChanged(
+              state);
         } break;
         case DeviceStateTransitions::kEnterSleep:
-          fake_power_manager_client_->SendSuspendImminent(
+          chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
               power_manager::SuspendImminent_Reason_LID_CLOSED);
           break;
         case DeviceStateTransitions::kLeaveSleep:
-          fake_power_manager_client_->SendSuspendDone(
+          chromeos::FakePowerManagerClient::Get()->SendSuspendDone(
               base::TimeDelta::FromSeconds(
                   policy::DeviceStatusCollector::kIdlePollIntervalSeconds));
           break;
@@ -671,12 +671,12 @@
   chromeos::FakeUpdateEngineClient* const update_engine_client_;
   std::unique_ptr<base::RunLoop> run_loop_;
 
-  // Owned by chromeos::DBusThreadManager.
-  chromeos::FakePowerManagerClient* fake_power_manager_client_;
-
   // This property is required to instantiate the session manager, a singleton
   // which is used by the device status collector.
   session_manager::SessionManager session_manager_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(DeviceStatusCollectorTest);
 };
 
 TEST_F(DeviceStatusCollectorTest, AllIdle) {
diff --git a/chrome/browser/chromeos/policy/off_hours/device_off_hours_controller.cc b/chrome/browser/chromeos/policy/off_hours/device_off_hours_controller.cc
index 06cac2a..c882b84 100644
--- a/chrome/browser/chromeos/policy/off_hours/device_off_hours_controller.cc
+++ b/chrome/browser/chromeos/policy/off_hours/device_off_hours_controller.cc
@@ -32,30 +32,24 @@
 DeviceOffHoursController::DeviceOffHoursController()
     : timer_(std::make_unique<base::OneShotTimer>()),
       clock_(base::DefaultClock::GetInstance()) {
-  // IsInitialized() check is used for testing. Otherwise it has to be already
-  // initialized.
-  if (chromeos::DBusThreadManager::IsInitialized()) {
-    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-        this);
-    auto* system_clock_client = chromeos::SystemClockClient::Get();
-    if (system_clock_client) {
-      system_clock_client->AddObserver(this);
-      system_clock_client->WaitForServiceToBeAvailable(
-          base::Bind(&DeviceOffHoursController::SystemClockInitiallyAvailable,
-                     weak_ptr_factory_.GetWeakPtr()));
-    }
+  auto* system_clock_client = chromeos::SystemClockClient::Get();
+  if (system_clock_client) {
+    system_clock_client->AddObserver(this);
+    system_clock_client->WaitForServiceToBeAvailable(
+        base::Bind(&DeviceOffHoursController::SystemClockInitiallyAvailable,
+                   weak_ptr_factory_.GetWeakPtr()));
   }
+
+  if (chromeos::PowerManagerClient::Get())
+    chromeos::PowerManagerClient::Get()->AddObserver(this);
 }
 
 DeviceOffHoursController::~DeviceOffHoursController() {
-  // IsInitialized() check is used for testing. Otherwise it has to be already
-  // initialized.
-  if (chromeos::DBusThreadManager::IsInitialized()) {
-    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-        this);
-    if (chromeos::SystemClockClient::Get())
-      chromeos::SystemClockClient::Get()->RemoveObserver(this);
-  }
+  if (chromeos::SystemClockClient::Get())
+    chromeos::SystemClockClient::Get()->RemoveObserver(this);
+
+  if (chromeos::PowerManagerClient::Get())
+    chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void DeviceOffHoursController::AddObserver(Observer* observer) {
diff --git a/chrome/browser/chromeos/policy/off_hours/device_off_hours_controller_unittest.cc b/chrome/browser/chromeos/policy/off_hours/device_off_hours_controller_unittest.cc
index 4ca12b9..2996280 100644
--- a/chrome/browser/chromeos/policy/off_hours/device_off_hours_controller_unittest.cc
+++ b/chrome/browser/chromeos/policy/off_hours/device_off_hours_controller_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/system_clock/system_clock_client.h"
 #include "components/policy/proto/chrome_device_policy.pb.h"
@@ -103,28 +102,24 @@
 class DeviceOffHoursControllerSimpleTest
     : public chromeos::DeviceSettingsTestBase {
  protected:
-  DeviceOffHoursControllerSimpleTest()
-      : fake_user_manager_(new chromeos::FakeChromeUserManager()),
-        scoped_user_manager_(base::WrapUnique(fake_user_manager_)) {}
+  DeviceOffHoursControllerSimpleTest() = default;
+  ~DeviceOffHoursControllerSimpleTest() override = default;
 
   void SetUp() override {
     chromeos::DeviceSettingsTestBase::SetUp();
     chromeos::SystemClockClient::Initialize(nullptr /* bus */);
-    power_manager_client_ = new chromeos::FakePowerManagerClient();
-    dbus_setter_->SetPowerManagerClient(
-        base::WrapUnique(power_manager_client_));
 
-    device_settings_service_.SetDeviceOffHoursControllerForTesting(
+    device_settings_service_->SetDeviceOffHoursControllerForTesting(
         std::make_unique<policy::off_hours::DeviceOffHoursController>());
     device_off_hours_controller_ =
-        device_settings_service_.device_off_hours_controller();
+        device_settings_service_->device_off_hours_controller();
   }
 
   void TearDown() override { chromeos::SystemClockClient::Shutdown(); }
 
   void UpdateDeviceSettings() {
-    device_policy_.Build();
-    session_manager_client_.set_device_policy(device_policy_.GetBlob());
+    device_policy_->Build();
+    session_manager_client_.set_device_policy(device_policy_->GetBlob());
     ReloadDeviceSettings();
   }
 
@@ -146,43 +141,29 @@
     return chromeos::SystemClockClient::Get()->GetTestInterface();
   }
 
-  chromeos::FakePowerManagerClient* power_manager() {
-    return power_manager_client_;
-  }
-
   policy::off_hours::DeviceOffHoursController* device_off_hours_controller() {
     return device_off_hours_controller_;
   }
 
-  chromeos::FakeChromeUserManager* fake_user_manager() {
-    return fake_user_manager_;
-  }
-
- private:
-  // The object is owned by DeviceSettingsTestBase class.
-  chromeos::FakePowerManagerClient* power_manager_client_;
-
   // The object is owned by DeviceSettingsService class.
   policy::off_hours::DeviceOffHoursController* device_off_hours_controller_;
 
-  chromeos::FakeChromeUserManager* fake_user_manager_;
-  user_manager::ScopedUserManager scoped_user_manager_;
-
+ private:
   DISALLOW_COPY_AND_ASSIGN(DeviceOffHoursControllerSimpleTest);
 };
 
 TEST_F(DeviceOffHoursControllerSimpleTest, CheckOffHoursUnset) {
   system_clock_client()->SetNetworkSynchronized(true);
   system_clock_client()->NotifyObserversSystemClockUpdated();
-  em::ChromeDeviceSettingsProto& proto(device_policy_.payload());
+  em::ChromeDeviceSettingsProto& proto(device_policy_->payload());
   proto.mutable_guest_mode_enabled()->set_guest_mode_enabled(false);
   UpdateDeviceSettings();
-  EXPECT_FALSE(device_settings_service_.device_settings()
+  EXPECT_FALSE(device_settings_service_->device_settings()
                    ->guest_mode_enabled()
                    .guest_mode_enabled());
   RemoveOffHoursPolicyFromProto(&proto);
   UpdateDeviceSettings();
-  EXPECT_FALSE(device_settings_service_.device_settings()
+  EXPECT_FALSE(device_settings_service_->device_settings()
                    ->guest_mode_enabled()
                    .guest_mode_enabled());
 }
@@ -190,10 +171,10 @@
 TEST_F(DeviceOffHoursControllerSimpleTest, CheckOffHoursModeOff) {
   system_clock_client()->SetNetworkSynchronized(true);
   system_clock_client()->NotifyObserversSystemClockUpdated();
-  em::ChromeDeviceSettingsProto& proto(device_policy_.payload());
+  em::ChromeDeviceSettingsProto& proto(device_policy_->payload());
   proto.mutable_guest_mode_enabled()->set_guest_mode_enabled(false);
   UpdateDeviceSettings();
-  EXPECT_FALSE(device_settings_service_.device_settings()
+  EXPECT_FALSE(device_settings_service_->device_settings()
                    ->guest_mode_enabled()
                    .guest_mode_enabled());
   int current_day_of_week = ExtractDayOfWeek(base::Time::Now());
@@ -207,7 +188,7 @@
               WeeklyTime(NextDayOfWeek(current_day_of_week),
                          TimeDelta::FromHours(15).InMilliseconds(), 0))}));
   UpdateDeviceSettings();
-  EXPECT_FALSE(device_settings_service_.device_settings()
+  EXPECT_FALSE(device_settings_service_->device_settings()
                    ->guest_mode_enabled()
                    .guest_mode_enabled());
 }
@@ -215,10 +196,10 @@
 TEST_F(DeviceOffHoursControllerSimpleTest, CheckOffHoursModeOn) {
   system_clock_client()->SetNetworkSynchronized(true);
   system_clock_client()->NotifyObserversSystemClockUpdated();
-  em::ChromeDeviceSettingsProto& proto(device_policy_.payload());
+  em::ChromeDeviceSettingsProto& proto(device_policy_->payload());
   proto.mutable_guest_mode_enabled()->set_guest_mode_enabled(false);
   UpdateDeviceSettings();
-  EXPECT_FALSE(device_settings_service_.device_settings()
+  EXPECT_FALSE(device_settings_service_->device_settings()
                    ->guest_mode_enabled()
                    .guest_mode_enabled());
   int current_day_of_week = ExtractDayOfWeek(base::Time::Now());
@@ -231,7 +212,7 @@
               WeeklyTime(NextDayOfWeek(current_day_of_week),
                          TimeDelta::FromHours(10).InMilliseconds(), 0))}));
   UpdateDeviceSettings();
-  EXPECT_TRUE(device_settings_service_.device_settings()
+  EXPECT_TRUE(device_settings_service_->device_settings()
                   ->guest_mode_enabled()
                   .guest_mode_enabled());
 }
@@ -239,10 +220,10 @@
 TEST_F(DeviceOffHoursControllerSimpleTest, NoNetworkSynchronization) {
   system_clock_client()->SetNetworkSynchronized(false);
   system_clock_client()->NotifyObserversSystemClockUpdated();
-  em::ChromeDeviceSettingsProto& proto(device_policy_.payload());
+  em::ChromeDeviceSettingsProto& proto(device_policy_->payload());
   proto.mutable_guest_mode_enabled()->set_guest_mode_enabled(false);
   UpdateDeviceSettings();
-  EXPECT_FALSE(device_settings_service_.device_settings()
+  EXPECT_FALSE(device_settings_service_->device_settings()
                    ->guest_mode_enabled()
                    .guest_mode_enabled());
   int current_day_of_week = ExtractDayOfWeek(base::Time::Now());
@@ -254,7 +235,7 @@
               WeeklyTime(current_day_of_week, 0, 0),
               WeeklyTime(NextDayOfWeek(current_day_of_week),
                          TimeDelta::FromHours(10).InMilliseconds(), 0))}));
-  EXPECT_FALSE(device_settings_service_.device_settings()
+  EXPECT_FALSE(device_settings_service_->device_settings()
                    ->guest_mode_enabled()
                    .guest_mode_enabled());
 }
@@ -270,7 +251,7 @@
   EXPECT_FALSE(
       device_off_hours_controller()->IsCurrentSessionAllowedOnlyForOffHours());
 
-  em::ChromeDeviceSettingsProto& proto(device_policy_.payload());
+  em::ChromeDeviceSettingsProto& proto(device_policy_->payload());
   proto.mutable_guest_mode_enabled()->set_guest_mode_enabled(false);
   int current_day_of_week = ExtractDayOfWeek(base::Time::Now());
   SetOffHoursPolicyToProto(
@@ -286,8 +267,8 @@
   EXPECT_FALSE(
       device_off_hours_controller()->IsCurrentSessionAllowedOnlyForOffHours());
 
-  fake_user_manager()->AddGuestUser();
-  fake_user_manager()->LoginUser(fake_user_manager()->GetGuestAccountId());
+  user_manager_->AddGuestUser();
+  user_manager_->LoginUser(user_manager_->GetGuestAccountId());
 
   EXPECT_TRUE(
       device_off_hours_controller()->IsCurrentSessionAllowedOnlyForOffHours());
@@ -326,7 +307,7 @@
 TEST_F(DeviceOffHoursControllerFakeClockTest, FakeClock) {
   EXPECT_FALSE(device_off_hours_controller()->is_off_hours_mode());
   int current_day_of_week = ExtractDayOfWeek(clock()->Now());
-  em::ChromeDeviceSettingsProto& proto(device_policy_.payload());
+  em::ChromeDeviceSettingsProto& proto(device_policy_->payload());
   SetOffHoursPolicyToProto(
       &proto,
       OffHoursPolicy(
@@ -347,7 +328,7 @@
 TEST_F(DeviceOffHoursControllerFakeClockTest, CheckSendSuspendDone) {
   int current_day_of_week = ExtractDayOfWeek(clock()->Now());
   LOG(ERROR) << "day " << current_day_of_week;
-  em::ChromeDeviceSettingsProto& proto(device_policy_.payload());
+  em::ChromeDeviceSettingsProto& proto(device_policy_->payload());
   SetOffHoursPolicyToProto(
       &proto,
       OffHoursPolicy(kUtcTimezone,
@@ -359,11 +340,11 @@
   EXPECT_FALSE(device_off_hours_controller()->is_off_hours_mode());
 
   AdvanceTestClock(kDay);
-  power_manager()->SendSuspendDone();
+  power_manager_client()->SendSuspendDone();
   EXPECT_TRUE(device_off_hours_controller()->is_off_hours_mode());
 
   AdvanceTestClock(kHour);
-  power_manager()->SendSuspendDone();
+  power_manager_client()->SendSuspendDone();
   EXPECT_FALSE(device_off_hours_controller()->is_off_hours_mode());
 }
 
@@ -378,7 +359,7 @@
 };
 
 TEST_P(DeviceOffHoursControllerUpdateTest, CheckUpdateOffHoursPolicy) {
-  em::ChromeDeviceSettingsProto& proto(device_policy_.payload());
+  em::ChromeDeviceSettingsProto& proto(device_policy_->payload());
   SetOffHoursPolicyToProto(&proto, off_hours_policy());
   AdvanceTestClock(advance_clock());
   UpdateDeviceSettings();
diff --git a/chrome/browser/chromeos/policy/power_policy_browsertest.cc b/chrome/browser/chromeos/policy/power_policy_browsertest.cc
index a8f298c..47f6c5c 100644
--- a/chrome/browser/chromeos/policy/power_policy_browsertest.cc
+++ b/chrome/browser/chromeos/policy/power_policy_browsertest.cc
@@ -140,9 +140,11 @@
   // Returns a string describing |policy|.
   std::string GetDebugString(const pm::PowerManagementPolicy& policy);
 
-  UserPolicyBuilder user_policy_;
+  chromeos::FakePowerManagerClient* power_manager_client() {
+    return chromeos::FakePowerManagerClient::Get();
+  }
 
-  chromeos::FakePowerManagerClient* power_manager_client_;
+  UserPolicyBuilder user_policy_;
 
  private:
   // Runs |closure| and waits for |profile|'s user policy to be updated as a
@@ -180,15 +182,10 @@
   DISALLOW_COPY_AND_ASSIGN(PowerPolicyInSessionBrowserTest);
 };
 
-PowerPolicyBrowserTestBase::PowerPolicyBrowserTestBase()
-    : power_manager_client_(NULL) {
-}
+PowerPolicyBrowserTestBase::PowerPolicyBrowserTestBase() = default;
 
 void PowerPolicyBrowserTestBase::SetUpInProcessBrowserTestFixture() {
   DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
-  power_manager_client_ = new chromeos::FakePowerManagerClient;
-  dbus_setter()->SetPowerManagerClient(
-      std::unique_ptr<chromeos::PowerManagerClient>(power_manager_client_));
 
   // Initialize device policy.
   InstallOwnerKey();
@@ -322,7 +319,7 @@
 // Verifies that device policy is applied on the login screen.
 IN_PROC_BROWSER_TEST_F(PowerPolicyLoginScreenBrowserTest, SetDevicePolicy) {
   pm::PowerManagementPolicy power_management_policy =
-      power_manager_client_->policy();
+      power_manager_client()->policy();
   power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
   power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
   power_management_policy.mutable_ac_delays()->set_idle_ms(9000);
@@ -347,26 +344,26 @@
   // Spin the run loop to ensure ash sees pref change.
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(GetDebugString(power_management_policy),
-            GetDebugString(power_manager_client_->policy()));
+            GetDebugString(power_manager_client()->policy()));
 }
 
 // Verifies that device policy is ignored during a session.
 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetDevicePolicy) {
   pm::PowerManagementPolicy power_management_policy =
-      power_manager_client_->policy();
+      power_manager_client()->policy();
 
   em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
   proto.mutable_login_screen_power_management()->
       set_login_screen_power_management(kLoginScreenPowerManagementPolicy);
   StoreAndReloadDevicePolicyAndWaitForLoginProfileChange();
   EXPECT_EQ(GetDebugString(power_management_policy),
-            GetDebugString(power_manager_client_->policy()));
+            GetDebugString(power_manager_client()->policy()));
 }
 
 // Verifies that legacy user policy is applied during a session.
 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetLegacyUserPolicy) {
   pm::PowerManagementPolicy power_management_policy =
-      power_manager_client_->policy();
+      power_manager_client()->policy();
   power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
   power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000);
   power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
@@ -421,7 +418,7 @@
   // Spin the run loop to ensure ash sees pref change.
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(GetDebugString(power_management_policy),
-            GetDebugString(power_manager_client_->policy()));
+            GetDebugString(power_manager_client()->policy()));
 }
 
 // Verifies that legacy user policy is applied during a session.
@@ -429,7 +426,7 @@
 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest,
                        SetLegacyUserPolicySmartDimDisabled) {
   pm::PowerManagementPolicy power_management_policy =
-      power_manager_client_->policy();
+      power_manager_client()->policy();
   power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
   power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000);
   power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
@@ -483,13 +480,13 @@
   // Spin the run loop to ensure ash sees pref change.
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(GetDebugString(power_management_policy),
-            GetDebugString(power_manager_client_->policy()));
+            GetDebugString(power_manager_client()->policy()));
 }
 
 // Verifies that user policy is applied during a session.
 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetUserPolicy) {
   pm::PowerManagementPolicy power_management_policy =
-      power_manager_client_->policy();
+      power_manager_client()->policy();
   power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
   power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000);
   power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
@@ -553,14 +550,13 @@
   // Spin the run loop to ensure ash sees pref change.
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(GetDebugString(power_management_policy),
-            GetDebugString(power_manager_client_->policy()));
+            GetDebugString(power_manager_client()->policy()));
 }
 
 // Verifies that screen wake locks can be enabled and disabled by extensions and
 // user policy during a session.
 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, AllowScreenWakeLocks) {
-  pm::PowerManagementPolicy baseline_policy =
-      power_manager_client_->policy();
+  pm::PowerManagementPolicy baseline_policy = power_manager_client()->policy();
 
   // Default settings should not report any wake locks.
   pm::PowerManagementPolicy power_management_policy = baseline_policy;
@@ -575,20 +571,19 @@
 
   // The PowerAPI requests system wake lock asynchronously.
   base::RunLoop run_loop;
-  power_manager_client_->SetPowerPolicyQuitClosure(run_loop.QuitClosure());
+  power_manager_client()->SetPowerPolicyQuitClosure(run_loop.QuitClosure());
   run_loop.Run();
 
   // Check that the lock is in effect (ignoring ac_idle_action,
   // battery_idle_action and reason).
   pm::PowerManagementPolicy policy = baseline_policy;
   policy.set_screen_wake_lock(true);
-  policy.set_ac_idle_action(
-      power_manager_client_->policy().ac_idle_action());
+  policy.set_ac_idle_action(power_manager_client()->policy().ac_idle_action());
   policy.set_battery_idle_action(
-      power_manager_client_->policy().battery_idle_action());
-  policy.set_reason(power_manager_client_->policy().reason());
+      power_manager_client()->policy().battery_idle_action());
+  policy.set_reason(power_manager_client()->policy().reason());
   EXPECT_EQ(GetDebugString(policy),
-            GetDebugString(power_manager_client_->policy()));
+            GetDebugString(power_manager_client()->policy()));
 
   // Engage the user policy and verify that the screen wake lock is downgraded
   // to be a system wake lock.
@@ -596,14 +591,14 @@
   StoreAndReloadUserPolicy();
   policy = baseline_policy;
   policy.set_system_wake_lock(true);
-  policy.set_ac_idle_action(power_manager_client_->policy().ac_idle_action());
+  policy.set_ac_idle_action(power_manager_client()->policy().ac_idle_action());
   policy.set_battery_idle_action(
-      power_manager_client_->policy().battery_idle_action());
-  policy.set_reason(power_manager_client_->policy().reason());
+      power_manager_client()->policy().battery_idle_action());
+  policy.set_reason(power_manager_client()->policy().reason());
   // Spin the run loop to ensure ash sees pref change.
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(GetDebugString(policy),
-            GetDebugString(power_manager_client_->policy()));
+            GetDebugString(power_manager_client()->policy()));
 }
 
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/remote_commands/device_commands_factory_chromeos.cc b/chrome/browser/chromeos/policy/remote_commands/device_commands_factory_chromeos.cc
index 166f41e..df176c7 100644
--- a/chrome/browser/chromeos/policy/remote_commands/device_commands_factory_chromeos.cc
+++ b/chrome/browser/chromeos/policy/remote_commands/device_commands_factory_chromeos.cc
@@ -13,7 +13,7 @@
 #include "chrome/browser/chromeos/policy/remote_commands/device_command_start_crd_session_job.h"
 #include "chrome/browser/chromeos/policy/remote_commands/device_command_wipe_users_job.h"
 #include "chrome/browser/chromeos/policy/remote_commands/screenshot_delegate.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "components/policy/core/common/remote_commands/remote_command_job.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 
@@ -31,7 +31,7 @@
   switch (type) {
     case em::RemoteCommand_Type_DEVICE_REBOOT:
       return std::make_unique<DeviceCommandRebootJob>(
-          chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+          chromeos::PowerManagerClient::Get());
     case em::RemoteCommand_Type_DEVICE_SCREENSHOT:
       return std::make_unique<DeviceCommandScreenshotJob>(
           std::make_unique<ScreenshotDelegate>());
diff --git a/chrome/browser/chromeos/policy/status_uploader_unittest.cc b/chrome/browser/chromeos/policy/status_uploader_unittest.cc
index 8afbe8c..0df0282 100644
--- a/chrome/browser/chromeos/policy/status_uploader_unittest.cc
+++ b/chrome/browser/chromeos/policy/status_uploader_unittest.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h"
 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/settings/cros_settings_names.h"
 #include "components/policy/core/common/cloud/cloud_policy_client.h"
 #include "components/policy/core/common/cloud/mock_cloud_policy_client.h"
@@ -87,6 +88,7 @@
 
   void SetUp() override {
     chromeos::DBusThreadManager::Initialize();
+    chromeos::PowerManagerClient::Initialize();
     client_.SetDMToken("dm_token");
     collector_.reset(new MockDeviceStatusCollector(&prefs_));
 
@@ -97,6 +99,7 @@
 
   void TearDown() override {
     content::RunAllTasksUntilIdle();
+    chromeos::PowerManagerClient::Shutdown();
     chromeos::DBusThreadManager::Shutdown();
   }
 
diff --git a/chrome/browser/chromeos/power/auto_screen_brightness/adapter_unittest.cc b/chrome/browser/chromeos/power/auto_screen_brightness/adapter_unittest.cc
index a96a4c5..48663ec 100644
--- a/chrome/browser/chromeos/power/auto_screen_brightness/adapter_unittest.cc
+++ b/chrome/browser/chromeos/power/auto_screen_brightness/adapter_unittest.cc
@@ -21,7 +21,6 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/constants/chromeos_features.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "components/pref_registry/pref_registry_syncable.h"
@@ -119,25 +118,27 @@
  public:
   AdapterTest()
       : thread_bundle_(
-            base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME) {
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::make_unique<chromeos::FakePowerManagerClient>());
+            base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME) {}
+
+  ~AdapterTest() override = default;
+
+  void SetUp() override {
+    chromeos::PowerManagerClient::Initialize();
     power_manager::SetBacklightBrightnessRequest request;
     request.set_percent(1);
-    chromeos::DBusThreadManager::Get()
-        ->GetPowerManagerClient()
-        ->SetScreenBrightness(request);
+    chromeos::PowerManagerClient::Get()->SetScreenBrightness(request);
     thread_bundle_.RunUntilIdle();
 
-    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-        &test_observer_);
+    chromeos::PowerManagerClient::Get()->AddObserver(&test_observer_);
 
     global_curve_.emplace(MonotoneCubicSpline({-4, 12, 20}, {30, 80, 100}));
     personal_curve_.emplace(MonotoneCubicSpline({-4, 12, 20}, {20, 60, 100}));
   }
 
-  ~AdapterTest() override {
+  void TearDown() override {
+    adapter_.reset();
     base::TaskScheduler::GetInstance()->FlushForTesting();
+    chromeos::PowerManagerClient::Shutdown();
   }
 
   void SetUpAdapter(const std::map<std::string, std::string>& params,
@@ -185,7 +186,7 @@
     adapter_ = std::make_unique<Adapter>(
         profile_.get(), &fake_als_reader_, &fake_brightness_monitor_,
         &fake_modeller_, nullptr /* metrics_reporter */,
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+        chromeos::PowerManagerClient::Get());
     adapter_->SetTickClockForTesting(thread_bundle_.GetMockTickClock());
   }
 
@@ -203,9 +204,7 @@
   }
 
   void ReportSuspendDone() {
-    static_cast<chromeos::FakePowerManagerClient*>(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient())
-        ->SendSuspendDone();
+    chromeos::FakePowerManagerClient::Get()->SendSuspendDone();
     thread_bundle_.RunUntilIdle();
   }
 
diff --git a/chrome/browser/chromeos/power/auto_screen_brightness/brightness_monitor_impl_unittest.cc b/chrome/browser/chromeos/power/auto_screen_brightness/brightness_monitor_impl_unittest.cc
index c6c49c2..5df09739 100644
--- a/chrome/browser/chromeos/power/auto_screen_brightness/brightness_monitor_impl_unittest.cc
+++ b/chrome/browser/chromeos/power/auto_screen_brightness/brightness_monitor_impl_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/threading/sequenced_task_runner_handle.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -70,12 +69,17 @@
  public:
   BrightnessMonitorImplTest()
       : scoped_task_environment_(
-            base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME) {
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::make_unique<chromeos::FakePowerManagerClient>());
-  }
+            base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME) {}
 
-  ~BrightnessMonitorImplTest() override {
+  ~BrightnessMonitorImplTest() override {}
+
+  // testing::Test:
+  void SetUp() override { PowerManagerClient::Initialize(); }
+
+  void TearDown() override {
+    test_observer_.reset();
+    monitor_.reset();
+    PowerManagerClient::Shutdown();
     base::TaskScheduler::GetInstance()->FlushForTesting();
   }
 
@@ -85,13 +89,11 @@
     if (init_brightness >= 0) {
       power_manager::SetBacklightBrightnessRequest request;
       request.set_percent(init_brightness);
-      chromeos::DBusThreadManager::Get()
-          ->GetPowerManagerClient()
-          ->SetScreenBrightness(request);
+      PowerManagerClient::Get()->SetScreenBrightness(request);
     }
 
-    monitor_ = std::make_unique<BrightnessMonitorImpl>(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+    monitor_ =
+        std::make_unique<BrightnessMonitorImpl>(PowerManagerClient::Get());
     test_observer_ = std::make_unique<TestObserver>();
     monitor_->AddObserver(test_observer_.get());
     scoped_task_environment_.RunUntilIdle();
@@ -104,8 +106,7 @@
     power_manager::BacklightBrightnessChange change;
     change.set_percent(level);
     change.set_cause(cause);
-    static_cast<chromeos::FakePowerManagerClient*>(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient())
+    static_cast<FakePowerManagerClient*>(PowerManagerClient::Get())
         ->SendScreenBrightnessChanged(change);
     scoped_task_environment_.RunUntilIdle();
   }
@@ -138,7 +139,7 @@
 }
 
 // PowerManagerClient is not set up to return initial brightness, hence
-// Status is kDiabled.
+// Status is kDisabled.
 TEST_F(BrightnessMonitorImplTest, PowerManagerClientBrightnessUnset) {
   // Do not set initial brightess in FakePowerManagerClient.
   SetUpBrightnessMonitor(-1);
diff --git a/chrome/browser/chromeos/power/auto_screen_brightness/controller.cc b/chrome/browser/chromeos/power/auto_screen_brightness/controller.cc
index 2c20801..3f10abc 100644
--- a/chrome/browser/chromeos/power/auto_screen_brightness/controller.cc
+++ b/chrome/browser/chromeos/power/auto_screen_brightness/controller.cc
@@ -23,7 +23,7 @@
 
 Controller::Controller() {
   chromeos::PowerManagerClient* power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   DCHECK(power_manager_client);
 
   metrics_reporter_ = std::make_unique<MetricsReporter>(
diff --git a/chrome/browser/chromeos/power/auto_screen_brightness/metrics_reporter_unittest.cc b/chrome/browser/chromeos/power/auto_screen_brightness/metrics_reporter_unittest.cc
index 16945d1..462fe8d 100644
--- a/chrome/browser/chromeos/power/auto_screen_brightness/metrics_reporter_unittest.cc
+++ b/chrome/browser/chromeos/power/auto_screen_brightness/metrics_reporter_unittest.cc
@@ -30,16 +30,25 @@
 
 class MetricsReporterTest : public testing::Test {
  public:
-  MetricsReporterTest() {
+  MetricsReporterTest() = default;
+  ~MetricsReporterTest() override = default;
+
+  void SetUp() override {
+    PowerManagerClient::Initialize();
     MetricsReporter::RegisterLocalStatePrefs(pref_service_.registry());
     ResetReporter();
   }
 
+  void TearDown() override {
+    reporter_.reset();
+    PowerManagerClient::Shutdown();
+  }
+
  protected:
   // Reinitialize |reporter_| without resetting underlying prefs. May be called
   // by tests to simulate a Chrome restart.
   void ResetReporter() {
-    reporter_ = std::make_unique<MetricsReporter>(&power_manager_client_,
+    reporter_ = std::make_unique<MetricsReporter>(PowerManagerClient::Get(),
                                                   &pref_service_);
   }
 
@@ -73,7 +82,6 @@
   }
 
   base::test::ScopedTaskEnvironment scoped_task_environment_;
-  FakePowerManagerClient power_manager_client_;
   TestingPrefServiceSimple pref_service_;
   std::unique_ptr<MetricsReporter> reporter_;
 
diff --git a/chrome/browser/chromeos/power/extension_event_observer.cc b/chrome/browser/chromeos/power/extension_event_observer.cc
index 030e537..71f82e9 100644
--- a/chrome/browser/chromeos/power/extension_event_observer.cc
+++ b/chrome/browser/chromeos/power/extension_event_observer.cc
@@ -14,7 +14,6 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/gcm.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "content/public/browser/notification_service.h"
 #include "extensions/browser/extension_host.h"
 #include "extensions/browser/process_manager.h"
@@ -72,7 +71,7 @@
   registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
                  content::NotificationService::AllBrowserContextsAndSources());
 
-  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+  PowerManagerClient::Get()->AddObserver(this);
 }
 
 ExtensionEventObserver::~ExtensionEventObserver() {
@@ -85,7 +84,7 @@
     host->RemoveObserver(this);
   }
 
-  DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+  PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 std::unique_ptr<ExtensionEventObserver::TestApi>
@@ -244,9 +243,8 @@
   }
 
   suspend_is_pending_ = true;
-  power_manager_callback_ = DBusThreadManager::Get()
-                                ->GetPowerManagerClient()
-                                ->GetSuspendReadinessCallback(FROM_HERE);
+  power_manager_callback_ =
+      PowerManagerClient::Get()->GetSuspendReadinessCallback(FROM_HERE);
 
   suspend_readiness_callback_.Reset(
       base::Bind(&ExtensionEventObserver::MaybeReportSuspendReadiness,
diff --git a/chrome/browser/chromeos/power/extension_event_observer_unittest.cc b/chrome/browser/chromeos/power/extension_event_observer_unittest.cc
index 08e2b13..a938dfd 100644
--- a/chrome/browser/chromeos/power/extension_event_observer_unittest.cc
+++ b/chrome/browser/chromeos/power/extension_event_observer_unittest.cc
@@ -19,7 +19,6 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
 #include "components/user_manager/scoped_user_manager.h"
@@ -39,8 +38,7 @@
 class ExtensionEventObserverTest : public ChromeRenderViewHostTestHarness {
  public:
   ExtensionEventObserverTest()
-      : power_manager_client_(new FakePowerManagerClient()),
-        fake_user_manager_(new FakeChromeUserManager()),
+      : fake_user_manager_(new FakeChromeUserManager()),
         scoped_user_manager_enabler_(base::WrapUnique(fake_user_manager_)) {}
 
   ~ExtensionEventObserverTest() override = default;
@@ -49,8 +47,7 @@
   void SetUp() override {
     ChromeRenderViewHostTestHarness::SetUp();
 
-    DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        base::WrapUnique(power_manager_client_));
+    PowerManagerClient::Initialize();
     profile_manager_ = std::make_unique<TestingProfileManager>(
         TestingBrowserProcess::GetGlobal());
     extension_event_observer_ = std::make_unique<ExtensionEventObserver>();
@@ -73,7 +70,7 @@
     profile_ = NULL;
     profile_manager_->DeleteAllTestingProfiles();
     profile_manager_.reset();
-    DBusThreadManager::Shutdown();
+    PowerManagerClient::Shutdown();
     ChromeRenderViewHostTestHarness::TearDown();
   }
 
@@ -118,9 +115,6 @@
         ->GetBackgroundHostForExtension(app->id());
   }
 
-  // Owned by DBusThreadManager.
-  FakePowerManagerClient* power_manager_client_;
-
   std::unique_ptr<ExtensionEventObserver> extension_event_observer_;
   std::unique_ptr<ExtensionEventObserver::TestApi> test_api_;
 
@@ -144,28 +138,38 @@
 // Tests that the ExtensionEventObserver reports readiness for suspend when
 // there is nothing interesting going on.
 TEST_F(ExtensionEventObserverTest, BasicSuspendAndDarkSuspend) {
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      1,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
-  power_manager_client_->SendDarkSuspendImminent();
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  FakePowerManagerClient::Get()->SendDarkSuspendImminent();
+  EXPECT_EQ(
+      1,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 // Tests that the ExtensionEventObserver properly handles a canceled suspend
 // attempt.
 TEST_F(ExtensionEventObserverTest, CanceledSuspend) {
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      1,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
-  power_manager_client_->SendSuspendDone();
+  FakePowerManagerClient::Get()->SendSuspendDone();
   EXPECT_FALSE(test_api_->MaybeRunSuspendReadinessCallback());
 }
 
@@ -183,35 +187,45 @@
   const int kSuspendPushId = 23874;
   extension_event_observer_->OnBackgroundEventDispatched(
       host, extensions::api::gcm::OnMessage::kEventName, kSuspendPushId);
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
 
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      1,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   extension_event_observer_->OnBackgroundEventAcked(host, kSuspendPushId);
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   // Now test receiving the suspend attempt before the push message.
   const int kDarkSuspendPushId = 56674;
-  power_manager_client_->SendDarkSuspendImminent();
+  FakePowerManagerClient::Get()->SendDarkSuspendImminent();
   extension_event_observer_->OnBackgroundEventDispatched(
       host, extensions::api::gcm::OnMessage::kEventName, kDarkSuspendPushId);
 
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      1,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   extension_event_observer_->OnBackgroundEventAcked(host, kDarkSuspendPushId);
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   // Test that non-push messages do not delay the suspend.
   const int kNonPushId = 5687;
-  power_manager_client_->SendDarkSuspendImminent();
+  FakePowerManagerClient::Get()->SendDarkSuspendImminent();
   extension_event_observer_->OnBackgroundEventDispatched(host, "FakeMessage",
                                                          kNonPushId);
 
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 // Tests that messages sent for apps that don't use GCM are ignored.
@@ -222,10 +236,12 @@
 
   EXPECT_FALSE(test_api_->WillDelaySuspendForExtensionHost(host));
 
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 // Tests that network requests started by an app while it is processing a push
@@ -241,29 +257,37 @@
   // are ignored.
   const uint64_t kNonPushRequestId = 5170725;
   extension_event_observer_->OnNetworkRequestStarted(host, kNonPushRequestId);
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
 
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   // Test that network requests started while a push message is pending delay
   // the suspend even after the push message has been acked.
   const int kPushMessageId = 178674;
   const uint64_t kNetworkRequestId = 78917089;
-  power_manager_client_->SendDarkSuspendImminent();
+  FakePowerManagerClient::Get()->SendDarkSuspendImminent();
   extension_event_observer_->OnBackgroundEventDispatched(
       host, extensions::api::gcm::OnMessage::kEventName, kPushMessageId);
 
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      1,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   extension_event_observer_->OnNetworkRequestStarted(host, kNetworkRequestId);
   extension_event_observer_->OnBackgroundEventAcked(host, kPushMessageId);
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      1,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   extension_event_observer_->OnNetworkRequestDone(host, kNetworkRequestId);
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 // Tests that any outstanding push messages or network requests for an
@@ -291,10 +315,12 @@
   // ExtensionHosts.
   profile_manager_->DeleteTestingProfile(kProfileName);
 
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_TRUE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 // Tests that the ExtensionEventObserver does not delay suspend attempts when it
@@ -311,18 +337,24 @@
   const int kPushId = 416753;
   extension_event_observer_->OnBackgroundEventDispatched(
       host, extensions::api::gcm::OnMessage::kEventName, kPushId);
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      1,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   extension_event_observer_->SetShouldDelaySuspend(false);
   EXPECT_FALSE(test_api_->MaybeRunSuspendReadinessCallback());
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 
   // Test that the ExtensionEventObserver does not delay suspend attempts when
   // it is disabled.
-  power_manager_client_->SendDarkSuspendImminent();
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  FakePowerManagerClient::Get()->SendDarkSuspendImminent();
+  EXPECT_EQ(
+      0,
+      FakePowerManagerClient::Get()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/power/idle_action_warning_observer.cc b/chrome/browser/chromeos/power/idle_action_warning_observer.cc
index 9ef288f..42696be 100644
--- a/chrome/browser/chromeos/power/idle_action_warning_observer.cc
+++ b/chrome/browser/chromeos/power/idle_action_warning_observer.cc
@@ -29,11 +29,11 @@
 namespace chromeos {
 
 IdleActionWarningObserver::IdleActionWarningObserver() : warning_dialog_(NULL) {
-  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+  PowerManagerClient::Get()->AddObserver(this);
 }
 
 IdleActionWarningObserver::~IdleActionWarningObserver() {
-  DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+  PowerManagerClient::Get()->RemoveObserver(this);
   if (warning_dialog_)
     warning_dialog_->CloseDialog();
 }
diff --git a/chrome/browser/chromeos/power/ml/adaptive_screen_brightness_manager.cc b/chrome/browser/chromeos/power/ml/adaptive_screen_brightness_manager.cc
index 256926f..c4bde62 100644
--- a/chrome/browser/chromeos/power/ml/adaptive_screen_brightness_manager.cc
+++ b/chrome/browser/chromeos/power/ml/adaptive_screen_brightness_manager.cc
@@ -170,7 +170,7 @@
   }
 
   chromeos::PowerManagerClient* const power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   DCHECK(power_manager_client);
   ui::UserActivityDetector* const detector = ui::UserActivityDetector::Get();
   DCHECK(detector);
diff --git a/chrome/browser/chromeos/power/ml/adaptive_screen_brightness_manager_unittest.cc b/chrome/browser/chromeos/power/ml/adaptive_screen_brightness_manager_unittest.cc
index fde4c6d..516b25d 100644
--- a/chrome/browser/chromeos/power/ml/adaptive_screen_brightness_manager_unittest.cc
+++ b/chrome/browser/chromeos/power/ml/adaptive_screen_brightness_manager_unittest.cc
@@ -84,25 +84,34 @@
   AdaptiveScreenBrightnessManagerTest()
       : ChromeRenderViewHostTestHarness(
             base::test::ScopedTaskEnvironment::MainThreadType::UI_MOCK_TIME,
-            base::test::ScopedTaskEnvironment::ExecutionMode::QUEUED) {
+            base::test::ScopedTaskEnvironment::ExecutionMode::QUEUED) {}
+
+  ~AdaptiveScreenBrightnessManagerTest() override = default;
+
+  void SetUp() override {
+    ChromeRenderViewHostTestHarness::SetUp();
+    PowerManagerClient::Initialize();
     auto logger = std::make_unique<TestingAdaptiveScreenBrightnessUkmLogger>();
     ukm_logger_ = logger.get();
 
-    fake_power_manager_client_.Init(nullptr);
     viz::mojom::VideoDetectorObserverPtr observer;
     auto periodic_timer = std::make_unique<base::RepeatingTimer>();
     periodic_timer->SetTaskRunner(thread_bundle()->GetMainThreadTaskRunner());
     screen_brightness_manager_ =
         std::make_unique<AdaptiveScreenBrightnessManager>(
             std::move(logger), &user_activity_detector_,
-            &fake_power_manager_client_, nullptr, nullptr,
+            FakePowerManagerClient::Get(), nullptr, nullptr,
             mojo::MakeRequest(&observer), std::move(periodic_timer),
             const_cast<base::Clock*>(thread_bundle()->GetMockClock()),
             std::make_unique<FakeBootClock>(thread_bundle(),
                                             base::TimeDelta::FromSeconds(10)));
   }
 
-  ~AdaptiveScreenBrightnessManagerTest() override = default;
+  void TearDown() override {
+    screen_brightness_manager_.reset();
+    PowerManagerClient::Shutdown();
+    ChromeRenderViewHostTestHarness::TearDown();
+  }
 
  protected:
   TestingAdaptiveScreenBrightnessUkmLogger* ukm_logger() { return ukm_logger_; }
@@ -117,17 +126,17 @@
     power_manager::PowerSupplyProperties proto;
     proto.set_external_power(power);
     proto.set_battery_percent(battery_percent);
-    fake_power_manager_client_.UpdatePowerProperties(proto);
+    FakePowerManagerClient::Get()->UpdatePowerProperties(proto);
   }
 
-  void ReportLidEvent(const chromeos::PowerManagerClient::LidState state) {
-    fake_power_manager_client_.SetLidState(state, base::TimeTicks::UnixEpoch());
+  void ReportLidEvent(const PowerManagerClient::LidState state) {
+    FakePowerManagerClient::Get()->SetLidState(state,
+                                               base::TimeTicks::UnixEpoch());
   }
 
-  void ReportTabletModeEvent(
-      const chromeos::PowerManagerClient::TabletMode mode) {
-    fake_power_manager_client_.SetTabletMode(mode,
-                                             base::TimeTicks::UnixEpoch());
+  void ReportTabletModeEvent(const PowerManagerClient::TabletMode mode) {
+    FakePowerManagerClient::Get()->SetTabletMode(mode,
+                                                 base::TimeTicks::UnixEpoch());
   }
 
   void ReportBrightnessChangeEvent(
@@ -219,10 +228,9 @@
   const GURL kUrl3 = GURL("https://example3.com/");
 
  private:
-  chromeos::FakeChromeUserManager fake_user_manager_;
+  FakeChromeUserManager fake_user_manager_;
 
   ui::UserActivityDetector user_activity_detector_;
-  chromeos::FakePowerManagerClient fake_power_manager_client_;
   std::unique_ptr<AdaptiveScreenBrightnessManager> screen_brightness_manager_;
   TestingAdaptiveScreenBrightnessUkmLogger* ukm_logger_;
 
@@ -233,8 +241,8 @@
   InitializeBrightness(75.0f);
   ReportPowerChangeEvent(power_manager::PowerSupplyProperties::AC, 23.0f);
   ReportVideoStart();
-  ReportLidEvent(chromeos::PowerManagerClient::LidState::OPEN);
-  ReportTabletModeEvent(chromeos::PowerManagerClient::TabletMode::UNSUPPORTED);
+  ReportLidEvent(PowerManagerClient::LidState::OPEN);
+  ReportTabletModeEvent(PowerManagerClient::TabletMode::UNSUPPORTED);
 
   FastForwardTimeBySecs(kLoggingIntervalSecs);
 
@@ -260,8 +268,8 @@
        PeriodicLoggingBrightnessUninitialized) {
   ReportPowerChangeEvent(power_manager::PowerSupplyProperties::AC, 23.0f);
   ReportVideoStart();
-  ReportLidEvent(chromeos::PowerManagerClient::LidState::OPEN);
-  ReportTabletModeEvent(chromeos::PowerManagerClient::TabletMode::UNSUPPORTED);
+  ReportLidEvent(PowerManagerClient::LidState::OPEN);
+  ReportTabletModeEvent(PowerManagerClient::TabletMode::UNSUPPORTED);
 
   FastForwardTimeBySecs(kLoggingIntervalSecs);
 
@@ -272,8 +280,8 @@
 TEST_F(AdaptiveScreenBrightnessManagerTest, PeriodicTimerTest) {
   ReportPowerChangeEvent(power_manager::PowerSupplyProperties::AC, 23.0f);
   ReportVideoStart();
-  ReportLidEvent(chromeos::PowerManagerClient::LidState::OPEN);
-  ReportTabletModeEvent(chromeos::PowerManagerClient::TabletMode::UNSUPPORTED);
+  ReportLidEvent(PowerManagerClient::LidState::OPEN);
+  ReportTabletModeEvent(PowerManagerClient::TabletMode::UNSUPPORTED);
 
   FastForwardTimeBySecs(kLoggingIntervalSecs - 10);
 
diff --git a/chrome/browser/chromeos/power/ml/idle_event_notifier_unittest.cc b/chrome/browser/chromeos/power/ml/idle_event_notifier_unittest.cc
index 1049255..fea70ec 100644
--- a/chrome/browser/chromeos/power/ml/idle_event_notifier_unittest.cc
+++ b/chrome/browser/chromeos/power/ml/idle_event_notifier_unittest.cc
@@ -81,10 +81,16 @@
   IdleEventNotifierTest()
       : scoped_task_env_(
             base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME,
-            base::test::ScopedTaskEnvironment::ExecutionMode::QUEUED) {
+            base::test::ScopedTaskEnvironment::ExecutionMode::QUEUED) {}
+
+  ~IdleEventNotifierTest() override = default;
+
+  void SetUp() override {
+    PowerManagerClient::Initialize();
     viz::mojom::VideoDetectorObserverPtr observer;
     idle_event_notifier_ = std::make_unique<IdleEventNotifier>(
-        &power_client_, &user_activity_detector_, mojo::MakeRequest(&observer));
+        PowerManagerClient::Get(), &user_activity_detector_,
+        mojo::MakeRequest(&observer));
     idle_event_notifier_->SetClockForTesting(
         scoped_task_env_.GetMainThreadTaskRunner(),
         const_cast<base::Clock*>(scoped_task_env_.GetMockClock()),
@@ -97,12 +103,15 @@
         power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED);
   }
 
-  ~IdleEventNotifierTest() override {
+  void TearDown() override {
     idle_event_notifier_.reset();
+    PowerManagerClient::Shutdown();
   }
 
  protected:
-  void ReportScreenDimImminent() { power_client_.SendScreenDimImminent(); }
+  void ReportScreenDimImminent() {
+    FakePowerManagerClient::Get()->SendScreenDimImminent();
+  }
 
   void ReportIdleEventAndCheckResults(
       int expected_idle_count,
@@ -118,7 +127,6 @@
   std::unique_ptr<IdleEventNotifier> idle_event_notifier_;
   power_manager::PowerSupplyProperties ac_power_;
   power_manager::PowerSupplyProperties disconnected_power_;
-  FakePowerManagerClient power_client_;
   ui::UserActivityDetector user_activity_detector_;
 
  private:
diff --git a/chrome/browser/chromeos/power/ml/user_activity_controller.cc b/chrome/browser/chromeos/power/ml/user_activity_controller.cc
index b80d66b..a87dcc50 100644
--- a/chrome/browser/chromeos/power/ml/user_activity_controller.cc
+++ b/chrome/browser/chromeos/power/ml/user_activity_controller.cc
@@ -29,7 +29,7 @@
   }
 
   chromeos::PowerManagerClient* power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   DCHECK(power_manager_client);
   ui::UserActivityDetector* detector = ui::UserActivityDetector::Get();
   DCHECK(detector);
diff --git a/chrome/browser/chromeos/power/ml/user_activity_manager_unittest.cc b/chrome/browser/chromeos/power/ml/user_activity_manager_unittest.cc
index 426d41e..8656d5e 100644
--- a/chrome/browser/chromeos/power/ml/user_activity_manager_unittest.cc
+++ b/chrome/browser/chromeos/power/ml/user_activity_manager_unittest.cc
@@ -35,7 +35,6 @@
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/idle.pb.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
-#include "chromeos/dbus/power_manager_client.h"
 #include "components/session_manager/session_manager_types.h"
 #include "components/ukm/content/source_url_recorder.h"
 #include "components/ukm/test_ukm_recorder.h"
@@ -174,15 +173,22 @@
       : ChromeRenderViewHostTestHarness(
             base::test::ScopedTaskEnvironment::MainThreadType::UI_MOCK_TIME,
             base::test::ScopedTaskEnvironment::ExecutionMode::QUEUED),
-        model_(thread_bundle()->GetMainThreadTaskRunner()) {
-    fake_power_manager_client_.Init(nullptr);
+        model_(thread_bundle()->GetMainThreadTaskRunner()) {}
+
+  ~UserActivityManagerTest() override = default;
+
+  // ChromeRenderViewHostTestHarness:
+  void SetUp() override {
+    ChromeRenderViewHostTestHarness::SetUp();
+
+    PowerManagerClient::Initialize();
     viz::mojom::VideoDetectorObserverPtr observer;
     idle_event_notifier_ = std::make_unique<IdleEventNotifier>(
-        &fake_power_manager_client_, &user_activity_detector_,
+        PowerManagerClient::Get(), &user_activity_detector_,
         mojo::MakeRequest(&observer));
     activity_logger_ = std::make_unique<UserActivityManager>(
         &delegate_, idle_event_notifier_.get(), &user_activity_detector_,
-        &fake_power_manager_client_, &session_manager_,
+        PowerManagerClient::Get(), &session_manager_,
         mojo::MakeRequest(&observer), &fake_user_manager_, &model_);
     activity_logger_->SetTaskRunnerForTesting(
         thread_bundle()->GetMainThreadTaskRunner(),
@@ -190,7 +196,12 @@
                                         base::TimeDelta::FromSeconds(10)));
   }
 
-  ~UserActivityManagerTest() override = default;
+  void TearDown() override {
+    activity_logger_.reset();
+    idle_event_notifier_.reset();
+    PowerManagerClient::Shutdown();
+    ChromeRenderViewHostTestHarness::TearDown();
+  }
 
  protected:
   void ReportUserActivity(const ui::Event* event) {
@@ -202,7 +213,8 @@
   }
 
   void ReportLidEvent(chromeos::PowerManagerClient::LidState state) {
-    fake_power_manager_client_.SetLidState(state, base::TimeTicks::UnixEpoch());
+    FakePowerManagerClient::Get()->SetLidState(state,
+                                               base::TimeTicks::UnixEpoch());
   }
 
   void ReportPowerChangeEvent(
@@ -211,12 +223,12 @@
     power_manager::PowerSupplyProperties proto;
     proto.set_external_power(power);
     proto.set_battery_percent(battery_percent);
-    fake_power_manager_client_.UpdatePowerProperties(proto);
+    FakePowerManagerClient::Get()->UpdatePowerProperties(proto);
   }
 
   void ReportTabletModeEvent(chromeos::PowerManagerClient::TabletMode mode) {
-    fake_power_manager_client_.SetTabletMode(mode,
-                                             base::TimeTicks::UnixEpoch());
+    FakePowerManagerClient::Get()->SetTabletMode(mode,
+                                                 base::TimeTicks::UnixEpoch());
   }
 
   void ReportVideoStart() { activity_logger_->OnVideoActivityStarted(); }
@@ -225,7 +237,7 @@
     power_manager::ScreenIdleState proto;
     proto.set_dimmed(screen_dim);
     proto.set_off(screen_off);
-    fake_power_manager_client_.SendScreenIdleStateChanged(proto);
+    FakePowerManagerClient::Get()->SendScreenIdleStateChanged(proto);
   }
 
   void ReportScreenLocked() {
@@ -234,9 +246,9 @@
 
   void ReportSuspend(power_manager::SuspendImminent::Reason reason,
                      base::TimeDelta sleep_duration) {
-    fake_power_manager_client_.SendSuspendImminent(reason);
+    FakePowerManagerClient::Get()->SendSuspendImminent(reason);
     thread_bundle()->FastForwardBy(sleep_duration);
-    fake_power_manager_client_.SendSuspendDone(sleep_duration);
+    FakePowerManagerClient::Get()->SendSuspendDone(sleep_duration);
   }
 
   void ReportInactivityDelays(base::TimeDelta screen_dim_delay,
@@ -244,11 +256,11 @@
     power_manager::PowerManagementPolicy::Delays proto;
     proto.set_screen_dim_ms(screen_dim_delay.InMilliseconds());
     proto.set_screen_off_ms(screen_off_delay.InMilliseconds());
-    fake_power_manager_client_.SetInactivityDelays(proto);
+    FakePowerManagerClient::Get()->SetInactivityDelays(proto);
   }
 
   int GetNumberOfDeferredDims() {
-    return fake_power_manager_client_.num_defer_screen_dim_calls();
+    return FakePowerManagerClient::Get()->num_defer_screen_dim_calls();
   }
 
   TabProperty UpdateOpenTabURL() {
@@ -325,7 +337,6 @@
  private:
   ui::UserActivityDetector user_activity_detector_;
   std::unique_ptr<IdleEventNotifier> idle_event_notifier_;
-  chromeos::FakePowerManagerClient fake_power_manager_client_;
   session_manager::SessionManager session_manager_;
   std::unique_ptr<UserActivityManager> activity_logger_;
 
diff --git a/chrome/browser/chromeos/power/power_data_collector.cc b/chrome/browser/chromeos/power/power_data_collector.cc
index bc8ebcdc..fe7668b 100644
--- a/chrome/browser/chromeos/power/power_data_collector.cc
+++ b/chrome/browser/chromeos/power/power_data_collector.cc
@@ -5,8 +5,8 @@
 #include "chrome/browser/chromeos/power/power_data_collector.h"
 
 #include "base/logging.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
+#include "chromeos/dbus/power_manager_client.h"
 
 namespace chromeos {
 
@@ -22,14 +22,14 @@
 // static
 void PowerDataCollector::Initialize() {
   // Check that power data collector is initialized only after the
-  // DBusThreadManager is initialized.
-  CHECK(DBusThreadManager::Get());
+  // PowerManagerClient is initialized.
+  CHECK(PowerManagerClient::Get());
   CHECK(g_power_data_collector == NULL);
   g_power_data_collector = new PowerDataCollector(true);
 }
 
 void PowerDataCollector::InitializeForTesting() {
-  CHECK(DBusThreadManager::Get());
+  CHECK(PowerManagerClient::Get());
   CHECK(g_power_data_collector == NULL);
   g_power_data_collector = new PowerDataCollector(false);
 }
@@ -67,15 +67,13 @@
 }
 
 PowerDataCollector::PowerDataCollector(const bool start_cpu_data_collector) {
-  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+  PowerManagerClient::Get()->AddObserver(this);
   if (start_cpu_data_collector)
     cpu_data_collector_.Start();
 }
 
 PowerDataCollector::~PowerDataCollector() {
-  DBusThreadManager* dbus_manager = DBusThreadManager::Get();
-  CHECK(dbus_manager);
-  dbus_manager->GetPowerManagerClient()->RemoveObserver(this);
+  PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 PowerDataCollector::PowerSupplySample::PowerSupplySample()
diff --git a/chrome/browser/chromeos/power/power_data_collector_unittest.cc b/chrome/browser/chromeos/power/power_data_collector_unittest.cc
index 197b509..1af928f 100644
--- a/chrome/browser/chromeos/power/power_data_collector_unittest.cc
+++ b/chrome/browser/chromeos/power/power_data_collector_unittest.cc
@@ -6,31 +6,30 @@
 #include <stdint.h>
 
 #include "chrome/browser/chromeos/power/power_data_collector.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace chromeos {
 
 class PowerDataCollectorTest : public testing::Test {
  public:
-  PowerDataCollectorTest() : power_data_collector_(NULL) {}
-  ~PowerDataCollectorTest() override {}
+  PowerDataCollectorTest() = default;
+  ~PowerDataCollectorTest() override = default;
 
   void SetUp() override {
-    DBusThreadManager::Initialize();
+    PowerManagerClient::Initialize();
     PowerDataCollector::InitializeForTesting();
     power_data_collector_ = PowerDataCollector::Get();
   }
 
   void TearDown() override {
     PowerDataCollector::Shutdown();
-    DBusThreadManager::Shutdown();
-    power_data_collector_ = NULL;
+    PowerManagerClient::Shutdown();
   }
 
  protected:
-  PowerDataCollector* power_data_collector_;
+  PowerDataCollector* power_data_collector_ = nullptr;
 };
 
 TEST_F(PowerDataCollectorTest, PowerChanged) {
diff --git a/chrome/browser/chromeos/power/power_metrics_reporter_unittest.cc b/chrome/browser/chromeos/power/power_metrics_reporter_unittest.cc
index cf452bf..6df185b 100644
--- a/chrome/browser/chromeos/power/power_metrics_reporter_unittest.cc
+++ b/chrome/browser/chromeos/power/power_metrics_reporter_unittest.cc
@@ -19,22 +19,31 @@
 
 class PowerMetricsReporterTest : public testing::Test {
  public:
-  PowerMetricsReporterTest() {
+  PowerMetricsReporterTest() = default;
+  ~PowerMetricsReporterTest() override = default;
+
+  void SetUp() override {
+    PowerManagerClient::Initialize();
     PowerMetricsReporter::RegisterLocalStatePrefs(pref_service_.registry());
     ResetReporter();
   }
 
+  void TearDown() override {
+    reporter_.reset();
+    PowerManagerClient::Shutdown();
+  }
+
  protected:
   // Reinitialize |reporter_| without resetting underlying prefs. May be called
   // by tests to simulate a Chrome restart.
   void ResetReporter() {
-    reporter_ = std::make_unique<PowerMetricsReporter>(&power_manager_client_,
-                                                       &pref_service_);
+    reporter_ = std::make_unique<PowerMetricsReporter>(
+        chromeos::FakePowerManagerClient::Get(), &pref_service_);
   }
 
   // Notifies |reporter_| that the screen is undimmed and on.
   void SendNormalScreenIdleState() {
-    power_manager_client_.SendScreenIdleStateChanged(
+    chromeos::FakePowerManagerClient::Get()->SendScreenIdleStateChanged(
         power_manager::ScreenIdleState());
   }
 
@@ -42,7 +51,7 @@
   void SendDimmedScreenIdleState() {
     power_manager::ScreenIdleState state;
     state.set_dimmed(true);
-    power_manager_client_.SendScreenIdleStateChanged(state);
+    chromeos::FakePowerManagerClient::Get()->SendScreenIdleStateChanged(state);
   }
 
   // Notifies |reporter_| that the screen is dimmed and off.
@@ -50,7 +59,7 @@
     power_manager::ScreenIdleState state;
     state.set_dimmed(true);
     state.set_off(true);
-    power_manager_client_.SendScreenIdleStateChanged(state);
+    chromeos::FakePowerManagerClient::Get()->SendScreenIdleStateChanged(state);
   }
 
   // Instructs |reporter_| to report daily metrics for reason |type|.
@@ -79,7 +88,6 @@
 
   base::test::ScopedTaskEnvironment scoped_task_environment_;
   TestingPrefServiceSimple pref_service_;
-  FakePowerManagerClient power_manager_client_;
   std::unique_ptr<PowerMetricsReporter> reporter_;
 
  private:
@@ -99,9 +107,9 @@
   // The next day, report three dims, two screen-offs, and one idle suspend.
   SendDimmedScreenIdleState();
   SendDimmedAndOffScreenIdleState();
-  power_manager_client_.SendSuspendImminent(
+  chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_IDLE);
-  power_manager_client_.SendSuspendDone();
+  chromeos::FakePowerManagerClient::Get()->SendSuspendDone();
   SendNormalScreenIdleState();
   SendDimmedScreenIdleState();
   SendDimmedAndOffScreenIdleState();
@@ -111,9 +119,9 @@
   TriggerDailyEventAndVerifyHistograms(3, 2, 1, 0);
 
   // The next day, report a single lid-closed suspend.
-  power_manager_client_.SendSuspendImminent(
+  chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_LID_CLOSED);
-  power_manager_client_.SendSuspendDone();
+  chromeos::FakePowerManagerClient::Get()->SendSuspendDone();
   TriggerDailyEventAndVerifyHistograms(0, 0, 0, 1);
 
   // We should report zeros if a day passes without any events.
@@ -146,9 +154,9 @@
 
 TEST_F(PowerMetricsReporterTest, IgnoreOtherSuspendReasons) {
   // Suspends triggered for other reasons shouldn't be reported.
-  power_manager_client_.SendSuspendImminent(
+  chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
-  power_manager_client_.SendSuspendDone();
+  chromeos::FakePowerManagerClient::Get()->SendSuspendDone();
   TriggerDailyEventAndVerifyHistograms(0, 0, 0, 0);
 }
 
diff --git a/chrome/browser/chromeos/power/renderer_freezer.cc b/chrome/browser/chromeos/power/renderer_freezer.cc
index 17f7d23..90f671bd 100644
--- a/chrome/browser/chromeos/power/renderer_freezer.cc
+++ b/chrome/browser/chromeos/power/renderer_freezer.cc
@@ -11,7 +11,6 @@
 #include "base/logging.h"
 #include "base/process/process_handle.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
@@ -109,9 +108,8 @@
   if (!can_freeze)
     return;
 
-  DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->SetRenderProcessManagerDelegate(weak_factory_.GetWeakPtr());
+  PowerManagerClient::Get()->SetRenderProcessManagerDelegate(
+      weak_factory_.GetWeakPtr());
 
   registrar_.Add(
       this,
diff --git a/chrome/browser/chromeos/power/renderer_freezer_unittest.cc b/chrome/browser/chromeos/power/renderer_freezer_unittest.cc
index 2212253..0e4c6ce 100644
--- a/chrome/browser/chromeos/power/renderer_freezer_unittest.cc
+++ b/chrome/browser/chromeos/power/renderer_freezer_unittest.cc
@@ -19,7 +19,6 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
 #include "content/public/browser/notification_service.h"
@@ -130,17 +129,17 @@
 
 class RendererFreezerTest : public testing::Test {
  public:
-  RendererFreezerTest()
-      : power_manager_client_(new FakePowerManagerClient()),
-        test_delegate_(new TestDelegate()) {
-    DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::unique_ptr<PowerManagerClient>(power_manager_client_));
-  }
+  RendererFreezerTest() : test_delegate_(new TestDelegate()) {}
 
-  ~RendererFreezerTest() override {
+  ~RendererFreezerTest() override = default;
+
+  // testing::Test:
+  void SetUp() override { PowerManagerClient::Initialize(); }
+
+  void TearDown() override {
+    DCHECK(renderer_freezer_);
+    PowerManagerClient::Shutdown();
     renderer_freezer_.reset();
-
-    DBusThreadManager::Shutdown();
   }
 
  protected:
@@ -149,9 +148,6 @@
         std::unique_ptr<RendererFreezer::Delegate>(test_delegate_)));
   }
 
-  // Owned by DBusThreadManager.
-  FakePowerManagerClient* power_manager_client_;
-
   // Owned by |renderer_freezer_|.
   TestDelegate* test_delegate_;
   std::unique_ptr<RendererFreezer> renderer_freezer_;
@@ -167,12 +163,12 @@
 TEST_F(RendererFreezerTest, SuspendResume) {
   Init();
 
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(kFreezeRenderers, test_delegate_->GetActions());
 
   // The renderers should be thawed when we resume.
-  power_manager_client_->SendSuspendDone();
+  FakePowerManagerClient::Get()->SendSuspendDone();
   EXPECT_EQ(kThawRenderers, test_delegate_->GetActions());
 }
 
@@ -183,12 +179,12 @@
   Init();
 
   // Nothing happens on suspend.
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(kNoActions, test_delegate_->GetActions());
 
   // Nothing happens on resume.
-  power_manager_client_->SendSuspendDone();
+  FakePowerManagerClient::Get()->SendSuspendDone();
   EXPECT_EQ(kNoActions, test_delegate_->GetActions());
 }
 
@@ -203,11 +199,12 @@
   Init();
   test_delegate_->set_thaw_renderers_result(false);
 
-  power_manager_client_->SendSuspendImminent(
+  FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(kFreezeRenderers, test_delegate_->GetActions());
 
-  EXPECT_DEATH(power_manager_client_->SendSuspendDone(), "Unable to thaw");
+  EXPECT_DEATH(FakePowerManagerClient::Get()->SendSuspendDone(),
+               "Unable to thaw");
 }
 #endif  // GTEST_HAS_DEATH_TEST
 
diff --git a/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc b/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc
index ffc75501..1f0e48b 100644
--- a/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc
+++ b/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc
@@ -72,14 +72,19 @@
     provider_.reset(new DeviceSettingsProvider(
         base::Bind(&DeviceSettingsProviderTest::SettingChanged,
                    base::Unretained(this)),
-        &device_settings_service_, local_state_.Get()));
+        device_settings_service_.get(), local_state_.Get()));
     Mock::VerifyAndClearExpectations(this);
   }
 
+  void TearDown() override {
+    provider_.reset();
+    DeviceSettingsTestBase::TearDown();
+  }
+
   void BuildAndInstallDevicePolicy() {
     EXPECT_CALL(*this, SettingChanged(_)).Times(AtLeast(1));
-    device_policy_.Build();
-    session_manager_client_.set_device_policy(device_policy_.GetBlob());
+    device_policy_->Build();
+    session_manager_client_.set_device_policy(device_policy_->GetBlob());
     ReloadDeviceSettings();
     Mock::VerifyAndClearExpectations(this);
   }
@@ -87,7 +92,7 @@
   // Helper routine to enable/disable all reporting settings in policy.
   void SetReportingSettings(bool enable_reporting, int frequency) {
     em::DeviceReportingProto* proto =
-        device_policy_.payload().mutable_device_reporting();
+        device_policy_->payload().mutable_device_reporting();
     proto->set_report_version_info(enable_reporting);
     proto->set_report_activity_times(enable_reporting);
     proto->set_report_boot_mode(enable_reporting);
@@ -108,7 +113,7 @@
   // Helper routine to enable/disable all reporting settings in policy.
   void SetHeartbeatSettings(bool enable_heartbeat, int frequency) {
     em::DeviceHeartbeatSettingsProto* proto =
-        device_policy_.payload().mutable_device_heartbeat_settings();
+        device_policy_->payload().mutable_device_heartbeat_settings();
     proto->set_heartbeat_enabled(enable_heartbeat);
     proto->set_heartbeat_frequency(frequency);
     BuildAndInstallDevicePolicy();
@@ -117,7 +122,7 @@
   // Helper routine to enable/disable log upload settings in policy.
   void SetLogUploadSettings(bool enable_system_log_upload) {
     em::DeviceLogUploadSettingsProto* proto =
-        device_policy_.payload().mutable_device_log_upload_settings();
+        device_policy_->payload().mutable_device_log_upload_settings();
     proto->set_system_log_upload_enabled(enable_system_log_upload);
     BuildAndInstallDevicePolicy();
   }
@@ -125,7 +130,7 @@
   // Helper routine to set device wallpaper setting in policy.
   void SetWallpaperSettings(const std::string& wallpaper_settings) {
     em::DeviceWallpaperImageProto* proto =
-        device_policy_.payload().mutable_device_wallpaper_image();
+        device_policy_->payload().mutable_device_wallpaper_image();
     proto->set_device_wallpaper_image(wallpaper_settings);
     BuildAndInstallDevicePolicy();
   }
@@ -136,11 +141,11 @@
   void SetMetricsReportingSettings(MetricsOption option) {
     if (option == REMOVE_METRICS_POLICY) {
       // Remove policy altogether
-      device_policy_.payload().clear_metrics_enabled();
+      device_policy_->payload().clear_metrics_enabled();
     } else {
       // Enable or disable policy
       em::MetricsEnabledProto* proto =
-          device_policy_.payload().mutable_metrics_enabled();
+          device_policy_->payload().mutable_metrics_enabled();
       proto->set_metrics_enabled(option == ENABLE_METRICS);
     }
     BuildAndInstallDevicePolicy();
@@ -200,7 +205,7 @@
   // Helper routine to set LoginScreenDomainAutoComplete policy.
   void SetDomainAutoComplete(const std::string& domain) {
     em::LoginScreenDomainAutoCompleteProto* proto =
-        device_policy_.payload().mutable_login_screen_domain_auto_complete();
+        device_policy_->payload().mutable_login_screen_domain_auto_complete();
     proto->set_login_screen_domain_auto_complete(domain);
     BuildAndInstallDevicePolicy();
   }
@@ -215,7 +220,7 @@
   // Helper routine to set AutoUpdates connection types policy.
   void SetAutoUpdateConnectionTypes(const std::vector<int>& values) {
     em::AutoUpdateSettingsProto* proto =
-        device_policy_.payload().mutable_auto_update_settings();
+        device_policy_->payload().mutable_auto_update_settings();
     proto->set_update_disabled(false);
     for (auto const& value : values) {
       proto->add_allowed_connection_types(kConnectionTypes[value]);
@@ -226,7 +231,7 @@
   // Helper routine to set HostnameTemplate policy.
   void SetHostnameTemplate(const std::string& hostname_template) {
     em::NetworkHostnameProto* proto =
-        device_policy_.payload().mutable_network_hostname();
+        device_policy_->payload().mutable_network_hostname();
     proto->set_device_hostname_template(hostname_template);
     BuildAndInstallDevicePolicy();
   }
@@ -235,7 +240,7 @@
   void SetSamlLoginAuthenticationType(
       em::SamlLoginAuthenticationTypeProto::Type value) {
     em::SamlLoginAuthenticationTypeProto* proto =
-        device_policy_.payload().mutable_saml_login_authentication_type();
+        device_policy_->payload().mutable_saml_login_authentication_type();
     proto->set_saml_login_authentication_type(value);
     BuildAndInstallDevicePolicy();
   }
@@ -243,21 +248,21 @@
   // Helper routine that sets the device DeviceAutoUpdateTimeRestricitons policy
   void SetDeviceAutoUpdateTimeRestrictions(const std::string& json_string) {
     em::AutoUpdateSettingsProto* proto =
-        device_policy_.payload().mutable_auto_update_settings();
+        device_policy_->payload().mutable_auto_update_settings();
     proto->set_disallowed_time_intervals(json_string);
     BuildAndInstallDevicePolicy();
   }
 
   void SetPluginVmAllowedSetting(bool plugin_vm_allowed) {
     em::PluginVmAllowedProto* proto =
-        device_policy_.payload().mutable_plugin_vm_allowed();
+        device_policy_->payload().mutable_plugin_vm_allowed();
     proto->set_plugin_vm_allowed(plugin_vm_allowed);
     BuildAndInstallDevicePolicy();
   }
 
   void SetPluginVmLicenseKeySetting(const std::string& plugin_vm_license_key) {
     em::PluginVmLicenseKeyProto* proto =
-        device_policy_.payload().mutable_plugin_vm_license_key();
+        device_policy_->payload().mutable_plugin_vm_license_key();
     proto->set_plugin_vm_license_key(plugin_vm_license_key);
     BuildAndInstallDevicePolicy();
   }
@@ -266,10 +271,10 @@
       em::DeviceRebootOnUserSignoutProto::RebootOnSignoutMode value) {
     EXPECT_CALL(*this, SettingChanged(_)).Times(AtLeast(1));
     em::DeviceRebootOnUserSignoutProto* proto =
-        device_policy_.payload().mutable_device_reboot_on_user_signout();
+        device_policy_->payload().mutable_device_reboot_on_user_signout();
     proto->set_reboot_on_signout_mode(value);
-    device_policy_.Build();
-    session_manager_client_.set_device_policy(device_policy_.GetBlob());
+    device_policy_->Build();
+    session_manager_client_.set_device_policy(device_policy_->GetBlob());
     ReloadDeviceSettings();
     Mock::VerifyAndClearExpectations(this);
   }
@@ -277,7 +282,7 @@
   // Helper routine that sets the device DeviceWilcoDtcAllowed policy.
   void SetDeviceWilcoDtcAllowedSetting(bool device_wilco_dtc_allowed) {
     em::DeviceWilcoDtcAllowedProto* const proto =
-        device_policy_.payload().mutable_device_wilco_dtc_allowed();
+        device_policy_->payload().mutable_device_wilco_dtc_allowed();
     proto->set_device_wilco_dtc_allowed(device_wilco_dtc_allowed);
     BuildAndInstallDevicePolicy();
   }
@@ -399,8 +404,8 @@
 }
 
 TEST_F(DeviceSettingsProviderTest, SetPrefSucceed) {
-  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
-  InitOwner(AccountId::FromUserEmail(device_policy_.policy_data().username()),
+  owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
+  InitOwner(AccountId::FromUserEmail(device_policy_->policy_data().username()),
             true);
   FlushDeviceSettings();
 
@@ -415,9 +420,10 @@
   FlushDeviceSettings();
 
   // Verify that the device policy has been adjusted.
-  ASSERT_TRUE(device_settings_service_.device_settings());
-  EXPECT_TRUE(device_settings_service_.device_settings()->
-                  metrics_enabled().metrics_enabled());
+  ASSERT_TRUE(device_settings_service_->device_settings());
+  EXPECT_TRUE(device_settings_service_->device_settings()
+                  ->metrics_enabled()
+                  .metrics_enabled());
 
   // Verify the change has been applied.
   const base::Value* saved_value = provider_->Get(kStatsReportingPref);
@@ -428,8 +434,8 @@
 }
 
 TEST_F(DeviceSettingsProviderTest, SetPrefTwice) {
-  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
-  InitOwner(AccountId::FromUserEmail(device_policy_.policy_data().username()),
+  owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
+  InitOwner(AccountId::FromUserEmail(device_policy_->policy_data().username()),
             true);
   FlushDeviceSettings();
 
@@ -452,26 +458,26 @@
 }
 
 TEST_F(DeviceSettingsProviderTest, PolicyRetrievalFailedBadSignature) {
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
-  device_policy_.policy().set_policy_data_signature("bad signature");
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
+  device_policy_->policy().set_policy_data_signature("bad signature");
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
   ReloadDeviceSettings();
 
   // Verify that the cached settings blob is not "trusted".
   EXPECT_EQ(DeviceSettingsService::STORE_VALIDATION_ERROR,
-            device_settings_service_.status());
+            device_settings_service_->status());
   EXPECT_EQ(CrosSettingsProvider::PERMANENTLY_UNTRUSTED,
             provider_->PrepareTrustedValues(base::Closure()));
 }
 
 TEST_F(DeviceSettingsProviderTest, PolicyRetrievalNoPolicy) {
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
   session_manager_client_.set_device_policy(std::string());
   ReloadDeviceSettings();
 
   // Verify that the cached settings blob is not "trusted".
   EXPECT_EQ(DeviceSettingsService::STORE_NO_POLICY,
-            device_settings_service_.status());
+            device_settings_service_->status());
   EXPECT_EQ(CrosSettingsProvider::PERMANENTLY_UNTRUSTED,
             provider_->PrepareTrustedValues(base::Closure()));
 }
@@ -506,7 +512,7 @@
 
 TEST_F(DeviceSettingsProviderTest, LegacyDeviceLocalAccounts) {
   em::DeviceLocalAccountInfoProto* account =
-      device_policy_.payload().mutable_device_local_accounts()->add_account();
+      device_policy_->payload().mutable_device_local_accounts()->add_account();
   account->set_deprecated_public_session_id(
       policy::PolicyBuilder::kFakeUsername);
   BuildAndInstallDevicePolicy();
@@ -526,10 +532,12 @@
 }
 
 TEST_F(DeviceSettingsProviderTest, DecodeDeviceState) {
-  device_policy_.policy_data().mutable_device_state()->set_device_mode(
+  device_policy_->policy_data().mutable_device_state()->set_device_mode(
       em::DeviceState::DEVICE_MODE_DISABLED);
-  device_policy_.policy_data().mutable_device_state()->
-      mutable_disabled_state()->set_message(kDisabledMessage);
+  device_policy_->policy_data()
+      .mutable_device_state()
+      ->mutable_disabled_state()
+      ->set_message(kDisabledMessage);
   BuildAndInstallDevicePolicy();
   // Verify that the device state has been decoded correctly.
   const base::Value expected_disabled_value(true);
@@ -539,7 +547,7 @@
             *provider_->Get(kDeviceDisabledMessage));
 
   // Verify that a change to the device state triggers a notification.
-  device_policy_.policy_data().mutable_device_state()->clear_device_mode();
+  device_policy_->policy_data().mutable_device_state()->clear_device_mode();
   BuildAndInstallDevicePolicy();
 
   // Verify that the updated state has been decoded correctly.
diff --git a/chrome/browser/chromeos/settings/device_settings_service_unittest.cc b/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
index 9bd866c..1b0ef5c 100644
--- a/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
+++ b/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
@@ -62,19 +62,24 @@
       : operation_completed_(false),
         is_owner_(true),
         is_owner_set_(false),
-        ownership_status_(DeviceSettingsService::OWNERSHIP_UNKNOWN) {
-    device_policy_.payload().mutable_device_policy_refresh_rate()->
-        set_device_policy_refresh_rate(120);
+        ownership_status_(DeviceSettingsService::OWNERSHIP_UNKNOWN) {}
+  ~DeviceSettingsServiceTest() override = default;
+
+  void SetUp() override {
+    DeviceSettingsTestBase::SetUp();
+    device_policy_->payload()
+        .mutable_device_policy_refresh_rate()
+        ->set_device_policy_refresh_rate(120);
     ReloadDevicePolicy();
   }
 
   void CheckPolicy() {
-    ASSERT_TRUE(device_settings_service_.policy_data());
-    EXPECT_EQ(device_policy_.policy_data().SerializeAsString(),
-              device_settings_service_.policy_data()->SerializeAsString());
-    ASSERT_TRUE(device_settings_service_.device_settings());
-    EXPECT_EQ(device_policy_.payload().SerializeAsString(),
-              device_settings_service_.device_settings()->SerializeAsString());
+    ASSERT_TRUE(device_settings_service_->policy_data());
+    EXPECT_EQ(device_policy_->policy_data().SerializeAsString(),
+              device_settings_service_->policy_data()->SerializeAsString());
+    ASSERT_TRUE(device_settings_service_->device_settings());
+    EXPECT_EQ(device_policy_->payload().SerializeAsString(),
+              device_settings_service_->device_settings()->SerializeAsString());
   }
 
   bool operation_completed_;
@@ -91,9 +96,9 @@
   ReloadDeviceSettings();
 
   EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
-            device_settings_service_.status());
-  EXPECT_FALSE(device_settings_service_.policy_data());
-  EXPECT_FALSE(device_settings_service_.device_settings());
+            device_settings_service_->status());
+  EXPECT_FALSE(device_settings_service_->policy_data());
+  EXPECT_FALSE(device_settings_service_->device_settings());
 }
 
 TEST_F(DeviceSettingsServiceTest, LoadNoPolicy) {
@@ -101,37 +106,37 @@
   ReloadDeviceSettings();
 
   EXPECT_EQ(DeviceSettingsService::STORE_NO_POLICY,
-            device_settings_service_.status());
-  EXPECT_FALSE(device_settings_service_.policy_data());
-  EXPECT_FALSE(device_settings_service_.device_settings());
+            device_settings_service_->status());
+  EXPECT_FALSE(device_settings_service_->policy_data());
+  EXPECT_FALSE(device_settings_service_->device_settings());
 }
 
 TEST_F(DeviceSettingsServiceTest, LoadValidationError) {
-  device_policy_.policy().set_policy_data_signature("bad");
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
+  device_policy_->policy().set_policy_data_signature("bad");
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
   ReloadDeviceSettings();
 
   EXPECT_EQ(DeviceSettingsService::STORE_VALIDATION_ERROR,
-            device_settings_service_.status());
-  EXPECT_FALSE(device_settings_service_.policy_data());
-  EXPECT_FALSE(device_settings_service_.device_settings());
+            device_settings_service_->status());
+  EXPECT_FALSE(device_settings_service_->policy_data());
+  EXPECT_FALSE(device_settings_service_->device_settings());
 }
 
 TEST_F(DeviceSettingsServiceTest, LoadValidationErrorFutureTimestamp) {
   base::Time timestamp(base::Time::NowFromSystemTime() +
                        base::TimeDelta::FromDays(5000));
-  device_policy_.policy_data().set_timestamp(
+  device_policy_->policy_data().set_timestamp(
       (timestamp - base::Time::UnixEpoch()).InMilliseconds());
-  device_policy_.Build();
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
+  device_policy_->Build();
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
   ReloadDeviceSettings();
 
   // Loading a cached device policy with a timestamp in the future should work,
   // since this may be due to a broken clock on the client device.
   EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
-            device_settings_service_.status());
+            device_settings_service_->status());
   CheckPolicy();
 }
 
@@ -139,7 +144,7 @@
   ReloadDeviceSettings();
 
   EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
-            device_settings_service_.status());
+            device_settings_service_->status());
   CheckPolicy();
 }
 
@@ -148,17 +153,17 @@
   session_manager_client_.set_device_policy(std::string());
   ReloadDeviceSettings();
   EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
-            device_settings_service_.status());
+            device_settings_service_->status());
 
   session_manager_client_.set_store_policy_success(false);
-  device_settings_service_.Store(
-      device_policy_.GetCopy(),
+  device_settings_service_->Store(
+      device_policy_->GetCopy(),
       base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
                  base::Unretained(this)));
   FlushDeviceSettings();
   EXPECT_TRUE(operation_completed_);
   EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED,
-            device_settings_service_.status());
+            device_settings_service_->status());
 }
 
 TEST_F(DeviceSettingsServiceTest, StoreSuccess) {
@@ -166,106 +171,104 @@
   session_manager_client_.set_device_policy(std::string());
   ReloadDeviceSettings();
   EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
-            device_settings_service_.status());
+            device_settings_service_->status());
 
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
-  InitOwner(AccountId::FromUserEmail(device_policy_.policy_data().username()),
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
+  InitOwner(AccountId::FromUserEmail(device_policy_->policy_data().username()),
             true);
-  device_settings_service_.Store(
-      device_policy_.GetCopy(),
+  device_settings_service_->Store(
+      device_policy_->GetCopy(),
       base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
                  base::Unretained(this)));
   FlushDeviceSettings();
   EXPECT_TRUE(operation_completed_);
   EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
-            device_settings_service_.status());
+            device_settings_service_->status());
   CheckPolicy();
 }
 
 TEST_F(DeviceSettingsServiceTest, StoreRotation) {
   ReloadDeviceSettings();
   EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
-            device_settings_service_.status());
+            device_settings_service_->status());
 
-  device_policy_.payload().mutable_device_policy_refresh_rate()->
-      set_device_policy_refresh_rate(300);
-  device_policy_.SetDefaultNewSigningKey();
-  device_policy_.Build();
-  device_settings_service_.Store(device_policy_.GetCopy(), base::Closure());
+  device_policy_->payload()
+      .mutable_device_policy_refresh_rate()
+      ->set_device_policy_refresh_rate(300);
+  device_policy_->SetDefaultNewSigningKey();
+  device_policy_->Build();
+  device_settings_service_->Store(device_policy_->GetCopy(), base::Closure());
   FlushDeviceSettings();
   owner_key_util_->SetPublicKeyFromPrivateKey(
-      *device_policy_.GetNewSigningKey());
-  device_settings_service_.OwnerKeySet(true);
+      *device_policy_->GetNewSigningKey());
+  device_settings_service_->OwnerKeySet(true);
   FlushDeviceSettings();
   EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
-            device_settings_service_.status());
+            device_settings_service_->status());
   CheckPolicy();
 
   // Check the new key has been loaded.
-  EXPECT_EQ(device_policy_.GetPublicNewSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_EQ(device_policy_->GetPublicNewSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
 }
 
 TEST_F(DeviceSettingsServiceTest, OwnershipStatus) {
   owner_key_util_->Clear();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  EXPECT_FALSE(device_settings_service_.GetPublicKey().get());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  EXPECT_FALSE(device_settings_service_->GetPublicKey().get());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
 
-  device_settings_service_.GetOwnershipStatusAsync(
-      base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
-                 base::Unretained(this)));
+  device_settings_service_->GetOwnershipStatusAsync(base::Bind(
+      &DeviceSettingsServiceTest::SetOwnershipStatus, base::Unretained(this)));
   FlushDeviceSettings();
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  EXPECT_FALSE(device_settings_service_.GetPublicKey()->is_loaded());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  EXPECT_FALSE(device_settings_service_->GetPublicKey()->is_loaded());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, ownership_status_);
 
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
   ReloadDeviceSettings();
-  device_settings_service_.GetOwnershipStatusAsync(
-      base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
-                 base::Unretained(this)));
+  device_settings_service_->GetOwnershipStatusAsync(base::Bind(
+      &DeviceSettingsServiceTest::SetOwnershipStatus, base::Unretained(this)));
   FlushDeviceSettings();
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_);
 
-  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
-  InitOwner(AccountId::FromUserEmail(device_policy_.policy_data().username()),
+  owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
+  InitOwner(AccountId::FromUserEmail(device_policy_->policy_data().username()),
             true);
-  device_settings_service_.GetOwnershipStatusAsync(
-      base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
-                 base::Unretained(this)));
+  device_settings_service_->GetOwnershipStatusAsync(base::Bind(
+      &DeviceSettingsServiceTest::SetOwnershipStatus, base::Unretained(this)));
   FlushDeviceSettings();
-  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_TRUE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_);
 }
 
 TEST_F(DeviceSettingsServiceTest, OnTPMTokenReadyForNonOwner) {
   owner_key_util_->Clear();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  EXPECT_FALSE(device_settings_service_.GetPublicKey().get());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  EXPECT_FALSE(device_settings_service_->GetPublicKey().get());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
 
-  const std::string& user_id = device_policy_.policy_data().username();
+  const std::string& user_id = device_policy_->policy_data().username();
   InitOwner(AccountId::FromUserEmail(user_id), false);
   OwnerSettingsServiceChromeOS* service =
       OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(profile_.get());
@@ -273,29 +276,29 @@
   service->IsOwnerAsync(base::Bind(&DeviceSettingsServiceTest::OnIsOwner,
                                    base::Unretained(this)));
 
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
   ReloadDeviceSettings();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_FALSE(is_owner_set_);
 
   service->OnTPMTokenReady(true /* is ready */);
   FlushDeviceSettings();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_TRUE(is_owner_set_);
   EXPECT_FALSE(is_owner_);
 }
@@ -303,48 +306,48 @@
 TEST_F(DeviceSettingsServiceTest, OwnerPrivateKeyInTPMToken) {
   owner_key_util_->Clear();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  EXPECT_FALSE(device_settings_service_.GetPublicKey().get());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  EXPECT_FALSE(device_settings_service_->GetPublicKey().get());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
 
-  const std::string& user_id = device_policy_.policy_data().username();
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
+  const std::string& user_id = device_policy_->policy_data().username();
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
   InitOwner(AccountId::FromUserEmail(user_id), false);
   OwnerSettingsServiceChromeOS* service =
       OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(profile_.get());
   ASSERT_TRUE(service);
   ReloadDeviceSettings();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
 
-  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
+  owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
   service->OnTPMTokenReady(true /* is ready */);
   FlushDeviceSettings();
 
-  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_TRUE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
 }
 
 TEST_F(DeviceSettingsServiceTest, OnTPMTokenReadyForOwner) {
   owner_key_util_->Clear();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  EXPECT_FALSE(device_settings_service_.GetPublicKey().get());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  EXPECT_FALSE(device_settings_service_->GetPublicKey().get());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
 
-  const std::string& user_id = device_policy_.policy_data().username();
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
+  const std::string& user_id = device_policy_->policy_data().username();
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
   InitOwner(AccountId::FromUserEmail(user_id), false);
   OwnerSettingsServiceChromeOS* service =
       OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(profile_.get());
@@ -353,26 +356,26 @@
                                    base::Unretained(this)));
   ReloadDeviceSettings();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_FALSE(is_owner_set_);
 
-  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
+  owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
   service->OnTPMTokenReady(true /* is ready */);
   FlushDeviceSettings();
 
-  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_TRUE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_TRUE(is_owner_set_);
   EXPECT_TRUE(is_owner_);
 }
@@ -380,26 +383,26 @@
 TEST_F(DeviceSettingsServiceTest, IsCurrentUserOwnerAsyncWithLoadedCerts) {
   owner_key_util_->Clear();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  EXPECT_FALSE(device_settings_service_.GetPublicKey().get());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  EXPECT_FALSE(device_settings_service_->GetPublicKey().get());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
 
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
-  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
+  owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
 
-  InitOwner(AccountId::FromUserEmail(device_policy_.policy_data().username()),
+  InitOwner(AccountId::FromUserEmail(device_policy_->policy_data().username()),
             true);
   ReloadDeviceSettings();
   FlushDeviceSettings();
 
-  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_TRUE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_FALSE(is_owner_set_);
 
   OwnerSettingsServiceChromeOS* service =
@@ -410,13 +413,13 @@
   // The callback should be called immediately.
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_TRUE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_TRUE(is_owner_set_);
   EXPECT_TRUE(is_owner_);
 }
@@ -424,7 +427,7 @@
 TEST_F(DeviceSettingsServiceTest, Observer) {
   owner_key_util_->Clear();
   MockDeviceSettingsObserver observer_;
-  device_settings_service_.AddObserver(&observer_);
+  device_settings_service_->AddObserver(&observer_);
 
   EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
   EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
@@ -433,25 +436,25 @@
 
   EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
   EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
-  InitOwner(AccountId::FromUserEmail(device_policy_.policy_data().username()),
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
+  InitOwner(AccountId::FromUserEmail(device_policy_->policy_data().username()),
             true);
   ReloadDeviceSettings();
   Mock::VerifyAndClearExpectations(&observer_);
 
   EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
   EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
-  device_settings_service_.Store(device_policy_.GetCopy(), base::Closure());
+  device_settings_service_->Store(device_policy_->GetCopy(), base::Closure());
   FlushDeviceSettings();
   Mock::VerifyAndClearExpectations(&observer_);
 
   EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
   EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
-  device_settings_service_.PropertyChangeComplete(true);
+  device_settings_service_->PropertyChangeComplete(true);
   FlushDeviceSettings();
   Mock::VerifyAndClearExpectations(&observer_);
 
-  device_settings_service_.RemoveObserver(&observer_);
+  device_settings_service_->RemoveObserver(&observer_);
 }
 
 // Test that DeviceSettingsService defers load operations until after
@@ -461,16 +464,16 @@
 TEST_F(DeviceSettingsServiceTest, LoadDeferredDuringOwnershipEstablishment) {
   owner_key_util_->Clear();
 
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  EXPECT_FALSE(device_settings_service_.GetPublicKey().get());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  EXPECT_FALSE(device_settings_service_->GetPublicKey().get());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
 
   // Mark ownership establishment is running.
-  device_settings_service_.MarkWillEstablishConsumerOwnership();
+  device_settings_service_->MarkWillEstablishConsumerOwnership();
 
-  const std::string& user_id = device_policy_.policy_data().username();
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
+  const std::string& user_id = device_policy_->policy_data().username();
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
   InitOwner(AccountId::FromUserEmail(user_id), false);
   OwnerSettingsServiceChromeOS* service =
       OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(profile_.get());
@@ -481,25 +484,25 @@
 
   // No load operation should happen until OwnerSettingsService loads the
   // private key.
-  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_FALSE(device_settings_service_.GetPublicKey().get());
+  EXPECT_FALSE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_FALSE(device_settings_service_->GetPublicKey().get());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_FALSE(is_owner_set_);
 
   // Load the private key and trigger a reload. Load operations should finish.
-  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
+  owner_key_util_->SetPrivateKey(device_policy_->GetSigningKey());
   service->OnTPMTokenReady(true /* is ready */);
   FlushDeviceSettings();
 
   // Verify owner key is loaded and ownership status is updated.
-  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey().get());
-  ASSERT_TRUE(device_settings_service_.GetPublicKey()->is_loaded());
-  EXPECT_EQ(device_policy_.GetPublicSigningKeyAsString(),
-            device_settings_service_.GetPublicKey()->as_string());
+  EXPECT_TRUE(device_settings_service_->HasPrivateOwnerKey());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey().get());
+  ASSERT_TRUE(device_settings_service_->GetPublicKey()->is_loaded());
+  EXPECT_EQ(device_policy_->GetPublicSigningKeyAsString(),
+            device_settings_service_->GetPublicKey()->as_string());
   EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
-            device_settings_service_.GetOwnershipStatus());
+            device_settings_service_->GetOwnershipStatus());
   EXPECT_TRUE(is_owner_set_);
   EXPECT_TRUE(is_owner_);
 }
diff --git a/chrome/browser/chromeos/settings/device_settings_test_helper.cc b/chrome/browser/chromeos/settings/device_settings_test_helper.cc
index b9c82c1..a12bd017 100644
--- a/chrome/browser/chromeos/settings/device_settings_test_helper.cc
+++ b/chrome/browser/chromeos/settings/device_settings_test_helper.cc
@@ -13,6 +13,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/cryptohome/cryptohome_parameters.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/fake_power_manager_client.h"
 #include "components/ownership/mock_owner_key_util.h"
 #include "components/policy/proto/chrome_device_policy.pb.h"
 #include "content/public/browser/browser_thread.h"
@@ -35,38 +36,51 @@
 }
 
 DeviceSettingsTestBase::DeviceSettingsTestBase()
-    : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
-      user_manager_(new FakeChromeUserManager()),
-      user_manager_enabler_(base::WrapUnique(user_manager_)),
-      owner_key_util_(new ownership::MockOwnerKeyUtil()),
-      dbus_setter_(chromeos::DBusThreadManager::GetSetterForTesting()) {
+    : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {}
+
+DeviceSettingsTestBase::~DeviceSettingsTestBase() = default;
+
+void DeviceSettingsTestBase::SetUp() {
+  device_policy_ = std::make_unique<policy::DevicePolicyBuilder>();
+  user_manager_ = new FakeChromeUserManager();
+  user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
+      base::WrapUnique(user_manager_));
+  owner_key_util_ = new ownership::MockOwnerKeyUtil();
+  device_settings_service_ = std::make_unique<DeviceSettingsService>();
+  PowerManagerClient::Initialize();
+  dbus_setter_ = DBusThreadManager::GetSetterForTesting();
   OwnerSettingsServiceChromeOSFactory::SetDeviceSettingsServiceForTesting(
-      &device_settings_service_);
+      device_settings_service_.get());
   OwnerSettingsServiceChromeOSFactory::GetInstance()->SetOwnerKeyUtilForTesting(
       owner_key_util_);
   base::RunLoop().RunUntilIdle();
 
-  device_policy_.payload().mutable_metrics_enabled()->set_metrics_enabled(
+  device_policy_->payload().mutable_metrics_enabled()->set_metrics_enabled(
       false);
   ReloadDevicePolicy();
-  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
-  device_settings_service_.SetSessionManager(&session_manager_client_,
-                                             owner_key_util_);
+  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_->GetSigningKey());
+  device_settings_service_->SetSessionManager(&session_manager_client_,
+                                              owner_key_util_);
 
   profile_.reset(new TestingProfile());
 }
 
-DeviceSettingsTestBase::~DeviceSettingsTestBase() {
-  OwnerSettingsServiceChromeOSFactory::SetDeviceSettingsServiceForTesting(NULL);
+void DeviceSettingsTestBase::TearDown() {
+  OwnerSettingsServiceChromeOSFactory::SetDeviceSettingsServiceForTesting(
+      nullptr);
   FlushDeviceSettings();
-  device_settings_service_.UnsetSessionManager();
+  device_settings_service_->UnsetSessionManager();
+  device_settings_service_.reset();
   DBusThreadManager::Shutdown();
+  PowerManagerClient::Shutdown();
+  device_policy_.reset();
   base::RunLoop().RunUntilIdle();
+  profile_.reset();
 }
 
 void DeviceSettingsTestBase::ReloadDevicePolicy() {
-  device_policy_.Build();
-  session_manager_client_.set_device_policy(device_policy_.GetBlob());
+  device_policy_->Build();
+  session_manager_client_.set_device_policy(device_policy_->GetBlob());
 }
 
 void DeviceSettingsTestBase::FlushDeviceSettings() {
@@ -74,7 +88,7 @@
 }
 
 void DeviceSettingsTestBase::ReloadDeviceSettings() {
-  device_settings_service_.OwnerKeySet(true);
+  device_settings_service_->OwnerKeySet(true);
   FlushDeviceSettings();
 }
 
@@ -97,4 +111,8 @@
     service->OnTPMTokenReady(true /* token is enabled */);
 }
 
+FakePowerManagerClient* DeviceSettingsTestBase::power_manager_client() {
+  return FakePowerManagerClient::Get();
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/settings/device_settings_test_helper.h b/chrome/browser/chromeos/settings/device_settings_test_helper.h
index 419c246..9f761f4 100644
--- a/chrome/browser/chromeos/settings/device_settings_test_helper.h
+++ b/chrome/browser/chromeos/settings/device_settings_test_helper.h
@@ -25,6 +25,7 @@
 namespace chromeos {
 
 class DBusThreadManagerSetter;
+class FakePowerManagerClient;
 
 // Wraps the singleton device settings and initializes it to the point where it
 // reports OWNERSHIP_NONE for the ownership status.
@@ -47,6 +48,10 @@
   DeviceSettingsTestBase();
   ~DeviceSettingsTestBase() override;
 
+  // testing::Test:
+  void SetUp() override;
+  void TearDown() override;
+
   // Subclasses that modify the DevicePolicy should call this afterwards.
   void ReloadDevicePolicy();
 
@@ -59,19 +64,21 @@
 
   void InitOwner(const AccountId& account_id, bool tpm_is_ready);
 
+  FakePowerManagerClient* power_manager_client();
+
   content::TestBrowserThreadBundle thread_bundle_;
 
-  policy::DevicePolicyBuilder device_policy_;
+  std::unique_ptr<policy::DevicePolicyBuilder> device_policy_;
 
   FakeSessionManagerClient session_manager_client_;
   // Note that FakeUserManager is used by ProfileHelper, which some of the
   // tested classes depend on implicitly.
   FakeChromeUserManager* user_manager_;
-  user_manager::ScopedUserManager user_manager_enabler_;
+  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
   scoped_refptr<ownership::MockOwnerKeyUtil> owner_key_util_;
   // Local DeviceSettingsService instance for tests. Avoid using in combination
   // with the global instance (DeviceSettingsService::Get()).
-  DeviceSettingsService device_settings_service_;
+  std::unique_ptr<DeviceSettingsService> device_settings_service_;
 
   std::unique_ptr<DBusThreadManagerSetter> dbus_setter_;
 
diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager.cc b/chrome/browser/chromeos/system/automatic_reboot_manager.cc
index 1ab75a3..b317656 100644
--- a/chrome/browser/chromeos/system/automatic_reboot_manager.cc
+++ b/chrome/browser/chromeos/system/automatic_reboot_manager.cc
@@ -161,9 +161,8 @@
   notification_registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING,
       content::NotificationService::AllSources());
 
-  DBusThreadManager* dbus_thread_manager = DBusThreadManager::Get();
-  dbus_thread_manager->GetPowerManagerClient()->AddObserver(this);
-  dbus_thread_manager->GetUpdateEngineClient()->AddObserver(this);
+  PowerManagerClient::Get()->AddObserver(this);
+  DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this);
 
   // If no user is logged in, a reboot may be performed whenever the user is
   // idle. Start listening for user activity to determine whether the user is
@@ -189,9 +188,8 @@
   for (auto& observer : observers_)
     observer.WillDestroyAutomaticRebootManager();
 
-  DBusThreadManager* dbus_thread_manager = DBusThreadManager::Get();
-  dbus_thread_manager->GetPowerManagerClient()->RemoveObserver(this);
-  dbus_thread_manager->GetUpdateEngineClient()->RemoveObserver(this);
+  PowerManagerClient::Get()->RemoveObserver(this);
+  DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
   if (ui::UserActivityDetector::Get())
     ui::UserActivityDetector::Get()->RemoveObserver(this);
 }
@@ -415,7 +413,7 @@
   grace_start_timer_.reset();
   grace_end_timer_.reset();
   VLOG(1) << "Rebooting immediately.";
-  DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_OTHER, "automatic reboot manager");
 }
 
diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc b/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc
index 68f25fe..3d13760 100644
--- a/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc
+++ b/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc
@@ -170,6 +170,11 @@
     return is_logged_in_as_kiosk_app_ || is_logged_in_as_arc_kiosk_app_;
   }
 
+  void VerifyTimerIsStopped(const base::OneShotTimer* timer) const;
+  void VerifyTimerIsRunning(const base::OneShotTimer* timer,
+                            const base::TimeDelta& delay) const;
+  void VerifyLoginScreenIdleTimerIsRunning() const;
+
   bool is_user_logged_in_ = false;
   bool is_logged_in_as_kiosk_app_ = false;
   bool is_logged_in_as_arc_kiosk_app_ = false;
@@ -188,12 +193,6 @@
   MockAutomaticRebootManagerObserver automatic_reboot_manager_observer_;
   std::unique_ptr<AutomaticRebootManager> automatic_reboot_manager_;
 
- private:
-  void VerifyTimerIsStopped(const base::OneShotTimer* timer) const;
-  void VerifyTimerIsRunning(const base::OneShotTimer* timer,
-                            const base::TimeDelta& delay) const;
-  void VerifyLoginScreenIdleTimerIsRunning() const;
-
   base::ScopedTempDir temp_dir_;
   base::FilePath update_reboot_needed_uptime_file_;
 
@@ -206,8 +205,10 @@
   MockUserManager* mock_user_manager_;  // Not owned.
   user_manager::ScopedUserManager user_manager_enabler_;
 
-  FakePowerManagerClient* power_manager_client_ = nullptr;  // Not owned.
   FakeUpdateEngineClient* update_engine_client_ = nullptr;  // Not owned.
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(AutomaticRebootManagerBasicTest);
 };
 
 enum AutomaticRebootManagerTestScenario {
@@ -319,21 +320,16 @@
   update_reboot_needed_uptime_file_ =
       temp_dir.Append("update_reboot_needed_uptime");
   ASSERT_EQ(0, base::WriteFile(update_reboot_needed_uptime_file_, NULL, 0));
-  ASSERT_TRUE(base::PathService::Override(chromeos::FILE_UPTIME, uptime_file));
-  ASSERT_TRUE(
-      base::PathService::Override(chromeos::FILE_UPDATE_REBOOT_NEEDED_UPTIME,
-                                  update_reboot_needed_uptime_file_));
+  ASSERT_TRUE(base::PathService::Override(FILE_UPTIME, uptime_file));
+  ASSERT_TRUE(base::PathService::Override(FILE_UPDATE_REBOOT_NEEDED_UPTIME,
+                                          update_reboot_needed_uptime_file_));
 
   TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_);
   AutomaticRebootManager::RegisterPrefs(local_state_.registry());
 
-  std::unique_ptr<DBusThreadManagerSetter> dbus_setter =
-      chromeos::DBusThreadManager::GetSetterForTesting();
-  power_manager_client_ = new FakePowerManagerClient;
-  dbus_setter->SetPowerManagerClient(
-      std::unique_ptr<PowerManagerClient>(power_manager_client_));
+  PowerManagerClient::Initialize();
   update_engine_client_ = new FakeUpdateEngineClient;
-  dbus_setter->SetUpdateEngineClient(
+  DBusThreadManager::GetSetterForTesting()->SetUpdateEngineClient(
       std::unique_ptr<UpdateEngineClient>(update_engine_client_));
 
   EXPECT_CALL(*mock_user_manager_, IsUserLoggedIn())
@@ -357,6 +353,7 @@
     task_runner_->RunUntilIdle();
   }
 
+  PowerManagerClient::Shutdown();
   DBusThreadManager::Shutdown();
   TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
 }
@@ -376,7 +373,7 @@
       std::make_unique<base::Value>(reboot_after_update));
   task_runner_->RunUntilIdle();
   EXPECT_EQ(expect_reboot ? 1 : 0,
-            power_manager_client_->num_request_restart_calls());
+            FakePowerManagerClient::Get()->num_request_restart_calls());
 }
 
 void AutomaticRebootManagerBasicTest::SetUptimeLimit(
@@ -392,7 +389,7 @@
   }
   task_runner_->RunUntilIdle();
   EXPECT_EQ(expect_reboot ? 1 : 0,
-            power_manager_client_->num_request_restart_calls());
+            FakePowerManagerClient::Get()->num_request_restart_calls());
 }
 
 void AutomaticRebootManagerBasicTest::NotifyUpdateRebootNeeded() {
@@ -400,14 +397,14 @@
   automatic_reboot_manager_->UpdateStatusChanged(
       update_engine_client_->GetLastStatus());
   task_runner_->RunUntilIdle();
-  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
 }
 
 void AutomaticRebootManagerBasicTest::NotifyResumed(bool expect_reboot) {
   automatic_reboot_manager_->SuspendDone(base::TimeDelta::FromHours(1));
   task_runner_->RunUntilIdle();
   EXPECT_EQ(expect_reboot ? 1 : 0,
-            power_manager_client_->num_request_restart_calls());
+            FakePowerManagerClient::Get()->num_request_restart_calls());
 }
 
 void AutomaticRebootManagerBasicTest::NotifyTerminating(bool expect_reboot) {
@@ -417,7 +414,7 @@
       content::NotificationService::NoDetails());
   task_runner_->RunUntilIdle();
   EXPECT_EQ(expect_reboot ? 1 : 0,
-            power_manager_client_->num_request_restart_calls());
+            FakePowerManagerClient::Get()->num_request_restart_calls());
 }
 
 void AutomaticRebootManagerBasicTest::FastForwardBy(
@@ -425,14 +422,14 @@
     bool expect_reboot) {
   task_runner_->FastForwardBy(delta);
   EXPECT_EQ(expect_reboot ? 1 : 0,
-            power_manager_client_->num_request_restart_calls());
+            FakePowerManagerClient::Get()->num_request_restart_calls());
 }
 
 void AutomaticRebootManagerBasicTest::FastForwardUntilNoTasksRemain(
     bool expect_reboot) {
   task_runner_->FastForwardUntilNoTasksRemain();
   EXPECT_EQ(expect_reboot ? 1 : 0,
-            power_manager_client_->num_request_restart_calls());
+            FakePowerManagerClient::Get()->num_request_restart_calls());
 }
 
 void AutomaticRebootManagerBasicTest::ExpectRebootRequest(
@@ -461,7 +458,7 @@
   automatic_reboot_manager_observer_.Init(automatic_reboot_manager_.get());
   task_runner_->RunUntilIdle();
   EXPECT_EQ(expect_reboot ? 1 : 0,
-            power_manager_client_->num_request_restart_calls());
+            FakePowerManagerClient::Get()->num_request_restart_calls());
 
   uptime_processing_delay_ =
       base::TimeTicks() - automatic_reboot_manager_->boot_time_ -
diff --git a/chrome/browser/chromeos/tether/tether_service_factory.cc b/chrome/browser/chromeos/tether/tether_service_factory.cc
index f582a81..cc5e67c 100644
--- a/chrome/browser/chromeos/tether/tether_service_factory.cc
+++ b/chrome/browser/chromeos/tether/tether_service_factory.cc
@@ -68,7 +68,7 @@
   if (command_line->HasSwitch(chromeos::switches::kTetherStub)) {
     FakeTetherService* fake_tether_service = new FakeTetherService(
         Profile::FromBrowserContext(context),
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient(),
+        chromeos::PowerManagerClient::Get(),
         chromeos::device_sync::DeviceSyncClientFactory::GetForProfile(
             Profile::FromBrowserContext(context)),
         chromeos::secure_channel::SecureChannelClientProvider::GetInstance()
@@ -88,8 +88,7 @@
   }
 
   return new TetherService(
-      Profile::FromBrowserContext(context),
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient(),
+      Profile::FromBrowserContext(context), chromeos::PowerManagerClient::Get(),
       chromeos::device_sync::DeviceSyncClientFactory::GetForProfile(
           Profile::FromBrowserContext(context)),
       chromeos::secure_channel::SecureChannelClientProvider::GetInstance()
diff --git a/chrome/browser/chromeos/tether/tether_service_unittest.cc b/chrome/browser/chromeos/tether/tether_service_unittest.cc
index e0655e2..1e0ce9b 100644
--- a/chrome/browser/chromeos/tether/tether_service_unittest.cc
+++ b/chrome/browser/chromeos/tether/tether_service_unittest.cc
@@ -343,8 +343,7 @@
     scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>(
         base::WrapUnique(fake_chrome_user_manager_));
 
-    fake_power_manager_client_ =
-        std::make_unique<chromeos::FakePowerManagerClient>();
+    chromeos::PowerManagerClient::Initialize();
 
     fake_device_sync_client_ =
         std::make_unique<chromeos::device_sync::FakeDeviceSyncClient>();
@@ -430,6 +429,7 @@
     EXPECT_EQ(test_tether_component_factory_->was_tether_component_active(),
               shutdown_reason_verified_);
 
+    chromeos::PowerManagerClient::Shutdown();
     chromeos::NetworkConnect::Shutdown();
     chromeos::NetworkHandler::Shutdown();
     chromeos::DBusThreadManager::Shutdown();
@@ -451,7 +451,7 @@
         initial_feature_state_);
 
     tether_service_ = base::WrapUnique(new TestTetherService(
-        profile_.get(), fake_power_manager_client_.get(),
+        profile_.get(), chromeos::FakePowerManagerClient::Get(),
         fake_device_sync_client_.get(), fake_secure_channel_client_.get(),
         fake_multidevice_setup_client_.get(), network_state_handler(),
         nullptr /* session_manager */));
@@ -565,7 +565,6 @@
   std::unique_ptr<TestingProfile> profile_;
   chromeos::FakeChromeUserManager* fake_chrome_user_manager_;
   std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_;
-  std::unique_ptr<chromeos::FakePowerManagerClient> fake_power_manager_client_;
   std::unique_ptr<sync_preferences::TestingPrefServiceSyncable>
       test_pref_service_;
   std::unique_ptr<TestTetherComponentFactory> test_tether_component_factory_;
@@ -670,7 +669,7 @@
   CreateTetherService();
   VerifyTetherActiveStatus(true /* expected_active */);
 
-  fake_power_manager_client_->SendSuspendImminent(
+  chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
 
   EXPECT_EQ(
@@ -679,14 +678,14 @@
           chromeos::NetworkTypePattern::Tether()));
   VerifyTetherActiveStatus(false /* expected_active */);
 
-  fake_power_manager_client_->SendSuspendDone();
+  chromeos::FakePowerManagerClient::Get()->SendSuspendDone();
 
   EXPECT_EQ(chromeos::NetworkStateHandler::TechnologyState::TECHNOLOGY_ENABLED,
             network_state_handler()->GetTechnologyState(
                 chromeos::NetworkTypePattern::Tether()));
   VerifyTetherActiveStatus(true /* expected_active */);
 
-  fake_power_manager_client_->SendSuspendImminent(
+  chromeos::FakePowerManagerClient::Get()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
 
   VerifyTetherFeatureStateRecorded(TetherService::TetherFeatureState::SUSPENDED,
diff --git a/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc b/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
index 60918e0..d755321 100644
--- a/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
+++ b/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
@@ -344,7 +344,7 @@
 bool ChromeRuntimeAPIDelegate::RestartDevice(std::string* error_message) {
 #if defined(OS_CHROMEOS)
   if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) {
-    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+    chromeos::PowerManagerClient::Get()->RequestRestart(
         power_manager::REQUEST_RESTART_OTHER, "chrome.runtime API");
     return true;
   }
diff --git a/chrome/browser/lifetime/application_lifetime.cc b/chrome/browser/lifetime/application_lifetime.cc
index b85fd4f..7e1926e 100644
--- a/chrome/browser/lifetime/application_lifetime.cc
+++ b/chrome/browser/lifetime/application_lifetime.cc
@@ -274,7 +274,7 @@
 
 void AttemptRelaunch() {
 #if defined(OS_CHROMEOS)
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  chromeos::PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_OTHER, "Chrome relaunch");
   // If running the Chrome OS build, but we're not on the device, fall through.
 #endif
diff --git a/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc b/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc
index 2554bb9..2bf433a 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc
@@ -33,7 +33,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "chromeos/assistant/buildflags.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/login/login_state/login_state.h"
 #endif
 
@@ -58,14 +58,20 @@
     service_manager_context_ =
         std::make_unique<content::TestServiceManagerContext>();
 #if defined(OS_CHROMEOS)
-    // ChromeOs Metrics Provider require g_login_state and dbus initialized
-    // before they can be instantiated.
+    // ChromeOs Metrics Provider require g_login_state and power manager client
+    // initialized before they can be instantiated.
     chromeos::LoginState::Initialize();
-    chromeos::DBusThreadManager::Initialize();
+    chromeos::PowerManagerClient::Initialize();
 #endif  // defined(OS_CHROMEOS)
   }
 
-  void TearDown() override { service_manager_context_.reset(); }
+  void TearDown() override {
+#if defined(OS_CHROMEOS)
+    chromeos::PowerManagerClient::Shutdown();
+    chromeos::LoginState::Shutdown();
+#endif  // defined(OS_CHROMEOS)
+    service_manager_context_.reset();
+  }
 
  protected:
   void FakeStoreClientInfoBackup(const metrics::ClientInfo& client_info) {}
diff --git a/chrome/browser/metrics/chromeos_metrics_provider_unittest.cc b/chrome/browser/metrics/chromeos_metrics_provider_unittest.cc
index feac8a9..80888da 100644
--- a/chrome/browser/metrics/chromeos_metrics_provider_unittest.cc
+++ b/chrome/browser/metrics/chromeos_metrics_provider_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/login/login_state/login_state.h"
 #include "chromeos/system/fake_statistics_provider.h"
@@ -49,18 +48,12 @@
 using bluez::FakeBluetoothGattServiceClient;
 using bluez::FakeBluetoothInputClient;
 
-using chromeos::DBusThreadManager;
-using chromeos::DBusThreadManagerSetter;
-using chromeos::PowerManagerClient;
-using chromeos::FAKE_DBUS_CLIENT_IMPLEMENTATION;
-
 class ChromeOSMetricsProviderTest : public testing::Test {
  public:
   ChromeOSMetricsProviderTest() {}
 
  protected:
   void SetUp() override {
-
     // Set up the fake Bluetooth environment,
     std::unique_ptr<BluezDBusManagerSetter> bluez_dbus_setter =
         BluezDBusManager::GetSetterForTesting();
@@ -85,10 +78,7 @@
             new FakeBluetoothAgentManagerClient));
 
     // Set up a PowerManagerClient instance for PerfProvider.
-    std::unique_ptr<DBusThreadManagerSetter> dbus_setter =
-        DBusThreadManager::GetSetterForTesting();
-    dbus_setter->SetPowerManagerClient(std::unique_ptr<PowerManagerClient>(
-        PowerManagerClient::Create(FAKE_DBUS_CLIENT_IMPLEMENTATION)));
+    chromeos::PowerManagerClient::Initialize();
 
     // Grab pointers to members of the thread manager for easier testing.
     fake_bluetooth_adapter_client_ = static_cast<FakeBluetoothAdapterClient*>(
@@ -108,8 +98,7 @@
   void TearDown() override {
     // Destroy the login state tracker if it was initialized.
     chromeos::LoginState::Shutdown();
-
-    DBusThreadManager::Shutdown();
+    chromeos::PowerManagerClient::Shutdown();
   }
 
  protected:
diff --git a/chrome/browser/metrics/perf/profile_provider_chromeos.cc b/chrome/browser/metrics/perf/profile_provider_chromeos.cc
index 269a068..79819aa 100644
--- a/chrome/browser/metrics/perf/profile_provider_chromeos.cc
+++ b/chrome/browser/metrics/perf/profile_provider_chromeos.cc
@@ -42,8 +42,7 @@
 
 ProfileProvider::~ProfileProvider() {
   chromeos::LoginState::Get()->RemoveObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void ProfileProvider::Init() {
@@ -65,8 +64,7 @@
   chromeos::LoginState::Get()->AddObserver(this);
 
   // Register as an observer of power manager events.
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
 
   // Register as an observer of session restore.
   on_session_restored_callback_subscription_ =
diff --git a/chrome/browser/metrics/perf/profile_provider_chromeos_unittest.cc b/chrome/browser/metrics/perf/profile_provider_chromeos_unittest.cc
index eabcad12..4f14a08 100644
--- a/chrome/browser/metrics/perf/profile_provider_chromeos_unittest.cc
+++ b/chrome/browser/metrics/perf/profile_provider_chromeos_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/metrics/perf/heap_collector.h"
 #include "chrome/browser/metrics/perf/metric_collector.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/login/login_state/login_state.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/metrics_proto/sampled_profile.pb.h"
@@ -130,9 +129,9 @@
 
   void SetUp() override {
     // ProfileProvider requires chromeos::LoginState and
-    // chromeos::DBusThreadManager to be initialized.
+    // chromeos::PowerManagerClient to be initialized.
     chromeos::LoginState::Initialize();
-    chromeos::DBusThreadManager::Initialize();
+    chromeos::PowerManagerClient::Initialize();
 
     profile_provider_ = std::make_unique<TestProfileProvider>();
     profile_provider_->Init();
@@ -140,8 +139,7 @@
 
   void TearDown() override {
     profile_provider_.reset();
-    chromeos::DBusThreadManager::Shutdown();
-    chromeos::LoginState::Shutdown();
+    chromeos::PowerManagerClient::Shutdown();
   }
 
  protected:
@@ -302,13 +300,13 @@
 
   void SetUp() override {
     // ProfileProvider requires chromeos::LoginState and
-    // chromeos::DBusThreadManager to be initialized.
+    // chromeos::PowerManagerClient to be initialized.
     chromeos::LoginState::Initialize();
-    chromeos::DBusThreadManager::Initialize();
+    chromeos::PowerManagerClient::Initialize();
   }
 
   void TearDown() override {
-    chromeos::DBusThreadManager::Shutdown();
+    chromeos::PowerManagerClient::Shutdown();
     chromeos::LoginState::Shutdown();
   }
 
diff --git a/chrome/browser/ui/ash/assistant/device_actions.cc b/chrome/browser/ui/ash/assistant/device_actions.cc
index 83bd19e..388f037 100644
--- a/chrome/browser/ui/ash/assistant/device_actions.cc
+++ b/chrome/browser/ui/ash/assistant/device_actions.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/network/network_state_handler.h"
@@ -92,10 +91,8 @@
 
 void DeviceActions::GetScreenBrightnessLevel(
     DeviceActions::GetScreenBrightnessLevelCallback callback) {
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->GetScreenBrightnessPercent(
-          base::BindOnce(&HandleScreenBrightnessCallback, std::move(callback)));
+  chromeos::PowerManagerClient::Get()->GetScreenBrightnessPercent(
+      base::BindOnce(&HandleScreenBrightnessCallback, std::move(callback)));
 }
 
 void DeviceActions::SetScreenBrightnessLevel(double level, bool gradual) {
@@ -107,9 +104,7 @@
           : power_manager::SetBacklightBrightnessRequest_Transition_INSTANT);
   request.set_cause(
       power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST);
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->SetScreenBrightness(request);
+  chromeos::PowerManagerClient::Get()->SetScreenBrightness(request);
 }
 
 void DeviceActions::SetNightLightEnabled(bool enabled) {
diff --git a/chrome/browser/ui/views/test/view_event_test_platform_part_chromeos.cc b/chrome/browser/ui/views/test/view_event_test_platform_part_chromeos.cc
index 0a6f9588..1003a8d 100644
--- a/chrome/browser/ui/views/test/view_event_test_platform_part_chromeos.cc
+++ b/chrome/browser/ui/views/test/view_event_test_platform_part_chromeos.cc
@@ -53,11 +53,12 @@
     ui::ContextFactory* context_factory,
     ui::ContextFactoryPrivate* context_factory_private) {
   chromeos::DBusThreadManager::Initialize();
+  chromeos::PowerManagerClient::Initialize();
   // ash::Shell::CreateInstance needs chromeos::PowerPolicyController
   // initialized. In classic ash, it is initialized in chrome process. In mash,
   // it is initialized by window manager service.
   chromeos::PowerPolicyController::Initialize(
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+      chromeos::PowerManagerClient::Get());
   bluez::BluezDBusManager::Initialize();
   chromeos::CrasAudioHandler::InitializeForTesting();
   chromeos::NetworkHandler::Initialize();
diff --git a/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.cc b/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.cc
index 6920cd8..210336f 100644
--- a/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.cc
@@ -203,8 +203,7 @@
               bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient())),
       fake_cras_audio_client_(static_cast<chromeos::FakeCrasAudioClient*>(
           chromeos::DBusThreadManager::Get()->GetCrasAudioClient())),
-      fake_power_manager_client_(static_cast<chromeos::FakePowerManagerClient*>(
-          chromeos::DBusThreadManager::Get()->GetPowerManagerClient())),
+      fake_power_manager_client_(chromeos::FakePowerManagerClient::Get()),
       weak_ptr_factory_(this) {
   device::BluetoothAdapterFactory::GetAdapter(
       base::BindOnce(&DeviceEmulatorMessageHandler::BluetoothDeviceAdapterReady,
diff --git a/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc
index ad18395..0db2527 100644
--- a/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc
@@ -225,7 +225,7 @@
   PrefService* prefs = g_browser_process->local_state();
   prefs->SetBoolean(prefs::kDebuggingFeaturesRequested, true);
   prefs->CommitPendingWrite();
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  chromeos::PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_OTHER,
       "login debugging screen removing rootfs verification");
 }
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc
index 142b412..49d1fcd 100644
--- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc
@@ -266,7 +266,7 @@
 
 EncryptionMigrationScreenHandler::~EncryptionMigrationScreenHandler() {
   DBusThreadManager::Get()->GetCryptohomeClient()->RemoveObserver(this);
-  DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+  PowerManagerClient::Get()->RemoveObserver(this);
   if (delegate_)
     delegate_->OnViewDestroyed(this);
 }
@@ -322,7 +322,7 @@
     StartMigration();
     return;
   }
-  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+  PowerManagerClient::Get()->AddObserver(this);
   CheckAvailableStorage();
 }
 
@@ -463,14 +463,14 @@
 
 void EncryptionMigrationScreenHandler::HandleRequestRestartOnLowStorage() {
   RecordUserChoice(UserChoice::USER_CHOICE_RESTART_ON_LOW_STORAGE);
-  DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_OTHER,
       "login encryption migration low storage");
 }
 
 void EncryptionMigrationScreenHandler::HandleRequestRestartOnFailure() {
   RecordUserChoice(UserChoice::USER_CHOICE_RESTART_ON_FAILURE);
-  DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_OTHER,
       "login encryption migration failure");
 }
@@ -495,7 +495,7 @@
   // When this handler is about to show the READY screen, we should get the
   // latest battery status and show it on the screen.
   if (state == UIState::READY)
-    DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate();
+    PowerManagerClient::Get()->RequestStatusUpdate();
 
   // We should request wake lock and not shut down on lid close during
   // migration.
@@ -561,7 +561,7 @@
   UpdateUIState(UIState::READY);
 
   should_migrate_on_enough_battery_ = true;
-  DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate();
+  PowerManagerClient::Get()->RequestStatusUpdate();
 }
 
 void EncryptionMigrationScreenHandler::StartMigration() {
@@ -742,7 +742,7 @@
           std::move(continue_login_callback_).Run(user_context_);
       } else {
         // Restart immediately after successful full migration.
-        DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+        PowerManagerClient::Get()->RequestRestart(
             power_manager::REQUEST_RESTART_OTHER,
             "login encryption migration success");
       }
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler_unittest.cc b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler_unittest.cc
index 9752ff9..acdcf14 100644
--- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler_unittest.cc
+++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler_unittest.cc
@@ -134,13 +134,11 @@
     DBusThreadManager::GetSetterForTesting()->SetCryptohomeClient(
         base::WrapUnique<CryptohomeClient>(fake_cryptohome_client_));
 
-    DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::make_unique<FakePowerManagerClient>());
+    PowerManagerClient::Initialize();
 
     DBusThreadManager::Initialize();
 
-    PowerPolicyController::Initialize(
-        DBusThreadManager::Get()->GetPowerManagerClient());
+    PowerPolicyController::Initialize(PowerManagerClient::Get());
 
     // Build dummy user context.
     user_context_.SetAccountId(account_id_);
@@ -168,6 +166,7 @@
 
     PowerPolicyController::Shutdown();
     DBusThreadManager::Shutdown();
+    PowerManagerClient::Shutdown();
     cryptohome::AsyncMethodCaller::Shutdown();
   }
 
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
index b470cee..841d413 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -255,8 +255,7 @@
                  chrome::NOTIFICATION_AUTH_CANCELLED,
                  content::NotificationService::AllSources());
 
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
 
   chromeos::input_method::ImeKeyboard* keyboard =
       chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard();
@@ -282,8 +281,7 @@
   OobeUI* oobe_ui = GetOobeUI();
   if (oobe_ui && oobe_ui_observer_added_)
     oobe_ui->RemoveObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
   chromeos::input_method::ImeKeyboard* keyboard =
       chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard();
   if (keyboard)
@@ -1192,7 +1190,7 @@
 }
 
 void SigninScreenHandler::HandleRebootSystem() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  chromeos::PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_FOR_USER, "WebUI signin screen");
 }
 
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc b/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc
index dc4e23c..ca32d32 100644
--- a/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc
@@ -139,8 +139,7 @@
 }
 
 void PowerHandler::OnJavascriptAllowed() {
-  PowerManagerClient* power_manager_client =
-      DBusThreadManager::Get()->GetPowerManagerClient();
+  PowerManagerClient* power_manager_client = PowerManagerClient::Get();
   power_manager_client_observer_.Add(power_manager_client);
   power_manager_client->GetSwitchStates(base::Bind(
       &PowerHandler::OnGotSwitchStates, weak_ptr_factory_.GetWeakPtr()));
@@ -176,9 +175,8 @@
 }
 
 void PowerHandler::PowerManagerRestarted() {
-  DBusThreadManager::Get()->GetPowerManagerClient()->GetSwitchStates(
-      base::BindOnce(&PowerHandler::OnGotSwitchStates,
-                     weak_ptr_factory_.GetWeakPtr()));
+  PowerManagerClient::Get()->GetSwitchStates(base::BindOnce(
+      &PowerHandler::OnGotSwitchStates, weak_ptr_factory_.GetWeakPtr()));
 }
 
 void PowerHandler::LidEventReceived(PowerManagerClient::LidState state,
@@ -189,9 +187,7 @@
 
 void PowerHandler::HandleUpdatePowerStatus(const base::ListValue* args) {
   AllowJavascript();
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->RequestStatusUpdate();
+  chromeos::PowerManagerClient::Get()->RequestStatusUpdate();
 }
 
 void PowerHandler::HandleSetPowerSource(const base::ListValue* args) {
@@ -199,8 +195,7 @@
 
   std::string id;
   CHECK(args->GetString(0, &id));
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->SetPowerSource(
-      id);
+  chromeos::PowerManagerClient::Get()->SetPowerSource(id);
 }
 
 void PowerHandler::HandleRequestPowerManagementSettings(
@@ -280,7 +275,7 @@
 
 void PowerHandler::SendBatteryStatus() {
   const base::Optional<power_manager::PowerSupplyProperties>& proto =
-      DBusThreadManager::Get()->GetPowerManagerClient()->GetLastStatus();
+      PowerManagerClient::Get()->GetLastStatus();
   DCHECK(proto);
   bool charging = proto->battery_state() ==
                   power_manager::PowerSupplyProperties_BatteryState_CHARGING;
@@ -323,7 +318,7 @@
 
 void PowerHandler::SendPowerSources() {
   const base::Optional<power_manager::PowerSupplyProperties>& proto =
-      DBusThreadManager::Get()->GetPowerManagerClient()->GetLastStatus();
+      PowerManagerClient::Get()->GetLastStatus();
   DCHECK(proto);
   base::ListValue sources_list;
   for (int i = 0; i < proto->available_external_power_source_size(); i++) {
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc b/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc
index edfc117..9206cad 100644
--- a/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc
@@ -14,7 +14,6 @@
 #include "base/values.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/test/base/in_process_browser_test.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_policy_controller.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
@@ -54,10 +53,6 @@
 
   // InProcessBrowserTest:
   void SetUpInProcessBrowserTestFixture() override {
-    power_manager_client_ = new chromeos::FakePowerManagerClient;
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        base::WrapUnique(power_manager_client_));
-
     // Initialize user policy.
     ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
@@ -145,9 +140,6 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  // Owned by chromeos::DBusThreadManager.
-  chromeos::FakePowerManagerClient* power_manager_client_;
-
   std::unique_ptr<TestPowerHandler> handler_;
   std::unique_ptr<TestPowerHandler::TestAPI> test_api_;
 
@@ -172,8 +164,8 @@
 
 // Verifies that WebUI receives updated settings when the lid state changes.
 IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SendSettingsForLidStateChanges) {
-  power_manager_client_->SetLidState(PowerManagerClient::LidState::NOT_PRESENT,
-                                     base::TimeTicks());
+  chromeos::FakePowerManagerClient::Get()->SetLidState(
+      PowerManagerClient::LidState::NOT_PRESENT, base::TimeTicks());
   EXPECT_EQ(
       CreateSettingsChangedString(
           PowerHandler::IdleBehavior::DISPLAY_OFF_SLEEP,
@@ -181,8 +173,8 @@
           false /* lid_closed_controlled */, false /* has_lid */),
       GetLastSettingsChangedMessage());
 
-  power_manager_client_->SetLidState(PowerManagerClient::LidState::OPEN,
-                                     base::TimeTicks());
+  chromeos::FakePowerManagerClient::Get()->SetLidState(
+      PowerManagerClient::LidState::OPEN, base::TimeTicks());
   EXPECT_EQ(
       CreateSettingsChangedString(
           PowerHandler::IdleBehavior::DISPLAY_OFF_SLEEP,
diff --git a/chromeos/components/proximity_auth/unlock_manager_impl.cc b/chromeos/components/proximity_auth/unlock_manager_impl.cc
index d545594..9d5be24 100644
--- a/chromeos/components/proximity_auth/unlock_manager_impl.cc
+++ b/chromeos/components/proximity_auth/unlock_manager_impl.cc
@@ -19,12 +19,9 @@
 #include "chromeos/components/proximity_auth/proximity_auth_client.h"
 #include "chromeos/components/proximity_auth/proximity_auth_pref_manager.h"
 #include "chromeos/components/proximity_auth/proximity_monitor_impl.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/services/secure_channel/public/cpp/client/client_channel.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
 
-using chromeos::DBusThreadManager;
-
 namespace proximity_auth {
 namespace {
 
@@ -121,7 +118,7 @@
       clear_waking_up_state_weak_ptr_factory_(this),
       reject_auth_attempt_weak_ptr_factory_(this),
       weak_ptr_factory_(this) {
-  DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
 
   SetWakingUpState(true /* is_waking_up */);
 
@@ -139,7 +136,7 @@
   if (proximity_monitor_)
     proximity_monitor_->RemoveObserver(this);
 
-  DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 
   if (bluetooth_adapter_)
     bluetooth_adapter_->RemoveObserver(this);
diff --git a/chromeos/components/proximity_auth/unlock_manager_impl_unittest.cc b/chromeos/components/proximity_auth/unlock_manager_impl_unittest.cc
index ac049bd1..e8a1ad1 100644
--- a/chromeos/components/proximity_auth/unlock_manager_impl_unittest.cc
+++ b/chromeos/components/proximity_auth/unlock_manager_impl_unittest.cc
@@ -159,21 +159,7 @@
         task_runner_(new base::TestSimpleTaskRunner()),
         thread_task_runner_handle_(task_runner_) {}
 
-  ~ProximityAuthUnlockManagerImplTest() override {
-    // Make sure to verify the mock prior to the destruction of the unlock
-    // manager, as otherwise it's impossible to tell whether calls to Stop()
-    // occur as a side-effect of the destruction or from the code intended to be
-    // under test.
-    if (proximity_monitor())
-      testing::Mock::VerifyAndClearExpectations(proximity_monitor());
-
-    // The UnlockManager must be destroyed before calling
-    // chromeos::DBusThreadManager::Shutdown(), as the UnlockManager's
-    // destructor references the DBusThreadManager.
-    unlock_manager_.reset();
-
-    chromeos::DBusThreadManager::Shutdown();
-  }
+  ~ProximityAuthUnlockManagerImplTest() override = default;
 
   void SetUp() override {
     ON_CALL(*bluetooth_adapter_, IsPresent()).WillByDefault(Return(true));
@@ -185,7 +171,20 @@
     life_cycle_.set_messenger(&messenger_);
     life_cycle_.set_channel(fake_client_channel_.get());
 
-    chromeos::DBusThreadManager::Initialize();
+    chromeos::PowerManagerClient::Initialize();
+  }
+
+  void TearDown() override {
+    // Make sure to verify the mock prior to the destruction of the unlock
+    // manager, as otherwise it's impossible to tell whether calls to Stop()
+    // occur as a side-effect of the destruction or from the code intended to be
+    // under test.
+    if (proximity_monitor())
+      testing::Mock::VerifyAndClearExpectations(proximity_monitor());
+
+    unlock_manager_.reset();
+
+    chromeos::PowerManagerClient::Shutdown();
   }
 
   void CreateUnlockManager(
diff --git a/chromeos/dbus/BUILD.gn b/chromeos/dbus/BUILD.gn
index 9809b50..3724abd 100644
--- a/chromeos/dbus/BUILD.gn
+++ b/chromeos/dbus/BUILD.gn
@@ -73,6 +73,7 @@
     "cros_disks_client.h",
     "cryptohome_client.cc",
     "cryptohome_client.h",
+    "dbus_client.h",
     "dbus_client_implementation_type.h",
     "dbus_clients_browser.cc",
     "dbus_clients_browser.h",
diff --git a/chromeos/dbus/dbus_clients_common.cc b/chromeos/dbus/dbus_clients_common.cc
index 0a142bc..4ddf3db 100644
--- a/chromeos/dbus/dbus_clients_common.cc
+++ b/chromeos/dbus/dbus_clients_common.cc
@@ -31,8 +31,6 @@
 #include "chromeos/dbus/machine_learning_client.h"
 #include "chromeos/dbus/modem_messaging_client.h"
 #include "chromeos/dbus/permission_broker_client.h"
-#include "chromeos/dbus/power_manager_client.h"
-#include "chromeos/dbus/power_policy_controller.h"
 #include "chromeos/dbus/session_manager_client.h"
 #include "chromeos/dbus/shill_device_client.h"
 #include "chromeos/dbus/shill_ipconfig_client.h"
@@ -111,8 +109,6 @@
   else
     permission_broker_client_.reset(new FakePermissionBrokerClient);
 
-  power_manager_client_.reset(PowerManagerClient::Create(client_impl_type));
-
   session_manager_client_.reset(SessionManagerClient::Create(client_impl_type));
 
   if (use_real_clients)
@@ -142,7 +138,6 @@
   machine_learning_client_->Init(system_bus);
   modem_messaging_client_->Init(system_bus);
   permission_broker_client_->Init(system_bus);
-  power_manager_client_->Init(system_bus);
   session_manager_client_->Init(system_bus);
   shill_device_client_->Init(system_bus);
   shill_ipconfig_client_->Init(system_bus);
diff --git a/chromeos/dbus/dbus_clients_common.h b/chromeos/dbus/dbus_clients_common.h
index c4a1a10..b1c4d29 100644
--- a/chromeos/dbus/dbus_clients_common.h
+++ b/chromeos/dbus/dbus_clients_common.h
@@ -25,7 +25,6 @@
 class MachineLearningClient;
 class ModemMessagingClient;
 class PermissionBrokerClient;
-class PowerManagerClient;
 class SessionManagerClient;
 class ShillDeviceClient;
 class ShillIPConfigClient;
@@ -69,7 +68,6 @@
       shill_third_party_vpn_driver_client_;
   std::unique_ptr<PermissionBrokerClient> permission_broker_client_;
   std::unique_ptr<SMSClient> sms_client_;
-  std::unique_ptr<PowerManagerClient> power_manager_client_;
   std::unique_ptr<SessionManagerClient> session_manager_client_;
   std::unique_ptr<UpdateEngineClient> update_engine_client_;
   std::unique_ptr<UpstartClient> upstart_client_;
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
index 7b45a0d..e123999 100644
--- a/chromeos/dbus/dbus_thread_manager.cc
+++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -37,7 +37,6 @@
 #include "chromeos/dbus/media_analytics_client.h"
 #include "chromeos/dbus/modem_messaging_client.h"
 #include "chromeos/dbus/permission_broker_client.h"
-#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/dbus/runtime_probe_client.h"
 #include "chromeos/dbus/seneschal_client.h"
 #include "chromeos/dbus/session_manager_client.h"
@@ -256,10 +255,6 @@
   return clients_common_->permission_broker_client_.get();
 }
 
-PowerManagerClient* DBusThreadManager::GetPowerManagerClient() {
-  return clients_common_->power_manager_client_.get();
-}
-
 SessionManagerClient* DBusThreadManager::GetSessionManagerClient() {
   return clients_common_->session_manager_client_.get();
 }
@@ -503,12 +498,6 @@
       std::move(client);
 }
 
-void DBusThreadManagerSetter::SetPowerManagerClient(
-    std::unique_ptr<PowerManagerClient> client) {
-  DBusThreadManager::Get()->clients_common_->power_manager_client_ =
-      std::move(client);
-}
-
 void DBusThreadManagerSetter::SetSessionManagerClient(
     std::unique_ptr<SessionManagerClient> client) {
   DBusThreadManager::Get()->clients_common_->session_manager_client_ =
diff --git a/chromeos/dbus/dbus_thread_manager.h b/chromeos/dbus/dbus_thread_manager.h
index ce6113a..b8f2069 100644
--- a/chromeos/dbus/dbus_thread_manager.h
+++ b/chromeos/dbus/dbus_thread_manager.h
@@ -52,7 +52,6 @@
 class ModemMessagingClient;
 class OobeConfigurationClient;
 class PermissionBrokerClient;
-class PowerManagerClient;
 class RuntimeProbeClient;
 class SeneschalClient;
 class SessionManagerClient;
@@ -160,7 +159,6 @@
   ModemMessagingClient* GetModemMessagingClient();
   OobeConfigurationClient* GetOobeConfigurationClient();
   PermissionBrokerClient* GetPermissionBrokerClient();
-  PowerManagerClient* GetPowerManagerClient();
   RuntimeProbeClient* GetRuntimeProbeClient();
   SeneschalClient* GetSeneschalClient();
   SessionManagerClient* GetSessionManagerClient();
@@ -222,7 +220,6 @@
   void SetMediaAnalyticsClient(std::unique_ptr<MediaAnalyticsClient> client);
   void SetPermissionBrokerClient(
       std::unique_ptr<PermissionBrokerClient> client);
-  void SetPowerManagerClient(std::unique_ptr<PowerManagerClient> client);
   void SetSeneschalClient(std::unique_ptr<SeneschalClient> client);
   void SetRuntimeProbeClient(std::unique_ptr<RuntimeProbeClient> client);
   void SetSessionManagerClient(std::unique_ptr<SessionManagerClient> client);
diff --git a/chromeos/dbus/dbus_thread_manager_unittest.cc b/chromeos/dbus/dbus_thread_manager_unittest.cc
index 49689d1..704bf22f 100644
--- a/chromeos/dbus/dbus_thread_manager_unittest.cc
+++ b/chromeos/dbus/dbus_thread_manager_unittest.cc
@@ -35,7 +35,6 @@
   EXPECT_TRUE(manager->GetLorgnetteManagerClient());
   EXPECT_TRUE(manager->GetModemMessagingClient());
   EXPECT_TRUE(manager->GetPermissionBrokerClient());
-  EXPECT_TRUE(manager->GetPowerManagerClient());
   EXPECT_TRUE(manager->GetSeneschalClient());
   EXPECT_TRUE(manager->GetSessionManagerClient());
   EXPECT_TRUE(manager->GetShillDeviceClient());
@@ -63,7 +62,6 @@
   EXPECT_TRUE(manager->GetGsmSMSClient());
   EXPECT_TRUE(manager->GetModemMessagingClient());
   EXPECT_TRUE(manager->GetPermissionBrokerClient());
-  EXPECT_TRUE(manager->GetPowerManagerClient());
   EXPECT_TRUE(manager->GetSessionManagerClient());
   EXPECT_TRUE(manager->GetShillDeviceClient());
   EXPECT_TRUE(manager->GetShillIPConfigClient());
@@ -102,7 +100,6 @@
   EXPECT_TRUE(manager->GetGsmSMSClient());
   EXPECT_TRUE(manager->GetModemMessagingClient());
   EXPECT_TRUE(manager->GetPermissionBrokerClient());
-  EXPECT_TRUE(manager->GetPowerManagerClient());
   EXPECT_TRUE(manager->GetSessionManagerClient());
   EXPECT_TRUE(manager->GetShillDeviceClient());
   EXPECT_TRUE(manager->GetShillIPConfigClient());
diff --git a/chromeos/dbus/fake_power_manager_client.cc b/chromeos/dbus/fake_power_manager_client.cc
index 8720f6b..6ec6c4b 100644
--- a/chromeos/dbus/fake_power_manager_client.cc
+++ b/chromeos/dbus/fake_power_manager_client.cc
@@ -20,6 +20,9 @@
 namespace chromeos {
 
 namespace {
+
+FakePowerManagerClient* g_instance = nullptr;
+
 // Minimum power for a USB power source to be classified as AC.
 constexpr double kUsbMinAcWatts = 24;
 
@@ -53,11 +56,10 @@
 }  // namespace
 
 FakePowerManagerClient::FakePowerManagerClient()
-    : props_(power_manager::PowerSupplyProperties()), weak_ptr_factory_(this) {}
+    : props_(power_manager::PowerSupplyProperties()) {
+  DCHECK(!g_instance);
+  g_instance = this;
 
-FakePowerManagerClient::~FakePowerManagerClient() = default;
-
-void FakePowerManagerClient::Init(dbus::Bus* bus) {
   props_->set_battery_percent(50);
   props_->set_is_calculating_battery_time(false);
   props_->set_battery_state(
@@ -68,6 +70,11 @@
   props_->set_battery_time_to_empty_sec(18000);
 }
 
+FakePowerManagerClient::~FakePowerManagerClient() {
+  DCHECK_EQ(g_instance, this);
+  g_instance = nullptr;
+}
+
 void FakePowerManagerClient::AddObserver(Observer* observer) {
   observers_.AddObserver(observer);
 }
@@ -419,6 +426,11 @@
     observer.PowerChanged(*props_);
 }
 
+FakePowerManagerClient* FakePowerManagerClient::Get() {
+  DCHECK(g_instance);
+  return g_instance;
+}
+
 void FakePowerManagerClient::HandleSuspendReadiness() {
   CHECK_GT(num_pending_suspend_readiness_callbacks_, 0);
 
diff --git a/chromeos/dbus/fake_power_manager_client.h b/chromeos/dbus/fake_power_manager_client.h
index 45a1573..cbe19008 100644
--- a/chromeos/dbus/fake_power_manager_client.h
+++ b/chromeos/dbus/fake_power_manager_client.h
@@ -71,7 +71,6 @@
   }
 
   // PowerManagerClient overrides:
-  void Init(dbus::Bus* bus) override;
   void AddObserver(Observer* observer) override;
   void RemoveObserver(Observer* observer) override;
   bool HasObserver(const Observer* observer) const override;
@@ -183,6 +182,8 @@
     keyboard_brightness_percent_ = percent;
   }
 
+  static FakePowerManagerClient* Get();
+
  private:
   // Callback that will be run by asynchronous suspend delays to report
   // readiness.
@@ -282,7 +283,7 @@
 
   // Note: This should remain the last member so it'll be destroyed and
   // invalidate its weak pointers before any other members are destroyed.
-  base::WeakPtrFactory<FakePowerManagerClient> weak_ptr_factory_;
+  base::WeakPtrFactory<FakePowerManagerClient> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(FakePowerManagerClient);
 };
diff --git a/chromeos/dbus/native_timer.cc b/chromeos/dbus/native_timer.cc
index 1d12153..418a14d 100644
--- a/chromeos/dbus/native_timer.cc
+++ b/chromeos/dbus/native_timer.cc
@@ -21,7 +21,6 @@
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager_client.h"
 
 namespace chromeos {
@@ -53,7 +52,7 @@
   std::vector<std::pair<clockid_t, base::ScopedFD>> create_timers_request;
   create_timers_request.push_back(
       std::make_pair(CLOCK_BOOTTIME_ALARM, std::move(powerd_fd)));
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->CreateArcTimers(
+  PowerManagerClient::Get()->CreateArcTimers(
       tag, std::move(create_timers_request),
       base::BindOnce(&NativeTimer::OnCreateTimer, weak_factory_.GetWeakPtr(),
                      std::move(expiration_fd)));
@@ -65,8 +64,7 @@
     return;
   }
 
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->DeleteArcTimers(
-      tag_, base::DoNothing());
+  PowerManagerClient::Get()->DeleteArcTimers(tag_, base::DoNothing());
 }
 
 struct NativeTimer::StartTimerParams {
@@ -118,7 +116,7 @@
   // state to ensure this.
   ResetState();
   DCHECK_GE(timer_id_, 0);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->StartArcTimer(
+  PowerManagerClient::Get()->StartArcTimer(
       timer_id_, absolute_expiration_time,
       base::BindOnce(&NativeTimer::OnStartTimer, weak_factory_.GetWeakPtr(),
                      std::move(timer_expiration_callback),
@@ -225,7 +223,7 @@
 
   // The |in_flight_start_timer_params_->result_callback| will be called in
   // |OnStartTimer|.
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->StartArcTimer(
+  PowerManagerClient::Get()->StartArcTimer(
       timer_id_, in_flight_start_timer_params_->absolute_expiration_time,
       base::BindOnce(
           &NativeTimer::OnStartTimer, weak_factory_.GetWeakPtr(),
diff --git a/chromeos/dbus/native_timer_unittest.cc b/chromeos/dbus/native_timer_unittest.cc
index a7c393b..2026a35 100644
--- a/chromeos/dbus/native_timer_unittest.cc
+++ b/chromeos/dbus/native_timer_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
+// Copyright 2019 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -10,8 +10,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_power_manager_client.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace chromeos {
@@ -60,20 +59,18 @@
  public:
   NativeTimerTest()
       : scoped_task_environment_(
-            base::test::ScopedTaskEnvironment::MainThreadType::IO) {
-    fake_power_manager_client_ = new chromeos::FakePowerManagerClient;
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        base::WrapUnique(fake_power_manager_client_));
-  }
+            base::test::ScopedTaskEnvironment::MainThreadType::IO) {}
 
   ~NativeTimerTest() override = default;
 
+  // testing::Test:
+  void SetUp() override { PowerManagerClient::Initialize(); }
+
+  void TearDown() override { PowerManagerClient::Shutdown(); }
+
  protected:
   base::test::ScopedTaskEnvironment scoped_task_environment_;
 
-  // Owned by chromeos::DBusThreadManager.
-  chromeos::FakePowerManagerClient* fake_power_manager_client_;
-
  private:
   DISALLOW_COPY_AND_ASSIGN(NativeTimerTest);
 };
diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc
index d0e39c2..f0965db 100644
--- a/chromeos/dbus/power_manager_client.cc
+++ b/chromeos/dbus/power_manager_client.cc
@@ -23,7 +23,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/threading/platform_thread.h"
 #include "base/timer/timer.h"
-#include "chromeos/dbus/constants/dbus_switches.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "chromeos/dbus/power_manager/idle.pb.h"
@@ -40,6 +40,8 @@
 
 namespace {
 
+PowerManagerClient* g_instance = nullptr;
+
 // Maximum amount of time that the power manager will wait for Chrome to
 // say that it's ready for the system to be suspended, in milliseconds.
 const int kSuspendDelayTimeoutMs = 5000;
@@ -143,8 +145,7 @@
 class PowerManagerClientImpl : public PowerManagerClient {
  public:
   PowerManagerClientImpl()
-      : origin_thread_id_(base::PlatformThread::CurrentId()),
-        weak_ptr_factory_(this) {}
+      : origin_thread_id_(base::PlatformThread::CurrentId()) {}
 
   ~PowerManagerClientImpl() override {
     // Here we should unregister suspend notifications from powerd,
@@ -155,6 +156,57 @@
     //   unregister our suspend delay.
   }
 
+  void Init(dbus::Bus* bus) {
+    power_manager_proxy_ = bus->GetObjectProxy(
+        power_manager::kPowerManagerServiceName,
+        dbus::ObjectPath(power_manager::kPowerManagerServicePath));
+
+    power_manager_proxy_->SetNameOwnerChangedCallback(
+        base::Bind(&PowerManagerClientImpl::NameOwnerChangedReceived,
+                   weak_ptr_factory_.GetWeakPtr()));
+
+    // Listen to D-Bus signals emitted by powerd.
+    typedef void (PowerManagerClientImpl::*SignalMethod)(dbus::Signal*);
+    const std::map<const char*, SignalMethod> kSignalMethods = {
+        {power_manager::kScreenBrightnessChangedSignal,
+         &PowerManagerClientImpl::ScreenBrightnessChangedReceived},
+        {power_manager::kKeyboardBrightnessChangedSignal,
+         &PowerManagerClientImpl::KeyboardBrightnessChangedReceived},
+        {power_manager::kScreenIdleStateChangedSignal,
+         &PowerManagerClientImpl::ScreenIdleStateChangedReceived},
+        {power_manager::kInactivityDelaysChangedSignal,
+         &PowerManagerClientImpl::InactivityDelaysChangedReceived},
+        {power_manager::kPeripheralBatteryStatusSignal,
+         &PowerManagerClientImpl::PeripheralBatteryStatusReceived},
+        {power_manager::kPowerSupplyPollSignal,
+         &PowerManagerClientImpl::PowerSupplyPollReceived},
+        {power_manager::kInputEventSignal,
+         &PowerManagerClientImpl::InputEventReceived},
+        {power_manager::kSuspendImminentSignal,
+         &PowerManagerClientImpl::SuspendImminentReceived},
+        {power_manager::kSuspendDoneSignal,
+         &PowerManagerClientImpl::SuspendDoneReceived},
+        {power_manager::kDarkSuspendImminentSignal,
+         &PowerManagerClientImpl::DarkSuspendImminentReceived},
+        {power_manager::kScreenDimImminentSignal,
+         &PowerManagerClientImpl::ScreenDimImminentReceived},
+        {power_manager::kIdleActionImminentSignal,
+         &PowerManagerClientImpl::IdleActionImminentReceived},
+        {power_manager::kIdleActionDeferredSignal,
+         &PowerManagerClientImpl::IdleActionDeferredReceived},
+    };
+    for (const auto& it : kSignalMethods) {
+      power_manager_proxy_->ConnectToSignal(
+          power_manager::kPowerManagerInterface, it.first,
+          base::BindRepeating(it.second, weak_ptr_factory_.GetWeakPtr()),
+          base::BindOnce(&PowerManagerClientImpl::SignalConnected,
+                         weak_ptr_factory_.GetWeakPtr()));
+    }
+
+    RegisterSuspendDelays();
+    RequestStatusUpdate();
+  }
+
   // PowerManagerClient overrides:
 
   void AddObserver(Observer* observer) override {
@@ -479,58 +531,6 @@
     SimpleMethodCallToPowerManager(power_manager::kDeferScreenDimMethod);
   }
 
- protected:
-  void Init(dbus::Bus* bus) override {
-    power_manager_proxy_ = bus->GetObjectProxy(
-        power_manager::kPowerManagerServiceName,
-        dbus::ObjectPath(power_manager::kPowerManagerServicePath));
-
-    power_manager_proxy_->SetNameOwnerChangedCallback(
-        base::Bind(&PowerManagerClientImpl::NameOwnerChangedReceived,
-                   weak_ptr_factory_.GetWeakPtr()));
-
-    // Listen to D-Bus signals emitted by powerd.
-    typedef void (PowerManagerClientImpl::*SignalMethod)(dbus::Signal*);
-    const std::map<const char*, SignalMethod> kSignalMethods = {
-        {power_manager::kScreenBrightnessChangedSignal,
-         &PowerManagerClientImpl::ScreenBrightnessChangedReceived},
-        {power_manager::kKeyboardBrightnessChangedSignal,
-         &PowerManagerClientImpl::KeyboardBrightnessChangedReceived},
-        {power_manager::kScreenIdleStateChangedSignal,
-         &PowerManagerClientImpl::ScreenIdleStateChangedReceived},
-        {power_manager::kInactivityDelaysChangedSignal,
-         &PowerManagerClientImpl::InactivityDelaysChangedReceived},
-        {power_manager::kPeripheralBatteryStatusSignal,
-         &PowerManagerClientImpl::PeripheralBatteryStatusReceived},
-        {power_manager::kPowerSupplyPollSignal,
-         &PowerManagerClientImpl::PowerSupplyPollReceived},
-        {power_manager::kInputEventSignal,
-         &PowerManagerClientImpl::InputEventReceived},
-        {power_manager::kSuspendImminentSignal,
-         &PowerManagerClientImpl::SuspendImminentReceived},
-        {power_manager::kSuspendDoneSignal,
-         &PowerManagerClientImpl::SuspendDoneReceived},
-        {power_manager::kDarkSuspendImminentSignal,
-         &PowerManagerClientImpl::DarkSuspendImminentReceived},
-        {power_manager::kScreenDimImminentSignal,
-         &PowerManagerClientImpl::ScreenDimImminentReceived},
-        {power_manager::kIdleActionImminentSignal,
-         &PowerManagerClientImpl::IdleActionImminentReceived},
-        {power_manager::kIdleActionDeferredSignal,
-         &PowerManagerClientImpl::IdleActionDeferredReceived},
-    };
-    for (const auto& it : kSignalMethods) {
-      power_manager_proxy_->ConnectToSignal(
-          power_manager::kPowerManagerInterface, it.first,
-          base::BindRepeating(it.second, weak_ptr_factory_.GetWeakPtr()),
-          base::BindOnce(&PowerManagerClientImpl::SignalConnected,
-                         weak_ptr_factory_.GetWeakPtr()));
-    }
-
-    RegisterSuspendDelays();
-    RequestStatusUpdate();
-  }
-
  private:
   // Returns true if the current thread is the origin thread.
   bool OnOriginThread() {
@@ -1142,22 +1142,37 @@
 
   // Note: This should remain the last member so it'll be destroyed and
   // invalidate its weak pointers before any other members are destroyed.
-  base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_;
+  base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl);
 };
 
-PowerManagerClient::PowerManagerClient() = default;
+PowerManagerClient::PowerManagerClient() {
+  DCHECK_EQ(g_instance, nullptr);
+  g_instance = this;
+}
 
-PowerManagerClient::~PowerManagerClient() = default;
+PowerManagerClient::~PowerManagerClient() {
+  DCHECK_EQ(g_instance, this);
+  g_instance = nullptr;
+}
 
 // static
-PowerManagerClient* PowerManagerClient::Create(
-    DBusClientImplementationType type) {
-  if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
-    return new PowerManagerClientImpl();
-  DCHECK_EQ(FAKE_DBUS_CLIENT_IMPLEMENTATION, type);
-  return new FakePowerManagerClient();
+void PowerManagerClient::Initialize(dbus::Bus* bus) {
+  if (bus)
+    (new PowerManagerClientImpl())->Init(bus);
+  else
+    new FakePowerManagerClient();
+}
+
+// static
+PowerManagerClient* PowerManagerClient::Get() {
+  return g_instance;
+}
+
+// static
+void PowerManagerClient::Shutdown() {
+  delete g_instance;
 }
 
 }  // namespace chromeos
diff --git a/chromeos/dbus/power_manager_client.h b/chromeos/dbus/power_manager_client.h
index bb1bc0a..297841f 100644
--- a/chromeos/dbus/power_manager_client.h
+++ b/chromeos/dbus/power_manager_client.h
@@ -18,14 +18,16 @@
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "base/time/time.h"
-#include "chromeos/dbus/dbus_client.h"
-#include "chromeos/dbus/dbus_client_implementation_type.h"
 #include "chromeos/dbus/dbus_method_call_status.h"
 #include "chromeos/dbus/power_manager/policy.pb.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
+namespace dbus {
+class Bus;
+}
+
 namespace power_manager {
 class BacklightBrightnessChange;
 class ScreenIdleState;
@@ -35,7 +37,7 @@
 namespace chromeos {
 
 // PowerManagerClient is used to communicate with the power manager.
-class COMPONENT_EXPORT(CHROMEOS_DBUS) PowerManagerClient : public DBusClient {
+class COMPONENT_EXPORT(CHROMEOS_DBUS) PowerManagerClient {
  public:
   using TimerId = int32_t;
 
@@ -316,17 +318,14 @@
   // ScreenDimImminent notifications.
   virtual void DeferScreenDim() = 0;
 
-  // Creates the instance.
-  static PowerManagerClient* Create(DBusClientImplementationType type);
-
-  ~PowerManagerClient() override;
-
- protected:
-  // Needs to call DBusClient::Init().
-  friend class PowerManagerClientTest;
-
-  // Create() should be used instead.
   PowerManagerClient();
+  virtual ~PowerManagerClient();
+
+  // Creates and inits the instance. If |bus| is null, a FakePowerManagerClient
+  // will be created.
+  static void Initialize(dbus::Bus* bus = nullptr);
+  static PowerManagerClient* Get();
+  static void Shutdown();
 
  private:
   DISALLOW_COPY_AND_ASSIGN(PowerManagerClient);
diff --git a/chromeos/dbus/power_manager_client_unittest.cc b/chromeos/dbus/power_manager_client_unittest.cc
index 357438b..e8c7260 100644
--- a/chromeos/dbus/power_manager_client_unittest.cc
+++ b/chromeos/dbus/power_manager_client_unittest.cc
@@ -236,14 +236,14 @@
         DoCallMethod(HasMember(power_manager::kGetPowerSupplyPropertiesMethod),
                      _, _));
 
-    client_.reset(PowerManagerClient::Create(REAL_DBUS_CLIENT_IMPLEMENTATION));
-    client_->Init(bus_.get());
+    PowerManagerClient::Initialize(bus_.get());
+    client_ = PowerManagerClient::Get();
 
     // Execute callbacks posted by Init().
     base::RunLoop().RunUntilIdle();
   }
 
-  void TearDown() override { client_.reset(); }
+  void TearDown() override { PowerManagerClient::Shutdown(); }
 
  protected:
   // Synchronously passes |signal| to |client_|'s handler, simulating the signal
@@ -297,7 +297,7 @@
   scoped_refptr<dbus::MockBus> bus_;
   scoped_refptr<dbus::MockObjectProxy> proxy_;
 
-  std::unique_ptr<PowerManagerClient> client_;
+  PowerManagerClient* client_ = nullptr;
 
   // Maps from powerd signal name to the corresponding callback provided by
   // |client_|.
@@ -358,8 +358,8 @@
 // Tests that synchronous observers are notified about impending suspend
 // attempts and completion.
 TEST_F(PowerManagerClientTest, ReportSuspendReadinessWithoutCallbacks) {
-  TestObserver observer_1(client_.get());
-  TestObserver observer_2(client_.get());
+  TestObserver observer_1(client_);
+  TestObserver observer_2(client_);
 
   // Observers should be notified when suspend is imminent. Readiness should be
   // reported synchronously since GetSuspendReadinessCallback() hasn't been
@@ -382,11 +382,11 @@
 // Tests that readiness is deferred until asynchronous observers have run their
 // callbacks.
 TEST_F(PowerManagerClientTest, ReportSuspendReadinessWithCallbacks) {
-  TestObserver observer_1(client_.get());
+  TestObserver observer_1(client_);
   observer_1.set_take_suspend_readiness_callback(true);
-  TestObserver observer_2(client_.get());
+  TestObserver observer_2(client_);
   observer_2.set_take_suspend_readiness_callback(true);
-  TestObserver observer_3(client_.get());
+  TestObserver observer_3(client_);
 
   // When observers call GetSuspendReadinessCallback() from their
   // SuspendImminent() methods, the HandleSuspendReadiness method call should be
@@ -404,8 +404,8 @@
 // Tests that RenderProcessManagerDelegate is notified about suspend and resume
 // in the common case where suspend readiness is reported.
 TEST_F(PowerManagerClientTest, NotifyRenderProcessManagerDelegate) {
-  TestDelegate delegate(client_.get());
-  TestObserver observer(client_.get());
+  TestDelegate delegate(client_);
+  TestObserver observer(client_);
   observer.set_take_suspend_readiness_callback(true);
 
   const int kSuspendId = 1;
@@ -429,8 +429,8 @@
 // Tests that DarkSuspendImminent is handled in a manner similar to
 // SuspendImminent.
 TEST_F(PowerManagerClientTest, ReportDarkSuspendReadiness) {
-  TestDelegate delegate(client_.get());
-  TestObserver observer(client_.get());
+  TestDelegate delegate(client_);
+  TestObserver observer(client_);
   observer.set_take_suspend_readiness_callback(true);
 
   const int kSuspendId = 1;
@@ -463,8 +463,8 @@
 // Tests the case where a SuspendDone signal is received while a readiness
 // callback is still pending.
 TEST_F(PowerManagerClientTest, SuspendCancelledWhileCallbackPending) {
-  TestDelegate delegate(client_.get());
-  TestObserver observer(client_.get());
+  TestDelegate delegate(client_);
+  TestObserver observer(client_);
   observer.set_take_suspend_readiness_callback(true);
 
   const int kSuspendId = 1;
@@ -492,8 +492,8 @@
 // Tests the case where a SuspendDone signal is received while a dark suspend
 // readiness callback is still pending.
 TEST_F(PowerManagerClientTest, SuspendDoneWhileDarkSuspendCallbackPending) {
-  TestDelegate delegate(client_.get());
-  TestObserver observer(client_.get());
+  TestDelegate delegate(client_);
+  TestObserver observer(client_);
   observer.set_take_suspend_readiness_callback(true);
 
   const int kSuspendId = 1;
@@ -522,8 +522,8 @@
 // Tests the case where dark suspend is announced while readiness hasn't been
 // reported for the initial regular suspend attempt.
 TEST_F(PowerManagerClientTest, DarkSuspendImminentWhileCallbackPending) {
-  TestDelegate delegate(client_.get());
-  TestObserver observer(client_.get());
+  TestDelegate delegate(client_);
+  TestObserver observer(client_);
   observer.set_take_suspend_readiness_callback(true);
 
   // Announce that suspend is imminent and grab, but don't run, the readiness
@@ -552,7 +552,7 @@
 // SuspendImminent() instead of running it asynchronously:
 // http://crosbug.com/p/58295
 TEST_F(PowerManagerClientTest, SyncCallbackWithSingleObserver) {
-  TestObserver observer(client_.get());
+  TestObserver observer(client_);
   observer.set_take_suspend_readiness_callback(true);
   observer.set_run_suspend_readiness_callback_immediately(true);
 
@@ -567,11 +567,11 @@
 // attempt. We shouldn't report suspend readiness until the second observer has
 // been notified and confirmed readiness.
 TEST_F(PowerManagerClientTest, SyncCallbackWithMultipleObservers) {
-  TestObserver observer1(client_.get());
+  TestObserver observer1(client_);
   observer1.set_take_suspend_readiness_callback(true);
   observer1.set_run_suspend_readiness_callback_immediately(true);
 
-  TestObserver observer2(client_.get());
+  TestObserver observer2(client_);
   observer2.set_take_suspend_readiness_callback(true);
 
   const int kSuspendId = 1;
diff --git a/chromeos/dbus/power_policy_controller_unittest.cc b/chromeos/dbus/power_policy_controller_unittest.cc
index 11d8967..c3ae86f 100644
--- a/chromeos/dbus/power_policy_controller_unittest.cc
+++ b/chromeos/dbus/power_policy_controller_unittest.cc
@@ -16,13 +16,12 @@
 
 class PowerPolicyControllerTest : public testing::Test {
  public:
-  PowerPolicyControllerTest()
-      : fake_power_client_(new FakePowerManagerClient) {}
-
+  PowerPolicyControllerTest() = default;
   ~PowerPolicyControllerTest() override = default;
 
   void SetUp() override {
-    PowerPolicyController::Initialize(fake_power_client_.get());
+    PowerManagerClient::Initialize();
+    PowerPolicyController::Initialize(FakePowerManagerClient::Get());
     ASSERT_TRUE(PowerPolicyController::IsInitialized());
     policy_controller_ = PowerPolicyController::Get();
   }
@@ -30,12 +29,19 @@
   void TearDown() override {
     if (PowerPolicyController::IsInitialized())
       PowerPolicyController::Shutdown();
+    PowerManagerClient::Shutdown();
   }
 
  protected:
-  std::unique_ptr<FakePowerManagerClient> fake_power_client_;
+  FakePowerManagerClient* power_manager() {
+    return FakePowerManagerClient::Get();
+  }
+
   PowerPolicyController* policy_controller_;
   base::MessageLoop message_loop_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(PowerPolicyControllerTest);
 };
 
 TEST_F(PowerPolicyControllerTest, Prefs) {
@@ -86,9 +92,9 @@
   expected_policy.set_wait_for_initial_user_activity(true);
   expected_policy.set_force_nonzero_brightness_for_user_activity(false);
   expected_policy.set_reason(PowerPolicyController::kPrefsReason);
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // Change some prefs and check that an updated policy is sent.
   prefs.ac_idle_warning_delay_ms = 700000;
@@ -103,9 +109,9 @@
       power_manager::PowerManagementPolicy_Action_SUSPEND);
   expected_policy.clear_ac_brightness_percent();
   expected_policy.set_force_nonzero_brightness_for_user_activity(true);
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // The enable-auto-screen-lock pref should force the screen-lock delays to
   // match the screen-off delays plus a constant value.
@@ -115,9 +121,9 @@
       660000 + PowerPolicyController::kScreenLockAfterOffDelayMs);
   expected_policy.mutable_battery_delays()->set_screen_lock_ms(
       360000 + PowerPolicyController::kScreenLockAfterOffDelayMs);
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // If the screen-lock-delay prefs are set to lower values than the
   // screen-off delays plus the constant, the lock prefs should take
@@ -127,9 +133,9 @@
   policy_controller_->ApplyPrefs(prefs);
   expected_policy.mutable_ac_delays()->set_screen_lock_ms(70000);
   expected_policy.mutable_battery_delays()->set_screen_lock_ms(60000);
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // If the artificial screen-lock delays would exceed the idle delay, they
   // shouldn't be set -- the power manager would ignore them since the
@@ -145,9 +151,9 @@
       prefs.battery_screen_off_delay_ms);
   expected_policy.mutable_ac_delays()->set_screen_lock_ms(-1);
   expected_policy.mutable_battery_delays()->set_screen_lock_ms(-1);
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // Set the "allow screen wake locks" pref to false and add a screen wake lock.
   // It should be downgraded to a system wake lock, and the pref-supplied delays
@@ -159,9 +165,9 @@
   expected_policy.set_system_wake_lock(true);
   expected_policy.set_reason(std::string(PowerPolicyController::kPrefsReason) +
                              ", Screen");
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // Set the "allow wake locks" pref to false and add a screen wake lock.
   // It should be ignored.
@@ -171,9 +177,9 @@
                                         "Screen");
   expected_policy.clear_system_wake_lock();
   expected_policy.set_reason(std::string(PowerPolicyController::kPrefsReason));
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 }
 
 TEST_F(PowerPolicyControllerTest, SystemWakeLock) {
@@ -182,9 +188,9 @@
   power_manager::PowerManagementPolicy expected_policy;
   expected_policy.set_system_wake_lock(true);
   expected_policy.set_reason("1");
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 }
 
 TEST_F(PowerPolicyControllerTest, DimWakeLock) {
@@ -192,9 +198,9 @@
   power_manager::PowerManagementPolicy expected_policy;
   expected_policy.set_dim_wake_lock(true);
   expected_policy.set_reason("1");
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 }
 
 TEST_F(PowerPolicyControllerTest, ScreenWakeLock) {
@@ -203,16 +209,16 @@
   power_manager::PowerManagementPolicy expected_policy;
   expected_policy.set_screen_wake_lock(true);
   expected_policy.set_reason("1");
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 }
 
 TEST_F(PowerPolicyControllerTest, IgnoreMediaWakeLocksWhenRequested) {
   PowerPolicyController::PrefValues prefs;
   policy_controller_->ApplyPrefs(prefs);
   const power_manager::PowerManagementPolicy kDefaultPolicy =
-      fake_power_client_->policy();
+      power_manager()->policy();
 
   // Wake locks created for audio or video playback should be ignored when the
   // |use_audio_activity| or |use_video_activity| prefs are unset.
@@ -229,9 +235,9 @@
   expected_policy.set_use_audio_activity(false);
   expected_policy.set_use_video_activity(false);
   expected_policy.set_reason(PowerPolicyController::kPrefsReason);
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // Non-media screen wake locks should still be honored.
   const int other_id = policy_controller_->AddScreenWakeLock(
@@ -240,9 +246,9 @@
   expected_policy.set_screen_wake_lock(true);
   expected_policy.set_reason(std::string(PowerPolicyController::kPrefsReason) +
                              ", other");
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // Start honoring audio activity and check that the audio wake lock is used.
   policy_controller_->RemoveWakeLock(other_id);
@@ -254,9 +260,9 @@
   expected_policy.set_system_wake_lock(true);
   expected_policy.set_reason(std::string(PowerPolicyController::kPrefsReason) +
                              ", audio");
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   // Now honor video activity as well.
   prefs.use_video_activity = true;
@@ -267,9 +273,9 @@
   expected_policy.set_system_wake_lock(true);
   expected_policy.set_reason(std::string(PowerPolicyController::kPrefsReason) +
                              ", audio, video");
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   policy_controller_->RemoveWakeLock(audio_id);
   policy_controller_->RemoveWakeLock(video_id);
@@ -278,16 +284,16 @@
 TEST_F(PowerPolicyControllerTest, AvoidSendingEmptyPolicies) {
   // Check that empty policies aren't sent when PowerPolicyController is created
   // or destroyed.
-  EXPECT_EQ(0, fake_power_client_->num_set_policy_calls());
+  EXPECT_EQ(0, power_manager()->num_set_policy_calls());
   PowerPolicyController::Shutdown();
-  EXPECT_EQ(0, fake_power_client_->num_set_policy_calls());
+  EXPECT_EQ(0, power_manager()->num_set_policy_calls());
 }
 
 TEST_F(PowerPolicyControllerTest, DoNothingOnLidClosedWhileSigningOut) {
   PowerPolicyController::PrefValues prefs;
   policy_controller_->ApplyPrefs(prefs);
   const power_manager::PowerManagementPolicy kDefaultPolicy =
-      fake_power_client_->policy();
+      power_manager()->policy();
 
   prefs.lid_closed_action = PowerPolicyController::ACTION_SHUT_DOWN;
   policy_controller_->ApplyPrefs(prefs);
@@ -297,25 +303,25 @@
   expected_policy.set_lid_closed_action(
       power_manager::PowerManagementPolicy_Action_SHUT_DOWN);
   // Sanity check.
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   policy_controller_->NotifyChromeIsExiting();
 
   expected_policy.set_lid_closed_action(
       power_manager::PowerManagementPolicy_Action_DO_NOTHING);
   // Lid-closed action successfully changed to "do nothing".
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 }
 
 TEST_F(PowerPolicyControllerTest, SuspendOnLidClosedWhileSignedOut) {
   PowerPolicyController::PrefValues prefs;
   policy_controller_->ApplyPrefs(prefs);
   const power_manager::PowerManagementPolicy kDefaultPolicy =
-      fake_power_client_->policy();
+      power_manager()->policy();
 
   prefs.lid_closed_action = PowerPolicyController::ACTION_SHUT_DOWN;
   policy_controller_->ApplyPrefs(prefs);
@@ -325,18 +331,18 @@
   expected_policy.set_lid_closed_action(
       power_manager::PowerManagementPolicy_Action_SHUT_DOWN);
   // Sanity check
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 
   policy_controller_->SetEncryptionMigrationActive(true);
   expected_policy.set_lid_closed_action(
       power_manager::PowerManagementPolicy_Action_SUSPEND);
   expected_policy.set_reason("Prefs, encryption migration");
   // Lid-closed action successfully changed to "suspend".
-  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(expected_policy),
-            PowerPolicyController::GetPolicyDebugString(
-                fake_power_client_->policy()));
+  EXPECT_EQ(
+      PowerPolicyController::GetPolicyDebugString(expected_policy),
+      PowerPolicyController::GetPolicyDebugString(power_manager()->policy()));
 }
 
 TEST_F(PowerPolicyControllerTest, PerSessionScreenBrightnessOverride) {
@@ -348,42 +354,40 @@
   prefs.battery_brightness_percent = kBatteryBrightness;
   policy_controller_->ApplyPrefs(prefs);
 
-  EXPECT_EQ(kAcBrightness,
-            fake_power_client_->policy().ac_brightness_percent());
+  EXPECT_EQ(kAcBrightness, power_manager()->policy().ac_brightness_percent());
   EXPECT_EQ(kBatteryBrightness,
-            fake_power_client_->policy().battery_brightness_percent());
+            power_manager()->policy().battery_brightness_percent());
 
   // Simulate model triggered brightness change - shouldn't override the policy.
   power_manager::SetBacklightBrightnessRequest request;
   request.set_percent(80.0);
   request.set_cause(power_manager::SetBacklightBrightnessRequest_Cause_MODEL);
-  fake_power_client_->SetScreenBrightness(request);
+  power_manager()->SetScreenBrightness(request);
   base::RunLoop().RunUntilIdle();
   policy_controller_->ApplyPrefs(prefs);
 
-  EXPECT_EQ(kAcBrightness,
-            fake_power_client_->policy().ac_brightness_percent());
+  EXPECT_EQ(kAcBrightness, power_manager()->policy().ac_brightness_percent());
   EXPECT_EQ(kBatteryBrightness,
-            fake_power_client_->policy().battery_brightness_percent());
+            power_manager()->policy().battery_brightness_percent());
 
   // Simulate user triggered brightness change - should override the policy.
   request.set_percent(80.0);
   request.set_cause(
       power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST);
-  fake_power_client_->SetScreenBrightness(request);
+  power_manager()->SetScreenBrightness(request);
   base::RunLoop().RunUntilIdle();
   policy_controller_->ApplyPrefs(prefs);
 
-  EXPECT_FALSE(fake_power_client_->policy().has_ac_brightness_percent());
-  EXPECT_FALSE(fake_power_client_->policy().has_battery_brightness_percent());
+  EXPECT_FALSE(power_manager()->policy().has_ac_brightness_percent());
+  EXPECT_FALSE(power_manager()->policy().has_battery_brightness_percent());
 
   // Simulate policy values update that should be ignored.
   prefs.ac_brightness_percent = 98.0;
   prefs.battery_brightness_percent = 76.0;
   policy_controller_->ApplyPrefs(prefs);
 
-  EXPECT_FALSE(fake_power_client_->policy().has_ac_brightness_percent());
-  EXPECT_FALSE(fake_power_client_->policy().has_battery_brightness_percent());
+  EXPECT_FALSE(power_manager()->policy().has_ac_brightness_percent());
+  EXPECT_FALSE(power_manager()->policy().has_battery_brightness_percent());
 }
 
 TEST_F(PowerPolicyControllerTest, PolicyAutoScreenLockDelay) {
diff --git a/chromeos/disks/disk_mount_manager.cc b/chromeos/disks/disk_mount_manager.cc
index dc7c9a5..9ad68758 100644
--- a/chromeos/disks/disk_mount_manager.cc
+++ b/chromeos/disks/disk_mount_manager.cc
@@ -60,10 +60,8 @@
     weak_ptr_factory_(this) {
     DBusThreadManager* dbus_thread_manager = DBusThreadManager::Get();
     cros_disks_client_ = dbus_thread_manager->GetCrosDisksClient();
-    PowerManagerClient* power_manager_client =
-        dbus_thread_manager->GetPowerManagerClient();
-    suspend_unmount_manager_.reset(
-        new SuspendUnmountManager(this, power_manager_client));
+    suspend_unmount_manager_.reset(new SuspendUnmountManager(this));
+
     cros_disks_client_->AddObserver(this);
   }
 
diff --git a/chromeos/disks/disk_mount_manager_unittest.cc b/chromeos/disks/disk_mount_manager_unittest.cc
index a00a12e..fe1e4fa5 100644
--- a/chromeos/disks/disk_mount_manager_unittest.cc
+++ b/chromeos/disks/disk_mount_manager_unittest.cc
@@ -17,19 +17,16 @@
 #include "base/test/scoped_task_environment.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_cros_disks_client.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/disks/disk.h"
 #include "chromeos/disks/disk_mount_manager.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using base::StringPrintf;
-using chromeos::disks::Disk;
-using chromeos::disks::DiskMountManager;
-using chromeos::CrosDisksClient;
-using chromeos::DBusThreadManager;
-using chromeos::FakeCrosDisksClient;
-using chromeos::MountError;
-using chromeos::MountType;
-using chromeos::disks::MountCondition;
+
+namespace chromeos {
+
+namespace disks {
 
 namespace {
 
@@ -505,6 +502,7 @@
     fake_cros_disks_client_ = new FakeCrosDisksClient;
     DBusThreadManager::GetSetterForTesting()->SetCrosDisksClient(
         std::unique_ptr<CrosDisksClient>(fake_cros_disks_client_));
+    PowerManagerClient::Initialize();
 
     DiskMountManager::Initialize();
 
@@ -519,6 +517,7 @@
   void TearDown() override {
     DiskMountManager::GetInstance()->RemoveObserver(observer_.get());
     DiskMountManager::Shutdown();
+    PowerManagerClient::Shutdown();
     DBusThreadManager::Shutdown();
   }
 
@@ -1535,3 +1534,6 @@
 }
 
 }  // namespace
+
+}  // namespace disks
+}  // namespace chromeos
diff --git a/chromeos/disks/suspend_unmount_manager.cc b/chromeos/disks/suspend_unmount_manager.cc
index 7d96466..30cff943 100644
--- a/chromeos/disks/suspend_unmount_manager.cc
+++ b/chromeos/disks/suspend_unmount_manager.cc
@@ -18,16 +18,13 @@
 }  // namespace
 
 SuspendUnmountManager::SuspendUnmountManager(
-    DiskMountManager* disk_mount_manager,
-    PowerManagerClient* power_manager_client)
-    : disk_mount_manager_(disk_mount_manager),
-      power_manager_client_(power_manager_client),
-      weak_ptr_factory_(this) {
-  power_manager_client_->AddObserver(this);
+    DiskMountManager* disk_mount_manager)
+    : disk_mount_manager_(disk_mount_manager), weak_ptr_factory_(this) {
+  PowerManagerClient::Get()->AddObserver(this);
 }
 
 SuspendUnmountManager::~SuspendUnmountManager() {
-  power_manager_client_->RemoveObserver(this);
+  PowerManagerClient::Get()->RemoveObserver(this);
   if (!suspend_readiness_callback_.is_null())
     suspend_readiness_callback_.Run();
 }
@@ -48,7 +45,7 @@
   for (const auto& mount_path : mount_paths) {
     if (suspend_readiness_callback_.is_null()) {
       suspend_readiness_callback_ =
-          power_manager_client_->GetSuspendReadinessCallback(FROM_HERE);
+          PowerManagerClient::Get()->GetSuspendReadinessCallback(FROM_HERE);
     }
     disk_mount_manager_->UnmountPath(
         mount_path, UNMOUNT_OPTIONS_NONE,
diff --git a/chromeos/disks/suspend_unmount_manager.h b/chromeos/disks/suspend_unmount_manager.h
index a1ca775..353067b 100644
--- a/chromeos/disks/suspend_unmount_manager.h
+++ b/chromeos/disks/suspend_unmount_manager.h
@@ -23,8 +23,7 @@
     : public PowerManagerClient::Observer {
  public:
   // The ownership of these raw pointers still remains with the caller.
-  SuspendUnmountManager(DiskMountManager* disk_mount_manager,
-                        PowerManagerClient* power_manager_client);
+  explicit SuspendUnmountManager(DiskMountManager* disk_mount_manager);
   ~SuspendUnmountManager() override;
 
  private:
@@ -37,7 +36,6 @@
 
   // Callback passed to DiskMountManager holds weak pointers of this.
   DiskMountManager* const disk_mount_manager_;
-  PowerManagerClient* const power_manager_client_;
 
   // The paths that the manager currently tries to unmount for suspend.
   std::set<std::string> unmounting_paths_;
diff --git a/chromeos/disks/suspend_unmount_manager_unittest.cc b/chromeos/disks/suspend_unmount_manager_unittest.cc
index 084ce99..093a1af 100644
--- a/chromeos/disks/suspend_unmount_manager_unittest.cc
+++ b/chromeos/disks/suspend_unmount_manager_unittest.cc
@@ -50,7 +50,7 @@
 class SuspendUnmountManagerTest : public testing::Test {
  public:
   SuspendUnmountManagerTest()
-      : suspend_unmount_manager_(&disk_mount_manager_, &fake_power_client_) {}
+      : suspend_unmount_manager_(&disk_mount_manager_) {}
   ~SuspendUnmountManagerTest() override = default;
 
  protected:
diff --git a/chromeos/network/network_handler.cc b/chromeos/network/network_handler.cc
index 04d5a20..8bbb0f9 100644
--- a/chromeos/network/network_handler.cc
+++ b/chromeos/network/network_handler.cc
@@ -5,7 +5,6 @@
 #include "chromeos/network/network_handler.h"
 
 #include "base/threading/thread_task_runner_handle.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/network/auto_connect_handler.h"
 #include "chromeos/network/client_cert_resolver.h"
 #include "chromeos/network/geolocation_handler.h"
@@ -31,8 +30,6 @@
 
 NetworkHandler::NetworkHandler()
     : task_runner_(base::ThreadTaskRunnerHandle::Get()) {
-  CHECK(DBusThreadManager::IsInitialized());
-
   network_state_handler_.reset(new NetworkStateHandler());
   network_device_handler_.reset(new NetworkDeviceHandlerImpl());
   network_profile_handler_.reset(new NetworkProfileHandler());
diff --git a/chromeos/services/assistant/service.cc b/chromeos/services/assistant/service.cc
index 3d3f4a0a..0a5fade 100644
--- a/chromeos/services/assistant/service.cc
+++ b/chromeos/services/assistant/service.cc
@@ -77,7 +77,7 @@
   // TODO(xiaohuic): in MASH we will need to setup the dbus client if assistant
   // service runs in its own process.
   chromeos::PowerManagerClient* power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+      chromeos::PowerManagerClient::Get();
   power_manager_observer_.Add(power_manager_client);
   power_manager_client->RequestStatusUpdate();
 }
diff --git a/chromeos/services/assistant/service_unittest.cc b/chromeos/services/assistant/service_unittest.cc
index 7959633..01ee656c 100644
--- a/chromeos/services/assistant/service_unittest.cc
+++ b/chromeos/services/assistant/service_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/services/assistant/fake_assistant_manager_service_impl.h"
 #include "chromeos/services/assistant/public/mojom/constants.mojom.h"
@@ -165,14 +164,9 @@
     // which are irrelevant for these tests.
     test_connector_factory_.set_ignore_unknown_service_requests(true);
 
-    auto power_manager_client =
-        std::make_unique<chromeos::FakePowerManagerClient>();
-    power_manager_client->SetTabletMode(
-        chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
-    power_manager_client_ = power_manager_client.get();
-
-    auto dbus_setter = chromeos::DBusThreadManager::GetSetterForTesting();
-    dbus_setter->SetPowerManagerClient(std::move(power_manager_client));
+    PowerManagerClient::Initialize();
+    FakePowerManagerClient::Get()->SetTabletMode(
+        PowerManagerClient::TabletMode::OFF, base::TimeTicks());
 
     service_ = std::make_unique<Service>(
         test_connector_factory_.RegisterInstance(mojom::kServiceName),
@@ -202,6 +196,8 @@
             &url_loader_factory_);
     platform_.FlushForTesting();
     base::RunLoop().RunUntilIdle();
+
+    PowerManagerClient::Shutdown();
   }
 
   mojom::AssistantPlatform* GetPlatform() {
diff --git a/chromeos/system/dark_resume_controller.cc b/chromeos/system/dark_resume_controller.cc
index 159a4bb..eb04776 100644
--- a/chromeos/system/dark_resume_controller.cc
+++ b/chromeos/system/dark_resume_controller.cc
@@ -5,7 +5,6 @@
 
 #include <utility>
 
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "services/device/public/mojom/constants.mojom.h"
 #include "services/device/public/mojom/wake_lock_provider.mojom.h"
 
@@ -23,20 +22,17 @@
       weak_ptr_factory_(this) {
   connector_->BindInterface(device::mojom::kServiceName,
                             mojo::MakeRequest(&wake_lock_provider_));
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  PowerManagerClient::Get()->AddObserver(this);
 }
 
 DarkResumeController::~DarkResumeController() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 void DarkResumeController::DarkSuspendImminent() {
   DVLOG(1) << __func__;
-  suspend_readiness_cb_ = chromeos::DBusThreadManager::Get()
-                              ->GetPowerManagerClient()
-                              ->GetSuspendReadinessCallback(FROM_HERE);
+  suspend_readiness_cb_ =
+      PowerManagerClient::Get()->GetSuspendReadinessCallback(FROM_HERE);
   // Schedule task that will check for any wake locks acquired in dark resume.
   DCHECK(!wake_lock_check_timer_.IsRunning());
   wake_lock_check_timer_.Start(
diff --git a/chromeos/system/dark_resume_controller_unittest.cc b/chromeos/system/dark_resume_controller_unittest.cc
index 822150a..188e60f 100644
--- a/chromeos/system/dark_resume_controller_unittest.cc
+++ b/chromeos/system/dark_resume_controller_unittest.cc
@@ -9,7 +9,6 @@
 
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "services/device/public/cpp/test/test_wake_lock_provider.h"
 #include "services/device/public/mojom/constants.mojom.h"
@@ -33,23 +32,27 @@
       : scoped_task_environment_(
             base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME),
         wake_lock_provider_(
-            connector_factory_.RegisterInstance(device::mojom::kServiceName)) {
+            connector_factory_.RegisterInstance(device::mojom::kServiceName)) {}
+
+  ~DarkResumeControllerTest() override = default;
+
+  void SetUp() override {
     // Create wake lock that will be acquired and released in tests.
     wake_lock_provider_.GetWakeLockWithoutContext(
         WakeLockType::kPreventDisplaySleepAllowDimming,
         device::mojom::WakeLockReason::kOther, kWakeLockDescription,
         mojo::MakeRequest(&wake_lock_));
 
-    // Create fake power manager to simulate power events.
-    fake_power_manager_client_ = new chromeos::FakePowerManagerClient;
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        base::WrapUnique(fake_power_manager_client_));
+    PowerManagerClient::Initialize();
 
     dark_resume_controller_ = std::make_unique<DarkResumeController>(
         connector_factory_.GetDefaultConnector());
   }
 
-  ~DarkResumeControllerTest() override {}
+  void TearDown() override {
+    dark_resume_controller_.reset();
+    PowerManagerClient::Shutdown();
+  }
 
  protected:
   // Returns the number of active wake locks of type |type|.
@@ -68,9 +71,11 @@
     return result_count;
   }
 
+  FakePowerManagerClient* fake_power_manager_client() {
+    return FakePowerManagerClient::Get();
+  }
+
   base::test::ScopedTaskEnvironment scoped_task_environment_;
-  // Owned by chromeos::DBusThreadManager.
-  chromeos::FakePowerManagerClient* fake_power_manager_client_;
   service_manager::TestConnectorFactory connector_factory_;
   device::mojom::WakeLockPtr wake_lock_;
   std::unique_ptr<DarkResumeController> dark_resume_controller_;
@@ -84,19 +89,19 @@
 TEST_F(DarkResumeControllerTest, CheckSuspendAfterDarkResumeNoWakeLocksHeld) {
   // Trigger a dark resume event, move time forward to trigger a wake lock check
   // and check if a re-suspend happened if no wake locks were acquired.
-  fake_power_manager_client_->SendDarkSuspendImminent();
+  fake_power_manager_client()->SendDarkSuspendImminent();
   scoped_task_environment_.FastForwardBy(
       DarkResumeController::kDarkResumeWakeLockCheckTimeout);
   base::RunLoop run_loop;
   run_loop.RunUntilIdle();
   EXPECT_TRUE(dark_resume_controller_->IsDarkResumeStateClearedForTesting());
   EXPECT_EQ(
-      0, fake_power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+      0, fake_power_manager_client()->GetNumPendingSuspendReadinessCallbacks());
 
   // Trigger a dark resume event, acquire and release a wake lock and move time
   // forward to trigger a wake lock check. The device should re-suspend in this
   // case since no wake locks were held at the time of the wake lock check.
-  fake_power_manager_client_->SendDarkSuspendImminent();
+  fake_power_manager_client()->SendDarkSuspendImminent();
   wake_lock_->RequestWakeLock();
   wake_lock_->CancelWakeLock();
   scoped_task_environment_.FastForwardBy(
@@ -105,7 +110,7 @@
   run_loop2.RunUntilIdle();
   EXPECT_TRUE(dark_resume_controller_->IsDarkResumeStateClearedForTesting());
   EXPECT_EQ(
-      0, fake_power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+      0, fake_power_manager_client()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 TEST_F(DarkResumeControllerTest, CheckSuspendAfterDarkResumeWakeLocksHeld) {
@@ -113,7 +118,7 @@
   // wake lock check. At this point the system shouldn't re-suspend i.e. the
   // suspend readiness callback should be set and wake lock release should have
   // observers.
-  fake_power_manager_client_->SendDarkSuspendImminent();
+  fake_power_manager_client()->SendDarkSuspendImminent();
   wake_lock_->RequestWakeLock();
   scoped_task_environment_.FastForwardBy(
       DarkResumeController::kDarkResumeWakeLockCheckTimeout);
@@ -131,7 +136,7 @@
   run_loop2.RunUntilIdle();
   EXPECT_TRUE(dark_resume_controller_->IsDarkResumeStateClearedForTesting());
   EXPECT_EQ(
-      0, fake_power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+      0, fake_power_manager_client()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 TEST_F(DarkResumeControllerTest, CheckSuspendAfterDarkResumeHardTimeout) {
@@ -139,7 +144,7 @@
   // wake lock check. At this point the system shouldn't re-suspend i.e. the
   // suspend readiness callback should be set and wake lock release should have
   // observers.
-  fake_power_manager_client_->SendDarkSuspendImminent();
+  fake_power_manager_client()->SendDarkSuspendImminent();
   wake_lock_->RequestWakeLock();
   scoped_task_environment_.FastForwardBy(
       DarkResumeController::kDarkResumeWakeLockCheckTimeout);
@@ -157,7 +162,7 @@
   run_loop2.RunUntilIdle();
   EXPECT_TRUE(dark_resume_controller_->IsDarkResumeStateClearedForTesting());
   EXPECT_EQ(
-      0, fake_power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+      0, fake_power_manager_client()->GetNumPendingSuspendReadinessCallbacks());
 }
 
 TEST_F(DarkResumeControllerTest, CheckStateResetAfterSuspendDone) {
@@ -165,7 +170,7 @@
   // wake lock check. At this point the system shouldn't re-suspend i.e. the
   // suspend readiness callback should be set and wake lock release should have
   // observers.
-  fake_power_manager_client_->SendDarkSuspendImminent();
+  fake_power_manager_client()->SendDarkSuspendImminent();
   wake_lock_->RequestWakeLock();
   scoped_task_environment_.FastForwardBy(
       DarkResumeController::kDarkResumeWakeLockCheckTimeout);
@@ -175,7 +180,7 @@
 
   // Trigger suspend done event. Check if state is reset as dark resume would be
   // exited.
-  fake_power_manager_client_->SendSuspendDone();
+  fake_power_manager_client()->SendSuspendDone();
   EXPECT_TRUE(dark_resume_controller_->IsDarkResumeStateClearedForTesting());
 }
 
diff --git a/components/arc/metrics/arc_metrics_service.cc b/components/arc/metrics/arc_metrics_service.cc
index 5abea4e..b5ef30f 100644
--- a/components/arc/metrics/arc_metrics_service.cc
+++ b/components/arc/metrics/arc_metrics_service.cc
@@ -151,8 +151,7 @@
   arc_bridge_service_->process()->AddObserver(&process_observer_);
   arc_window_delegate_->RegisterActivationChangeObserver();
   session_manager::SessionManager::Get()->AddObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
 
   DCHECK(pref_service_);
   RestoreEngagementTimeFromPrefs();
@@ -171,8 +170,7 @@
   UpdateEngagementTime();
   SaveEngagementTimeToPrefs();
 
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
   session_manager::SessionManager::Get()->RemoveObserver(this);
   arc_window_delegate_->UnregisterActivationChangeObserver();
   arc_bridge_service_->process()->RemoveObserver(&process_observer_);
diff --git a/components/arc/metrics/arc_metrics_service_unittest.cc b/components/arc/metrics/arc_metrics_service_unittest.cc
index a5e6466..5f86cf1 100644
--- a/components/arc/metrics/arc_metrics_service_unittest.cc
+++ b/components/arc/metrics/arc_metrics_service_unittest.cc
@@ -128,11 +128,11 @@
     // Set fake clients for testing.
     dbus_thread_manager_setter->SetSessionManagerClient(
         std::make_unique<chromeos::FakeSessionManagerClient>());
-    dbus_thread_manager_setter->SetPowerManagerClient(
-        std::make_unique<chromeos::FakePowerManagerClient>());
+    chromeos::PowerManagerClient::Initialize();
   }
 
   ~DBusThreadManagerLifetimeHelper() {
+    chromeos::PowerManagerClient::Shutdown();
     // Destroy the global DBusThreadManager instance.
     chromeos::DBusThreadManager::Shutdown();
   }
@@ -233,7 +233,7 @@
 
   chromeos::FakePowerManagerClient* GetPowerManagerClient() {
     return static_cast<chromeos::FakePowerManagerClient*>(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+        chromeos::PowerManagerClient::Get());
   }
 
   content::TestBrowserThreadBundle thread_bundle_;
diff --git a/components/arc/power/arc_power_bridge.cc b/components/arc/power/arc_power_bridge.cc
index 268d86f..518fc56 100644
--- a/components/arc/power/arc_power_bridge.cc
+++ b/components/arc/power/arc_power_bridge.cc
@@ -153,21 +153,17 @@
   // TODO(mash): Support this functionality without ash::Shell access in Chrome.
   if (ash::Shell::HasInstance())
     ash::Shell::Get()->display_configurator()->AddObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->GetScreenBrightnessPercent(
-          base::BindOnce(&ArcPowerBridge::OnGetScreenBrightnessPercent,
-                         weak_ptr_factory_.GetWeakPtr()));
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
+  chromeos::PowerManagerClient::Get()->GetScreenBrightnessPercent(
+      base::BindOnce(&ArcPowerBridge::OnGetScreenBrightnessPercent,
+                     weak_ptr_factory_.GetWeakPtr()));
 }
 
 void ArcPowerBridge::OnConnectionClosed() {
   // TODO(mash): Support this functionality without ash::Shell access in Chrome.
   if (ash::Shell::HasInstance())
     ash::Shell::Get()->display_configurator()->RemoveObserver(this);
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
   wake_lock_requestors_.clear();
 }
 
@@ -178,9 +174,9 @@
   if (!power_instance)
     return;
 
-  power_instance->Suspend(chromeos::DBusThreadManager::Get()
-                              ->GetPowerManagerClient()
-                              ->GetSuspendReadinessCallback(FROM_HERE));
+  power_instance->Suspend(
+      chromeos::PowerManagerClient::Get()->GetSuspendReadinessCallback(
+          FROM_HERE));
 }
 
 void ArcPowerBridge::SuspendDone(const base::TimeDelta& sleep_duration) {
@@ -270,9 +266,7 @@
       power_manager::SetBacklightBrightnessRequest_Transition_GRADUAL);
   request.set_cause(
       power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST);
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->SetScreenBrightness(request);
+  chromeos::PowerManagerClient::Get()->SetScreenBrightness(request);
 }
 
 ArcPowerBridge::WakeLockRequestor* ArcPowerBridge::GetWakeLockRequestor(
diff --git a/components/arc/power/arc_power_bridge_unittest.cc b/components/arc/power/arc_power_bridge_unittest.cc
index 68695a4..f6dc18d 100644
--- a/components/arc/power/arc_power_bridge_unittest.cc
+++ b/components/arc/power/arc_power_bridge_unittest.cc
@@ -8,7 +8,6 @@
 
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
 #include "components/arc/arc_bridge_service.h"
@@ -30,11 +29,12 @@
   // Initial screen brightness percent for the Chrome OS power manager.
   static constexpr double kInitialBrightness = 100.0;
 
-  ArcPowerBridgeTest() {
-    chromeos::DBusThreadManager::Initialize();
-    power_manager_client_ = static_cast<chromeos::FakePowerManagerClient*>(
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
-    power_manager_client_->set_screen_brightness_percent(kInitialBrightness);
+  ArcPowerBridgeTest() = default;
+  ~ArcPowerBridgeTest() override = default;
+
+  void SetUp() override {
+    chromeos::PowerManagerClient::Initialize();
+    power_manager_client()->set_screen_brightness_percent(kInitialBrightness);
 
     wake_lock_provider_ = std::make_unique<device::TestWakeLockProvider>(
         connector_factory_.RegisterInstance(device::mojom::kServiceName));
@@ -47,10 +47,10 @@
     CreatePowerInstance();
   }
 
-  ~ArcPowerBridgeTest() override {
+  void TearDown() override {
     DestroyPowerInstance();
     power_bridge_.reset();
-    chromeos::DBusThreadManager::Shutdown();
+    chromeos::PowerManagerClient::Shutdown();
   }
 
  protected:
@@ -98,12 +98,14 @@
     return result_count;
   }
 
+  chromeos::FakePowerManagerClient* power_manager_client() {
+    return chromeos::FakePowerManagerClient::Get();
+  }
+
   base::test::ScopedTaskEnvironment scoped_task_environment_;
 
   service_manager::TestConnectorFactory connector_factory_;
 
-  chromeos::FakePowerManagerClient* power_manager_client_;  // Not owned.
-
   std::unique_ptr<ArcBridgeService> bridge_service_;
   std::unique_ptr<FakePowerInstance> power_instance_;
   std::unique_ptr<ArcPowerBridge> power_bridge_;
@@ -121,26 +123,29 @@
   // When powerd notifies Chrome that the system is about to suspend,
   // ArcPowerBridge should notify Android and take a suspend readiness callback
   // to defer the suspend operation.
-  power_manager_client_->SendSuspendImminent(
+  power_manager_client()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
   EXPECT_EQ(1, power_instance_->num_suspend());
   EXPECT_EQ(0, power_instance_->num_resume());
-  EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(1,
+            power_manager_client()->GetNumPendingSuspendReadinessCallbacks());
 
   // Simulate Android acknowledging that it's ready for the system to suspend.
   power_instance_->GetSuspendCallback().Run();
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
+  EXPECT_EQ(0,
+            power_manager_client()->GetNumPendingSuspendReadinessCallbacks());
 
-  power_manager_client_->SendSuspendDone();
+  power_manager_client()->SendSuspendDone();
   EXPECT_EQ(1, power_instance_->num_suspend());
   EXPECT_EQ(1, power_instance_->num_resume());
 
   // We shouldn't crash if the instance isn't ready.
   DestroyPowerInstance();
-  power_manager_client_->SendSuspendImminent(
+  power_manager_client()->SendSuspendImminent(
       power_manager::SuspendImminent_Reason_OTHER);
-  EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks());
-  power_manager_client_->SendSuspendDone();
+  EXPECT_EQ(0,
+            power_manager_client()->GetNumPendingSuspendReadinessCallbacks());
+  power_manager_client()->SendSuspendDone();
 }
 
 TEST_F(ArcPowerBridgeTest, SetInteractive) {
@@ -162,24 +167,24 @@
 
   // Check that Chrome OS brightness changes are passed to Android.
   const double kUpdatedBrightness = 45.0;
-  power_manager_client_->set_screen_brightness_percent(kUpdatedBrightness);
+  power_manager_client()->set_screen_brightness_percent(kUpdatedBrightness);
   power_manager::BacklightBrightnessChange change;
   change.set_percent(kUpdatedBrightness);
   change.set_cause(power_manager::BacklightBrightnessChange_Cause_USER_REQUEST);
-  power_manager_client_->SendScreenBrightnessChanged(change);
+  power_manager_client()->SendScreenBrightnessChanged(change);
   EXPECT_DOUBLE_EQ(kUpdatedBrightness, power_instance_->screen_brightness());
 
   // Requests from Android should update the Chrome OS brightness.
   const double kAndroidBrightness = 70.0;
   power_bridge_->OnScreenBrightnessUpdateRequest(kAndroidBrightness);
   EXPECT_DOUBLE_EQ(kAndroidBrightness,
-                   power_manager_client_->screen_brightness_percent());
+                   power_manager_client()->screen_brightness_percent());
 
   // To prevent battles between Chrome OS and Android, the updated brightness
   // shouldn't be passed to Android immediately, but it should be passed after
   // the timer fires.
   change.set_percent(kAndroidBrightness);
-  power_manager_client_->SendScreenBrightnessChanged(change);
+  power_manager_client()->SendScreenBrightnessChanged(change);
   EXPECT_DOUBLE_EQ(kUpdatedBrightness, power_instance_->screen_brightness());
   ASSERT_TRUE(power_bridge_->TriggerNotifyBrightnessTimerForTesting());
   EXPECT_DOUBLE_EQ(kAndroidBrightness, power_instance_->screen_brightness());
diff --git a/components/arc/timer/arc_timer_bridge.cc b/components/arc/timer/arc_timer_bridge.cc
index a545c7b..fffe9ed0 100644
--- a/components/arc/timer/arc_timer_bridge.cc
+++ b/components/arc/timer/arc_timer_bridge.cc
@@ -141,8 +141,7 @@
     requests.emplace_back(clock_id, std::move(expiration_fd));
     clock_ids.emplace_back(clock_id);
   }
-
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->CreateArcTimers(
+  chromeos::PowerManagerClient::Get()->CreateArcTimers(
       kTag, std::move(requests),
       base::BindOnce(&ArcTimerBridge::OnCreateArcTimers,
                      weak_ptr_factory_.GetWeakPtr(), std::move(clock_ids),
@@ -158,13 +157,13 @@
     std::move(callback).Run(mojom::ArcTimerResult::FAILURE);
     return;
   }
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->StartArcTimer(
+  chromeos::PowerManagerClient::Get()->StartArcTimer(
       timer_id.value(), absolute_expiration_time,
       base::BindOnce(&OnStartTimer, std::move(callback)));
 }
 
 void ArcTimerBridge::DeleteArcTimers() {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->DeleteArcTimers(
+  chromeos::PowerManagerClient::Get()->DeleteArcTimers(
       kTag, base::BindOnce(&ArcTimerBridge::OnDeleteArcTimers,
                            weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/components/arc/timer/arc_timer_bridge_unittest.cc b/components/arc/timer/arc_timer_bridge_unittest.cc
index ef95f1c..7f126b3 100644
--- a/components/arc/timer/arc_timer_bridge_unittest.cc
+++ b/components/arc/timer/arc_timer_bridge_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/posix/unix_domain_socket.h"
 #include "base/run_loop.h"
 #include "base/time/time.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager_client.h"
 #include "components/arc/arc_bridge_service.h"
 #include "components/arc/arc_service_manager.h"
@@ -91,7 +90,7 @@
  public:
   ArcTimerTest()
       : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
-    chromeos::DBusThreadManager::Initialize();
+    chromeos::PowerManagerClient::Initialize();
     timer_bridge_ = ArcTimerBridge::GetForBrowserContextForTesting(&context_);
     // This results in ArcTimerBridge::OnInstanceReady being called.
     ArcServiceManager::Get()->arc_bridge_service()->timer()->SetInstance(
@@ -106,7 +105,7 @@
     ArcServiceManager::Get()->arc_bridge_service()->timer()->CloseInstance(
         &timer_instance_);
     timer_bridge_->Shutdown();
-    chromeos::DBusThreadManager::Shutdown();
+    chromeos::PowerManagerClient::Shutdown();
   }
 
  protected:
diff --git a/components/metrics/net/network_metrics_provider_unittest.cc b/components/metrics/net/network_metrics_provider_unittest.cc
index ef2e586..d1296a9 100644
--- a/components/metrics/net/network_metrics_provider_unittest.cc
+++ b/components/metrics/net/network_metrics_provider_unittest.cc
@@ -35,15 +35,27 @@
  public:
  protected:
   NetworkMetricsProviderTest()
-      : test_thread_bundle_(TestThreadBundle::IO_MAINLOOP) {
+      : test_thread_bundle_(TestThreadBundle::IO_MAINLOOP) {}
+  ~NetworkMetricsProviderTest() override {}
+
+  void SetUp() override {
 #if defined(OS_CHROMEOS)
     chromeos::DBusThreadManager::Initialize();
     chromeos::NetworkHandler::Initialize();
 #endif  // OS_CHROMEOS
   }
 
+  void TearDown() override {
+#if defined(OS_CHROMEOS)
+    chromeos::NetworkHandler::Shutdown();
+    chromeos::DBusThreadManager::Shutdown();
+#endif  // OS_CHROMEOS
+  }
+
  private:
   TestThreadBundle test_thread_bundle_;
+
+  DISALLOW_COPY_AND_ASSIGN(NetworkMetricsProviderTest);
 };
 
 // Verifies that the effective connection type is correctly set.
diff --git a/extensions/browser/api/system_power_source/system_power_source_api.cc b/extensions/browser/api/system_power_source/system_power_source_api.cc
index 63a281a..cb5f912 100644
--- a/extensions/browser/api/system_power_source/system_power_source_api.cc
+++ b/extensions/browser/api/system_power_source/system_power_source_api.cc
@@ -7,7 +7,6 @@
 #include <cmath>
 
 #include "base/no_destructor.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager_client.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/common/api/system_power_source.h"
@@ -91,9 +90,7 @@
 
 SystemPowerSourceAPI::SystemPowerSourceAPI(content::BrowserContext* context)
     : browser_context_(context), power_manager_observer_(this) {
-  chromeos::PowerManagerClient* power_manager_client =
-      chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
-  power_manager_observer_.Add(power_manager_client);
+  power_manager_observer_.Add(chromeos::PowerManagerClient::Get());
 }
 
 SystemPowerSourceAPI::~SystemPowerSourceAPI() = default;
@@ -123,9 +120,8 @@
 ExtensionFunction::ResponseAction
 SystemPowerSourceGetPowerSourceInfoFunction::Run() {
   const base::Optional<power_manager::PowerSupplyProperties>&
-      power_supply_properties = chromeos::DBusThreadManager::Get()
-                                    ->GetPowerManagerClient()
-                                    ->GetLastStatus();
+      power_supply_properties =
+          chromeos::PowerManagerClient::Get()->GetLastStatus();
 
   if (!power_supply_properties.has_value())
     return RespondNow(NoArguments());
@@ -143,9 +139,7 @@
 
 ExtensionFunction::ResponseAction
 SystemPowerSourceRequestStatusUpdateFunction::Run() {
-  chromeos::DBusThreadManager::Get()
-      ->GetPowerManagerClient()
-      ->RequestStatusUpdate();
+  chromeos::PowerManagerClient::Get()->RequestStatusUpdate();
   return RespondNow(NoArguments());
 }
 
diff --git a/extensions/browser/api/system_power_source/system_power_source_api_unittest.cc b/extensions/browser/api/system_power_source/system_power_source_api_unittest.cc
index 82d5706..e7d50ac 100644
--- a/extensions/browser/api/system_power_source/system_power_source_api_unittest.cc
+++ b/extensions/browser/api/system_power_source/system_power_source_api_unittest.cc
@@ -5,7 +5,6 @@
 #include <limits>
 
 #include "base/bind.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "extensions/browser/api/system_power_source/system_power_source_api.h"
 #include "extensions/browser/api_test_utils.h"
@@ -25,19 +24,17 @@
 
 class SystemPowerSourceApiUnitTest : public ApiUnitTest {
  public:
-  SystemPowerSourceApiUnitTest() {
-    auto power_manager_client =
-        std::make_unique<chromeos::FakePowerManagerClient>();
-    power_manager_client_ = power_manager_client.get();
+  SystemPowerSourceApiUnitTest() = default;
+  ~SystemPowerSourceApiUnitTest() override = default;
 
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::move(power_manager_client));
-
-    chromeos::DBusThreadManager::Initialize();
+  void SetUp() override {
+    ApiUnitTest::SetUp();
+    chromeos::PowerManagerClient::Initialize();
   }
 
-  ~SystemPowerSourceApiUnitTest() override {
-    chromeos::DBusThreadManager::Shutdown();
+  void TearDown() override {
+    chromeos::PowerManagerClient::Shutdown();
+    ApiUnitTest::TearDown();
   }
 
   std::unique_ptr<base::Value> RunGetPowerSourceInfoFunction() {
@@ -63,8 +60,11 @@
         request_status_update_function.get(), "[]", browser_context());
   }
 
-  chromeos::FakePowerManagerClient* power_manager_client_;
+  chromeos::FakePowerManagerClient* power_manager_client() {
+    return chromeos::FakePowerManagerClient::Get();
+  }
 
+ private:
   DISALLOW_COPY_AND_ASSIGN(SystemPowerSourceApiUnitTest);
 };
 
@@ -130,7 +130,7 @@
 
 // Barrel jack connected
 TEST_F(SystemPowerSourceApiUnitTest, GetPowerSourceAc) {
-  power_manager_client_->UpdatePowerProperties(MakePowerSupplyProperties(
+  power_manager_client()->UpdatePowerProperties(MakePowerSupplyProperties(
       "AC",
       {MakePowerSource(
           "AC", power_manager::PowerSupplyProperties_PowerSource_Type_MAINS,
@@ -152,7 +152,7 @@
 
 // USB-C PD charger connected
 TEST_F(SystemPowerSourceApiUnitTest, GetPowerSourceUsb) {
-  power_manager_client_->UpdatePowerProperties(MakePowerSupplyProperties(
+  power_manager_client()->UpdatePowerProperties(MakePowerSupplyProperties(
       "CROS_USB_PD_CHARGER0",
       {{MakePowerSource(
           "CROS_USB_PD_CHARGER0",
@@ -175,7 +175,7 @@
 
 // Barrel Jack + USB-C PD charger connected; Barrel Jack active
 TEST_F(SystemPowerSourceApiUnitTest, GetPowerSourceAcActiveAndUsbInactive) {
-  power_manager_client_->UpdatePowerProperties(MakePowerSupplyProperties(
+  power_manager_client()->UpdatePowerProperties(MakePowerSupplyProperties(
       "AC",
       {{MakePowerSource(
             "AC", power_manager::PowerSupplyProperties_PowerSource_Type_MAINS,
@@ -206,7 +206,7 @@
 
 // Barrel Jack + USB-C PD charger connected; USB-C charger active
 TEST_F(SystemPowerSourceApiUnitTest, GetPowerSourceAcInactiveAndUsbActive) {
-  power_manager_client_->UpdatePowerProperties(MakePowerSupplyProperties(
+  power_manager_client()->UpdatePowerProperties(MakePowerSupplyProperties(
       "CROS_USB_PD_CHARGER0",
       {{MakePowerSource(
             "AC", power_manager::PowerSupplyProperties_PowerSource_Type_MAINS,
@@ -237,7 +237,7 @@
 
 // Barrel Jack + USB-C PD charger connected; neither active
 TEST_F(SystemPowerSourceApiUnitTest, GetPowerSourceNoneActive) {
-  power_manager_client_->UpdatePowerProperties(MakePowerSupplyProperties(
+  power_manager_client()->UpdatePowerProperties(MakePowerSupplyProperties(
       base::nullopt,
       {{MakePowerSource(
             "AC", power_manager::PowerSupplyProperties_PowerSource_Type_MAINS,
@@ -271,7 +271,7 @@
 // finger-printing).  Chargers with a max power that is not a normal value
 // larger than zero are reported as not having a max power value.
 TEST_F(SystemPowerSourceApiUnitTest, GetPowerSourceRounding) {
-  power_manager_client_->UpdatePowerProperties(MakePowerSupplyProperties(
+  power_manager_client()->UpdatePowerProperties(MakePowerSupplyProperties(
       "CROS_USB_PD_CHARGER0",
       {{MakePowerSource(
             "CROS_USB_PD_CHARGER0",
@@ -346,7 +346,7 @@
           base::BindRepeating(&TestEventRouterFactoryFunction)));
   SystemPowerSourceAPI system_power_source_api(browser_context());
 
-  power_manager_client_->UpdatePowerProperties(MakePowerSupplyProperties(
+  power_manager_client()->UpdatePowerProperties(MakePowerSupplyProperties(
       "AC",
       {MakePowerSource(
           "AC", power_manager::PowerSupplyProperties_PowerSource_Type_MAINS,
@@ -371,7 +371,7 @@
           base::BindRepeating(&TestEventRouterFactoryFunction)));
   SystemPowerSourceAPI system_power_source_api(browser_context());
 
-  power_manager_client_->UpdatePowerProperties(MakePowerSupplyProperties(
+  power_manager_client()->UpdatePowerProperties(MakePowerSupplyProperties(
       "AC",
       {MakePowerSource(
           "AC", power_manager::PowerSupplyProperties_PowerSource_Type_MAINS,
diff --git a/extensions/browser/api/system_power_source/system_power_source_apitest.cc b/extensions/browser/api/system_power_source/system_power_source_apitest.cc
index 5f99c76..89a6251 100644
--- a/extensions/browser/api/system_power_source/system_power_source_apitest.cc
+++ b/extensions/browser/api/system_power_source/system_power_source_apitest.cc
@@ -6,7 +6,6 @@
 #include <utility>
 
 #include "base/macros.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
 #include "extensions/common/features/feature_session_type.h"
@@ -17,42 +16,28 @@
 
 namespace {
 
-class SystemPowerSourceApiTest : public ShellApiTest {
- public:
-  SystemPowerSourceApiTest()
-      : session_type_(
-            ScopedCurrentFeatureSessionType(FeatureSessionType::KIOSK)) {
-    auto power_manager_client =
-        std::make_unique<chromeos::FakePowerManagerClient>();
-
-    // These values must match the assertions in
-    // extensions/test/data/api_test/system_power_source/api/background.js.
-    power_manager::PowerSupplyProperties_PowerSource power_source;
-    power_source.set_id("AC");
-    power_source.set_type(
-        power_manager::PowerSupplyProperties_PowerSource_Type_MAINS);
-    power_source.set_max_power(0);
-
-    power_manager::PowerSupplyProperties props;
-    props.set_external_power_source_id("AC");
-    *props.add_available_external_power_source() = power_source;
-
-    power_manager_client->UpdatePowerProperties(props);
-
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
-        std::move(power_manager_client));
-  }
-
-  ~SystemPowerSourceApiTest() override = default;
-
- private:
-  std::unique_ptr<base::AutoReset<FeatureSessionType>> session_type_;
-  DISALLOW_COPY_AND_ASSIGN(SystemPowerSourceApiTest);
-};
+using SystemPowerSourceApiTest = ShellApiTest;
 
 }  // namespace
 
 IN_PROC_BROWSER_TEST_F(SystemPowerSourceApiTest, TestAllApiFunctions) {
+  std::unique_ptr<base::AutoReset<FeatureSessionType>> session_type =
+      ScopedCurrentFeatureSessionType(FeatureSessionType::KIOSK);
+
+  // These values must match the assertions in
+  // extensions/test/data/api_test/system_power_source/api/background.js.
+  power_manager::PowerSupplyProperties_PowerSource power_source;
+  power_source.set_id("AC");
+  power_source.set_type(
+      power_manager::PowerSupplyProperties_PowerSource_Type_MAINS);
+  power_source.set_max_power(0);
+
+  power_manager::PowerSupplyProperties props;
+  props.set_external_power_source_id("AC");
+  *props.add_available_external_power_source() = power_source;
+
+  chromeos::FakePowerManagerClient::Get()->UpdatePowerProperties(props);
+
   EXPECT_TRUE(RunAppTest("api_test/system_power_source/api"));
 }
 
diff --git a/extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc b/extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc
index d6e61de..2ea95e6 100644
--- a/extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc
+++ b/extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc
@@ -9,7 +9,6 @@
 #include "extensions/shell/browser/shell_extension_system.h"
 
 #if defined(OS_CHROMEOS)
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power_manager_client.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 #endif
@@ -55,12 +54,13 @@
 bool ShellRuntimeAPIDelegate::RestartDevice(std::string* error_message) {
 // We allow chrome.runtime.restart() to request a device restart on ChromeOS.
 #if defined(OS_CHROMEOS)
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(
+  chromeos::PowerManagerClient::Get()->RequestRestart(
       power_manager::REQUEST_RESTART_OTHER, "AppShell chrome.runtime API");
   return true;
-#endif
+#else
   *error_message = "Restart is only supported on ChromeOS.";
   return false;
+#endif
 }
 
 }  // namespace extensions
diff --git a/extensions/shell/browser/shell_browser_main_parts.cc b/extensions/shell/browser/shell_browser_main_parts.cc
index 94220ee..781c851 100644
--- a/extensions/shell/browser/shell_browser_main_parts.cc
+++ b/extensions/shell/browser/shell_browser_main_parts.cc
@@ -65,6 +65,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #elif defined(OS_LINUX)
 #include "device/bluetooth/dbus/bluez_dbus_thread_manager.h"
 #endif
@@ -123,6 +124,8 @@
   // helper classes so those classes' tests can initialize stub versions of the
   // D-Bus objects.
   chromeos::DBusThreadManager::Initialize();
+  chromeos::PowerManagerClient::Initialize(
+      chromeos::DBusThreadManager::Get()->GetSystemBus());
   chromeos::disks::DiskMountManager::Initialize();
 
   bluez::BluezDBusManager::Initialize();
@@ -308,6 +311,7 @@
   chromeos::disks::DiskMountManager::Shutdown();
   device::BluetoothAdapterFactory::Shutdown();
   bluez::BluezDBusManager::Shutdown();
+  chromeos::PowerManagerClient::Shutdown();
   chromeos::DBusThreadManager::Shutdown();
 #elif defined(OS_LINUX)
   device::BluetoothAdapterFactory::Shutdown();
diff --git a/extensions/shell/browser/shell_desktop_controller_aura.cc b/extensions/shell/browser/shell_desktop_controller_aura.cc
index 160283d..618e423 100644
--- a/extensions/shell/browser/shell_desktop_controller_aura.cc
+++ b/extensions/shell/browser/shell_desktop_controller_aura.cc
@@ -33,7 +33,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "base/command_line.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "extensions/shell/browser/shell_screen.h"
 #include "extensions/shell/common/switches.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
@@ -141,8 +141,7 @@
   extensions::AppWindowClient::Set(app_window_client_.get());
 
 #if defined(OS_CHROMEOS)
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
   display_configurator_.reset(new display::DisplayConfigurator);
   display_configurator_->Init(
       ui::OzonePlatform::GetInstance()->CreateNativeDisplayDelegate(), false);
@@ -156,8 +155,7 @@
 ShellDesktopControllerAura::~ShellDesktopControllerAura() {
   TearDownWindowManager();
 #if defined(OS_CHROMEOS)
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 #endif
   extensions::AppWindowClient::Set(NULL);
 }
@@ -213,10 +211,8 @@
     bool down,
     const base::TimeTicks& timestamp) {
   if (down) {
-    chromeos::DBusThreadManager::Get()
-        ->GetPowerManagerClient()
-        ->RequestShutdown(power_manager::REQUEST_SHUTDOWN_FOR_USER,
-                          "AppShell power button");
+    chromeos::PowerManagerClient::Get()->RequestShutdown(
+        power_manager::REQUEST_SHUTDOWN_FOR_USER, "AppShell power button");
   }
 }
 
diff --git a/extensions/shell/browser/shell_desktop_controller_aura_unittest.cc b/extensions/shell/browser/shell_desktop_controller_aura_unittest.cc
index bc063ac..a68584c 100644
--- a/extensions/shell/browser/shell_desktop_controller_aura_unittest.cc
+++ b/extensions/shell/browser/shell_desktop_controller_aura_unittest.cc
@@ -36,7 +36,6 @@
 #include "ui/gfx/geometry/rect.h"
 
 #if defined(OS_CHROMEOS)
-#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #endif
 
@@ -44,22 +43,10 @@
 
 class ShellDesktopControllerAuraTest : public ShellTestBaseAura {
  public:
-  ShellDesktopControllerAuraTest()
-#if defined(OS_CHROMEOS)
-      : power_manager_client_(NULL)
-#endif
-      {
-  }
-  ~ShellDesktopControllerAuraTest() override {}
+  ShellDesktopControllerAuraTest() = default;
+  ~ShellDesktopControllerAuraTest() override = default;
 
   void SetUp() override {
-#if defined(OS_CHROMEOS)
-    std::unique_ptr<chromeos::DBusThreadManagerSetter> dbus_setter =
-        chromeos::DBusThreadManager::GetSetterForTesting();
-    power_manager_client_ = new chromeos::FakePowerManagerClient();
-    dbus_setter->SetPowerManagerClient(base::WrapUnique(power_manager_client_));
-#endif
-
     ShellTestBaseAura::SetUp();
 
     // Set up a screen with 2 displays.
@@ -72,18 +59,22 @@
         display::Display(200, gfx::Rect(1920, 1080, 800, 600)),
         display::DisplayList::Type::NOT_PRIMARY);
 
+#if defined(OS_CHROMEOS)
+    chromeos::PowerManagerClient::Initialize();
+#endif
+
     controller_ =
         std::make_unique<ShellDesktopControllerAura>(browser_context());
   }
 
   void TearDown() override {
     controller_.reset();
+#if defined(OS_CHROMEOS)
+    chromeos::PowerManagerClient::Shutdown();
+#endif
     screen_.reset();
     display::Screen::SetScreenInstance(nullptr);
     ShellTestBaseAura::TearDown();
-#if defined(OS_CHROMEOS)
-    chromeos::DBusThreadManager::Shutdown();
-#endif
   }
 
  protected:
@@ -98,10 +89,6 @@
   std::unique_ptr<display::ScreenBase> screen_;
   std::unique_ptr<ShellDesktopControllerAura> controller_;
 
-#if defined(OS_CHROMEOS)
-  chromeos::FakePowerManagerClient* power_manager_client_;  // Not owned.
-#endif
-
  private:
   DISALLOW_COPY_AND_ASSIGN(ShellDesktopControllerAuraTest);
 };
@@ -111,14 +98,15 @@
 // button is pressed.
 TEST_F(ShellDesktopControllerAuraTest, PowerButton) {
   // Ignore button releases.
-  power_manager_client_->SendPowerButtonEvent(false /* down */,
-                                              base::TimeTicks());
-  EXPECT_EQ(0, power_manager_client_->num_request_shutdown_calls());
+  auto* power_manager_client = chromeos::FakePowerManagerClient::Get();
+  power_manager_client->SendPowerButtonEvent(false /* down */,
+                                             base::TimeTicks());
+  EXPECT_EQ(0, power_manager_client->num_request_shutdown_calls());
 
   // A button press should trigger a shutdown request.
-  power_manager_client_->SendPowerButtonEvent(true /* down */,
-                                              base::TimeTicks());
-  EXPECT_EQ(1, power_manager_client_->num_request_shutdown_calls());
+  power_manager_client->SendPowerButtonEvent(true /* down */,
+                                             base::TimeTicks());
+  EXPECT_EQ(1, power_manager_client->num_request_shutdown_calls());
 }
 #endif
 
diff --git a/media/capture/video/chromeos/video_capture_device_chromeos_halv3.cc b/media/capture/video/chromeos/video_capture_device_chromeos_halv3.cc
index 9b67f89..7a28990 100644
--- a/media/capture/video/chromeos/video_capture_device_chromeos_halv3.cc
+++ b/media/capture/video/chromeos/video_capture_device_chromeos_halv3.cc
@@ -48,16 +48,14 @@
       rotation_(0),
       reprocess_manager_(reprocess_manager),
       weak_ptr_factory_(this) {
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->AddObserver(this);
 }
 
 VideoCaptureDeviceChromeOSHalv3::~VideoCaptureDeviceChromeOSHalv3() {
   DCHECK(capture_task_runner_->BelongsToCurrentThread());
   DCHECK(!camera_device_ipc_thread_.IsRunning());
   screen_observer_delegate_->RemoveObserver();
-  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-      this);
+  chromeos::PowerManagerClient::Get()->RemoveObserver(this);
 }
 
 // VideoCaptureDevice implementation.
@@ -131,8 +129,7 @@
       base::BindOnce(
           &VideoCaptureDeviceChromeOSHalv3::CloseDevice,
           weak_ptr_factory_.GetWeakPtr(),
-          BindToCurrentLoop(chromeos::DBusThreadManager::Get()
-                                ->GetPowerManagerClient()
+          BindToCurrentLoop(chromeos::PowerManagerClient::Get()
                                 ->GetSuspendReadinessCallback(FROM_HERE))));
 }
 
diff --git a/media/capture/video/video_capture_device_unittest.cc b/media/capture/video/video_capture_device_unittest.cc
index 94b1107..3163164 100644
--- a/media/capture/video/video_capture_device_unittest.cc
+++ b/media/capture/video/video_capture_device_unittest.cc
@@ -279,8 +279,7 @@
 
   void SetUp() override {
 #if defined(OS_CHROMEOS)
-    dbus_setter_->SetPowerManagerClient(
-        std::make_unique<chromeos::FakePowerManagerClient>());
+    chromeos::PowerManagerClient::Initialize();
 #endif
 #if defined(OS_ANDROID)
     static_cast<VideoCaptureDeviceFactoryAndroid*>(
@@ -293,6 +292,12 @@
 #endif
   }
 
+  void TearDown() override {
+#if defined(OS_CHROMEOS)
+    chromeos::PowerManagerClient::Shutdown();
+#endif
+  }
+
 #if defined(OS_WIN)
   bool UseWinMediaFoundation() {
     return std::get<1>(GetParam()) == WIN_MEDIA_FOUNDATION;
diff --git a/services/device/battery/battery_status_manager_chromeos.cc b/services/device/battery/battery_status_manager_chromeos.cc
index a32e39c..d38aee2 100644
--- a/services/device/battery/battery_status_manager_chromeos.cc
+++ b/services/device/battery/battery_status_manager_chromeos.cc
@@ -29,7 +29,7 @@
     if (currently_listening_)
       return;
     chromeos::PowerManagerClient* power_client =
-        chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+        chromeos::PowerManagerClient::Get();
     power_client->AddObserver(this);
     power_client->RequestStatusUpdate();
     currently_listening_ = true;
@@ -39,8 +39,7 @@
   void Stop() {
     if (!currently_listening_)
       return;
-    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
-        this);
+    chromeos::PowerManagerClient::Get()->RemoveObserver(this);
     currently_listening_ = false;
   }
 
diff --git a/ui/chromeos/user_activity_power_manager_notifier.cc b/ui/chromeos/user_activity_power_manager_notifier.cc
index 46b110c..a39b36a 100644
--- a/ui/chromeos/user_activity_power_manager_notifier.cc
+++ b/ui/chromeos/user_activity_power_manager_notifier.cc
@@ -102,9 +102,7 @@
   // comparison.
   if (last_notify_time_.is_null() ||
       (now - last_notify_time_).InSeconds() >= kNotifyIntervalSec) {
-    chromeos::DBusThreadManager::Get()
-        ->GetPowerManagerClient()
-        ->NotifyUserActivity(user_activity_type);
+    chromeos::PowerManagerClient::Get()->NotifyUserActivity(user_activity_type);
     last_notify_time_ = now;
   }
 }