Commit 77d3bcb8 authored by Hidehiko Abe's avatar Hidehiko Abe Committed by Commit Bot

Migrate ArcService to BrowserContextKeyedService part 25.

This CL migrates ArcVolumeMounterBridge.

BUG=672829
TEST=Ran try.

Change-Id: I14ecdea4d97940a4b0878f0624d0b0137263f453
Reviewed-on: https://chromium-review.googlesource.com/574511
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: default avatarLuis Hector Chavez <lhchavez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487399}
parent 5a28bfad
......@@ -95,8 +95,6 @@ void ArcServiceLauncher::Initialize() {
// List in lexicographical order.
arc_service_manager_->AddService(
base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcVolumeMounterBridge>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcWallpaperService>(arc_bridge_service));
arc_service_manager_->AddService(
......@@ -172,6 +170,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcUserSessionService::GetForBrowserContext(profile);
ArcVoiceInteractionArcHomeService::GetForBrowserContext(profile);
ArcVoiceInteractionFrameworkService::GetForBrowserContext(profile);
ArcVolumeMounterBridge::GetForBrowserContext(profile);
arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(
arc_service_manager_->arc_bridge_service(),
......
......@@ -6,9 +6,11 @@
#include "base/bind.h"
#include "base/logging.h"
#include "base/memory/singleton.h"
#include "base/task_scheduler/post_task.h"
#include "chromeos/disks/disk_mount_manager.h"
#include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
using chromeos::disks::DiskMountManager;
......@@ -25,18 +27,49 @@ void SendAllMountEvents(ArcVolumeMounterBridge* bridge) {
}
}
// Singleton factory for ArcVolumeMounterBridge.
class ArcVolumeMounterBridgeFactory
: public internal::ArcBrowserContextKeyedServiceFactoryBase<
ArcVolumeMounterBridge,
ArcVolumeMounterBridgeFactory> {
public:
// Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
static constexpr const char* kName = "ArcVolumeMounterBridgeFactory";
static ArcVolumeMounterBridgeFactory* GetInstance() {
return base::Singleton<ArcVolumeMounterBridgeFactory>::get();
}
private:
friend base::DefaultSingletonTraits<ArcVolumeMounterBridgeFactory>;
ArcVolumeMounterBridgeFactory() = default;
~ArcVolumeMounterBridgeFactory() override = default;
};
} // namespace
ArcVolumeMounterBridge::ArcVolumeMounterBridge(ArcBridgeService* bridge_service)
: ArcService(bridge_service) {
arc_bridge_service()->volume_mounter()->AddObserver(this);
// static
ArcVolumeMounterBridge* ArcVolumeMounterBridge::GetForBrowserContext(
content::BrowserContext* context) {
return ArcVolumeMounterBridgeFactory::GetForBrowserContext(context);
}
ArcVolumeMounterBridge::ArcVolumeMounterBridge(content::BrowserContext* context,
ArcBridgeService* bridge_service)
: arc_bridge_service_(bridge_service) {
arc_bridge_service_->volume_mounter()->AddObserver(this);
DCHECK(DiskMountManager::GetInstance());
DiskMountManager::GetInstance()->AddObserver(this);
}
ArcVolumeMounterBridge::~ArcVolumeMounterBridge() {
DiskMountManager::GetInstance()->RemoveObserver(this);
arc_bridge_service()->volume_mounter()->RemoveObserver(this);
// 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_->volume_mounter()->RemoveObserver(this);
}
void ArcVolumeMounterBridge::OnInstanceReady() {
......@@ -94,7 +127,7 @@ void ArcVolumeMounterBridge::OnMountEvent(
}
mojom::VolumeMounterInstance* volume_mounter_instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->volume_mounter(),
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->volume_mounter(),
OnMountEvent);
if (!volume_mounter_instance)
......
......@@ -9,11 +9,15 @@
#include "base/macros.h"
#include "chromeos/disks/disk_mount_manager.h"
#include "components/arc/arc_service.h"
#include "components/arc/common/volume_mounter.mojom.h"
#include "components/arc/instance_holder.h"
#include "components/keyed_service/core/keyed_service.h"
#include "mojo/public/cpp/bindings/binding.h"
namespace content {
class BrowserContext;
} // namespace content
namespace arc {
class ArcBridgeService;
......@@ -21,11 +25,17 @@ class ArcBridgeService;
// This class handles Volume mount/unmount requests from cros-disks and
// send them to Android.
class ArcVolumeMounterBridge
: public ArcService,
: public KeyedService,
public chromeos::disks::DiskMountManager::Observer,
public InstanceHolder<mojom::VolumeMounterInstance>::Observer {
public:
explicit ArcVolumeMounterBridge(ArcBridgeService* bridge_service);
// Returns singleton instance for the given BrowserContext,
// or nullptr if the browser |context| is not allowed to use ARC.
static ArcVolumeMounterBridge* GetForBrowserContext(
content::BrowserContext* context);
ArcVolumeMounterBridge(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcVolumeMounterBridge() override;
// InstanceHolder<mojom::VolumeMounterInstance>::Observer overrides:
......@@ -46,6 +56,8 @@ class ArcVolumeMounterBridge
const std::string& device_path) override;
private:
ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager.
DISALLOW_COPY_AND_ASSIGN(ArcVolumeMounterBridge);
};
......
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