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() {
base::MakeUnique<ArcNetHostImpl>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcPolicyBridge>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcPowerBridge>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcPrintService>(arc_bridge_service));
arc_service_manager_->AddService(
......@@ -193,6 +191,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcFileSystemMounter::GetForBrowserContext(profile);
ArcMetricsService::GetForBrowserContext(profile);
ArcObbMounterBridge::GetForBrowserContext(profile);
ArcPowerBridge::GetForBrowserContext(profile);
arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(
arc_service_manager_->arc_bridge_service(),
......
......@@ -9,31 +9,70 @@
#include "ash/shell.h"
#include "base/logging.h"
#include "base/memory/singleton.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_policy_controller.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"
namespace arc {
namespace {
// Delay for notifying Android about screen brightness changes, added in
// order to prevent spammy brightness updates.
constexpr base::TimeDelta kNotifyBrightnessDelay =
base::TimeDelta::FromMilliseconds(200);
ArcPowerBridge::ArcPowerBridge(ArcBridgeService* bridge_service)
: ArcService(bridge_service), binding_(this), weak_ptr_factory_(this) {
arc_bridge_service()->power()->AddObserver(this);
// Singleton factory for ArcPowerBridge.
class ArcPowerBridgeFactory
: 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() {
arc_bridge_service()->power()->RemoveObserver(this);
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() {
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);
mojom::PowerHostPtr host_proxy;
binding_.Bind(mojo::MakeRequest(&host_proxy));
......@@ -56,8 +95,8 @@ void ArcPowerBridge::OnInstanceClosed() {
}
void ArcPowerBridge::SuspendImminent() {
mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->power(), Suspend);
mojom::PowerInstance* power_instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->power(), Suspend);
if (!power_instance)
return;
......@@ -67,8 +106,8 @@ void ArcPowerBridge::SuspendImminent() {
}
void ArcPowerBridge::SuspendDone(const base::TimeDelta& sleep_duration) {
mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->power(), Resume);
mojom::PowerInstance* power_instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->power(), Resume);
if (!power_instance)
return;
......@@ -93,8 +132,8 @@ void ArcPowerBridge::BrightnessChanged(int level, bool user_initiated) {
void ArcPowerBridge::OnPowerStateChanged(
chromeos::DisplayPowerState power_state) {
mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->power(), SetInteractive);
mojom::PowerInstance* power_instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->power(), SetInteractive);
if (!power_instance)
return;
......@@ -175,7 +214,7 @@ void ArcPowerBridge::ReleaseAllDisplayWakeLocks() {
void ArcPowerBridge::UpdateAndroidScreenBrightness(double percent) {
mojom::PowerInstance* power_instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->power(), UpdateScreenBrightnessSettings);
arc_bridge_service_->power(), UpdateScreenBrightnessSettings);
if (!power_instance)
return;
power_instance->UpdateScreenBrightnessSettings(percent);
......
......@@ -9,25 +9,34 @@
#include "base/macros.h"
#include "chromeos/dbus/power_manager_client.h"
#include "components/arc/arc_service.h"
#include "components/arc/common/power.mojom.h"
#include "components/arc/instance_holder.h"
#include "components/keyed_service/core/keyed_service.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "ui/display/manager/chromeos/display_configurator.h"
namespace content {
class BrowserContext;
} // namespace content
namespace arc {
class ArcBridgeService;
// ARC Power Client sets power management policy based on requests from
// ARC instances.
class ArcPowerBridge : public ArcService,
class ArcPowerBridge : public KeyedService,
public InstanceHolder<mojom::PowerInstance>::Observer,
public chromeos::PowerManagerClient::Observer,
public display::DisplayConfigurator::Observer,
public mojom::PowerHost {
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;
// InstanceHolder<mojom::PowerInstance>::Observer overrides.
......@@ -52,6 +61,7 @@ class ArcPowerBridge : public ArcService,
void ReleaseAllDisplayWakeLocks();
void UpdateAndroidScreenBrightness(double percent);
ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager.
mojo::Binding<mojom::PowerHost> binding_;
// 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