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() { ...@@ -95,8 +95,6 @@ void ArcServiceLauncher::Initialize() {
// List in lexicographical order. // List in lexicographical order.
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service)); base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcVolumeMounterBridge>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcWallpaperService>(arc_bridge_service)); base::MakeUnique<ArcWallpaperService>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
...@@ -172,6 +170,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) { ...@@ -172,6 +170,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcUserSessionService::GetForBrowserContext(profile); ArcUserSessionService::GetForBrowserContext(profile);
ArcVoiceInteractionArcHomeService::GetForBrowserContext(profile); ArcVoiceInteractionArcHomeService::GetForBrowserContext(profile);
ArcVoiceInteractionFrameworkService::GetForBrowserContext(profile); ArcVoiceInteractionFrameworkService::GetForBrowserContext(profile);
ArcVolumeMounterBridge::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(),
......
...@@ -6,9 +6,11 @@ ...@@ -6,9 +6,11 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/singleton.h"
#include "base/task_scheduler/post_task.h" #include "base/task_scheduler/post_task.h"
#include "chromeos/disks/disk_mount_manager.h" #include "chromeos/disks/disk_mount_manager.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"
using chromeos::disks::DiskMountManager; using chromeos::disks::DiskMountManager;
...@@ -25,18 +27,49 @@ void SendAllMountEvents(ArcVolumeMounterBridge* bridge) { ...@@ -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 } // namespace
ArcVolumeMounterBridge::ArcVolumeMounterBridge(ArcBridgeService* bridge_service) // static
: ArcService(bridge_service) { ArcVolumeMounterBridge* ArcVolumeMounterBridge::GetForBrowserContext(
arc_bridge_service()->volume_mounter()->AddObserver(this); 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()); DCHECK(DiskMountManager::GetInstance());
DiskMountManager::GetInstance()->AddObserver(this); DiskMountManager::GetInstance()->AddObserver(this);
} }
ArcVolumeMounterBridge::~ArcVolumeMounterBridge() { ArcVolumeMounterBridge::~ArcVolumeMounterBridge() {
DiskMountManager::GetInstance()->RemoveObserver(this); 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() { void ArcVolumeMounterBridge::OnInstanceReady() {
...@@ -94,7 +127,7 @@ void ArcVolumeMounterBridge::OnMountEvent( ...@@ -94,7 +127,7 @@ void ArcVolumeMounterBridge::OnMountEvent(
} }
mojom::VolumeMounterInstance* volume_mounter_instance = 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); OnMountEvent);
if (!volume_mounter_instance) if (!volume_mounter_instance)
......
...@@ -9,11 +9,15 @@ ...@@ -9,11 +9,15 @@
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/disks/disk_mount_manager.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/common/volume_mounter.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"
namespace content {
class BrowserContext;
} // namespace content
namespace arc { namespace arc {
class ArcBridgeService; class ArcBridgeService;
...@@ -21,11 +25,17 @@ class ArcBridgeService; ...@@ -21,11 +25,17 @@ class ArcBridgeService;
// This class handles Volume mount/unmount requests from cros-disks and // This class handles Volume mount/unmount requests from cros-disks and
// send them to Android. // send them to Android.
class ArcVolumeMounterBridge class ArcVolumeMounterBridge
: public ArcService, : public KeyedService,
public chromeos::disks::DiskMountManager::Observer, public chromeos::disks::DiskMountManager::Observer,
public InstanceHolder<mojom::VolumeMounterInstance>::Observer { public InstanceHolder<mojom::VolumeMounterInstance>::Observer {
public: 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; ~ArcVolumeMounterBridge() override;
// InstanceHolder<mojom::VolumeMounterInstance>::Observer overrides: // InstanceHolder<mojom::VolumeMounterInstance>::Observer overrides:
...@@ -46,6 +56,8 @@ class ArcVolumeMounterBridge ...@@ -46,6 +56,8 @@ class ArcVolumeMounterBridge
const std::string& device_path) override; const std::string& device_path) override;
private: private:
ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager.
DISALLOW_COPY_AND_ASSIGN(ArcVolumeMounterBridge); 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