Commit 0a4decaa authored by Hidehiko Abe's avatar Hidehiko Abe Committed by Commit Bot

Migrate ArcService to BrowserContextKeyedService part 15.

This CL migrates ArcPowerBridge.

BUG=672829
TEST=Ran try.

Change-Id: I02dac942cbd31635120c62734032ca7611edae4b
Reviewed-on: https://chromium-review.googlesource.com/572881
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: default avatarYusuke Sato (in China Mon-Thurs, may be offline) <yusukes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487013}
parent 53e9a8c7
...@@ -104,8 +104,6 @@ void ArcServiceLauncher::Initialize() { ...@@ -104,8 +104,6 @@ void ArcServiceLauncher::Initialize() {
base::MakeUnique<ArcNetHostImpl>(arc_bridge_service)); base::MakeUnique<ArcNetHostImpl>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcPolicyBridge>(arc_bridge_service)); base::MakeUnique<ArcPolicyBridge>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcPowerBridge>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcPrintService>(arc_bridge_service)); base::MakeUnique<ArcPrintService>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
...@@ -193,6 +191,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) { ...@@ -193,6 +191,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcFileSystemMounter::GetForBrowserContext(profile); ArcFileSystemMounter::GetForBrowserContext(profile);
ArcMetricsService::GetForBrowserContext(profile); ArcMetricsService::GetForBrowserContext(profile);
ArcObbMounterBridge::GetForBrowserContext(profile); ArcObbMounterBridge::GetForBrowserContext(profile);
ArcPowerBridge::GetForBrowserContext(profile);
arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>( arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(
arc_service_manager_->arc_bridge_service(), arc_service_manager_->arc_bridge_service(),
......
...@@ -9,31 +9,70 @@ ...@@ -9,31 +9,70 @@
#include "ash/shell.h" #include "ash/shell.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/singleton.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_policy_controller.h" #include "chromeos/dbus/power_policy_controller.h"
#include "components/arc/arc_bridge_service.h" #include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
#include "components/arc/arc_service_manager.h" #include "components/arc/arc_service_manager.h"
namespace arc { namespace arc {
namespace {
// Delay for notifying Android about screen brightness changes, added in // Delay for notifying Android about screen brightness changes, added in
// order to prevent spammy brightness updates. // order to prevent spammy brightness updates.
constexpr base::TimeDelta kNotifyBrightnessDelay = constexpr base::TimeDelta kNotifyBrightnessDelay =
base::TimeDelta::FromMilliseconds(200); base::TimeDelta::FromMilliseconds(200);
ArcPowerBridge::ArcPowerBridge(ArcBridgeService* bridge_service) // Singleton factory for ArcPowerBridge.
: ArcService(bridge_service), binding_(this), weak_ptr_factory_(this) { class ArcPowerBridgeFactory
arc_bridge_service()->power()->AddObserver(this); : public internal::ArcBrowserContextKeyedServiceFactoryBase<
ArcPowerBridge,
ArcPowerBridgeFactory> {
public:
// Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
static constexpr const char* kName = "ArcPowerBridgeFactory";
static ArcPowerBridgeFactory* GetInstance() {
return base::Singleton<ArcPowerBridgeFactory>::get();
}
private:
friend base::DefaultSingletonTraits<ArcPowerBridgeFactory>;
ArcPowerBridgeFactory() = default;
~ArcPowerBridgeFactory() override = default;
};
} // namespace
// static
ArcPowerBridge* ArcPowerBridge::GetForBrowserContext(
content::BrowserContext* context) {
return ArcPowerBridgeFactory::GetForBrowserContext(context);
}
ArcPowerBridge::ArcPowerBridge(content::BrowserContext* context,
ArcBridgeService* bridge_service)
: arc_bridge_service_(bridge_service),
binding_(this),
weak_ptr_factory_(this) {
arc_bridge_service_->power()->AddObserver(this);
} }
ArcPowerBridge::~ArcPowerBridge() { ArcPowerBridge::~ArcPowerBridge() {
arc_bridge_service()->power()->RemoveObserver(this);
ReleaseAllDisplayWakeLocks(); ReleaseAllDisplayWakeLocks();
// TODO(hidehiko): Currently, the lifetime of ArcBridgeService and
// BrowserContextKeyedService is not nested.
// If ArcServiceManager::Get() returns nullptr, it is already destructed,
// so do not touch it.
if (ArcServiceManager::Get())
arc_bridge_service_->power()->RemoveObserver(this);
} }
void ArcPowerBridge::OnInstanceReady() { void ArcPowerBridge::OnInstanceReady() {
mojom::PowerInstance* power_instance = mojom::PowerInstance* power_instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->power(), Init); ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->power(), Init);
DCHECK(power_instance); DCHECK(power_instance);
mojom::PowerHostPtr host_proxy; mojom::PowerHostPtr host_proxy;
binding_.Bind(mojo::MakeRequest(&host_proxy)); binding_.Bind(mojo::MakeRequest(&host_proxy));
...@@ -56,8 +95,8 @@ void ArcPowerBridge::OnInstanceClosed() { ...@@ -56,8 +95,8 @@ void ArcPowerBridge::OnInstanceClosed() {
} }
void ArcPowerBridge::SuspendImminent() { void ArcPowerBridge::SuspendImminent() {
mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD( mojom::PowerInstance* power_instance =
arc_bridge_service()->power(), Suspend); ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->power(), Suspend);
if (!power_instance) if (!power_instance)
return; return;
...@@ -67,8 +106,8 @@ void ArcPowerBridge::SuspendImminent() { ...@@ -67,8 +106,8 @@ void ArcPowerBridge::SuspendImminent() {
} }
void ArcPowerBridge::SuspendDone(const base::TimeDelta& sleep_duration) { void ArcPowerBridge::SuspendDone(const base::TimeDelta& sleep_duration) {
mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD( mojom::PowerInstance* power_instance =
arc_bridge_service()->power(), Resume); ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->power(), Resume);
if (!power_instance) if (!power_instance)
return; return;
...@@ -93,8 +132,8 @@ void ArcPowerBridge::BrightnessChanged(int level, bool user_initiated) { ...@@ -93,8 +132,8 @@ void ArcPowerBridge::BrightnessChanged(int level, bool user_initiated) {
void ArcPowerBridge::OnPowerStateChanged( void ArcPowerBridge::OnPowerStateChanged(
chromeos::DisplayPowerState power_state) { chromeos::DisplayPowerState power_state) {
mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD( mojom::PowerInstance* power_instance =
arc_bridge_service()->power(), SetInteractive); ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->power(), SetInteractive);
if (!power_instance) if (!power_instance)
return; return;
...@@ -175,7 +214,7 @@ void ArcPowerBridge::ReleaseAllDisplayWakeLocks() { ...@@ -175,7 +214,7 @@ void ArcPowerBridge::ReleaseAllDisplayWakeLocks() {
void ArcPowerBridge::UpdateAndroidScreenBrightness(double percent) { void ArcPowerBridge::UpdateAndroidScreenBrightness(double percent) {
mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD( mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->power(), UpdateScreenBrightnessSettings); arc_bridge_service_->power(), UpdateScreenBrightnessSettings);
if (!power_instance) if (!power_instance)
return; return;
power_instance->UpdateScreenBrightnessSettings(percent); power_instance->UpdateScreenBrightnessSettings(percent);
......
...@@ -9,25 +9,34 @@ ...@@ -9,25 +9,34 @@
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/dbus/power_manager_client.h" #include "chromeos/dbus/power_manager_client.h"
#include "components/arc/arc_service.h"
#include "components/arc/common/power.mojom.h" #include "components/arc/common/power.mojom.h"
#include "components/arc/instance_holder.h" #include "components/arc/instance_holder.h"
#include "components/keyed_service/core/keyed_service.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
#include "ui/display/manager/chromeos/display_configurator.h" #include "ui/display/manager/chromeos/display_configurator.h"
namespace content {
class BrowserContext;
} // namespace content
namespace arc { namespace arc {
class ArcBridgeService; class ArcBridgeService;
// ARC Power Client sets power management policy based on requests from // ARC Power Client sets power management policy based on requests from
// ARC instances. // ARC instances.
class ArcPowerBridge : public ArcService, class ArcPowerBridge : public KeyedService,
public InstanceHolder<mojom::PowerInstance>::Observer, public InstanceHolder<mojom::PowerInstance>::Observer,
public chromeos::PowerManagerClient::Observer, public chromeos::PowerManagerClient::Observer,
public display::DisplayConfigurator::Observer, public display::DisplayConfigurator::Observer,
public mojom::PowerHost { public mojom::PowerHost {
public: public:
explicit ArcPowerBridge(ArcBridgeService* bridge_service); // Returns singleton instance for the given BrowserContext,
// or nullptr if the browser |context| is not allowed to use ARC.
static ArcPowerBridge* GetForBrowserContext(content::BrowserContext* context);
ArcPowerBridge(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcPowerBridge() override; ~ArcPowerBridge() override;
// InstanceHolder<mojom::PowerInstance>::Observer overrides. // InstanceHolder<mojom::PowerInstance>::Observer overrides.
...@@ -52,6 +61,7 @@ class ArcPowerBridge : public ArcService, ...@@ -52,6 +61,7 @@ class ArcPowerBridge : public ArcService,
void ReleaseAllDisplayWakeLocks(); void ReleaseAllDisplayWakeLocks();
void UpdateAndroidScreenBrightness(double percent); void UpdateAndroidScreenBrightness(double percent);
ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager.
mojo::Binding<mojom::PowerHost> binding_; mojo::Binding<mojom::PowerHost> binding_;
// Stores a mapping of type -> wake lock ID for all wake locks // Stores a mapping of type -> wake lock ID for all wake locks
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment