Commit 6182efe1 authored by Hidehiko Abe's avatar Hidehiko Abe Committed by Commit Bot

Migrate ArcService to BrowserContextKeyedService part 28.

This CL migrates ArcBootPhaseMonitorBridge.

BUG=672829
TEST=Ran try.

Change-Id: I2a6988e5867092de9b8a981a253f7b1993a9eebc
Reviewed-on: https://chromium-review.googlesource.com/575287Reviewed-by: default avatarLuis Hector Chavez <lhchavez@chromium.org>
Reviewed-by: default avatarYusuke Sato (in China Mon-Thurs, may be offline) <yusukes@chromium.org>
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487425}
parent 632bc455
......@@ -146,6 +146,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcAuthService::GetForBrowserContext(profile);
ArcBluetoothBridge::GetForBrowserContext(profile);
ArcBootErrorNotification::GetForBrowserContext(profile);
ArcBootPhaseMonitorBridge::GetForBrowserContext(profile);
ArcClipboardBridge::GetForBrowserContext(profile);
ArcCrashCollectorBridge::GetForBrowserContext(profile);
ArcDownloadsWatcherService::GetForBrowserContext(profile);
......@@ -170,9 +171,6 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcWallpaperService::GetForBrowserContext(profile);
GpuArcVideoServiceHost::GetForBrowserContext(profile);
arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(
arc_service_manager_->arc_bridge_service(),
multi_user_util::GetAccountIdFromProfile(profile)));
arc_service_manager_->AddService(
base::MakeUnique<ArcFileSystemOperationRunner>(
arc_service_manager_->arc_bridge_service(), profile));
......
......@@ -4,14 +4,19 @@
#include "chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h"
#include <utility>
#include "base/bind.h"
#include "base/logging.h"
#include "base/memory/singleton.h"
#include "chrome/browser/chromeos/arc/boot_phase_monitor/arc_instance_throttle.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
#include "chromeos/cryptohome/cryptohome_parameters.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/session_manager_client.h"
#include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
namespace {
......@@ -23,23 +28,60 @@ void OnEmitArcBooted(bool success) {
} // namespace
namespace arc {
namespace {
// Singleton factory for ArcBootPhaseMonitorBridge.
class ArcBootPhaseMonitorBridgeFactory
: public internal::ArcBrowserContextKeyedServiceFactoryBase<
ArcBootPhaseMonitorBridge,
ArcBootPhaseMonitorBridgeFactory> {
public:
// Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
static constexpr const char* kName = "ArcBootPhaseMonitorBridgeFactory";
static ArcBootPhaseMonitorBridgeFactory* GetInstance() {
return base::Singleton<ArcBootPhaseMonitorBridgeFactory>::get();
}
private:
friend base::DefaultSingletonTraits<ArcBootPhaseMonitorBridgeFactory>;
ArcBootPhaseMonitorBridgeFactory() = default;
~ArcBootPhaseMonitorBridgeFactory() override = default;
};
} // namespace
// static
ArcBootPhaseMonitorBridge* ArcBootPhaseMonitorBridge::GetForBrowserContext(
content::BrowserContext* context) {
return ArcBootPhaseMonitorBridgeFactory::GetForBrowserContext(context);
}
ArcBootPhaseMonitorBridge::ArcBootPhaseMonitorBridge(
ArcBridgeService* bridge_service,
const AccountId& account_id)
: ArcService(bridge_service), account_id_(account_id), binding_(this) {
arc_bridge_service()->boot_phase_monitor()->AddObserver(this);
content::BrowserContext* context,
ArcBridgeService* bridge_service)
: arc_bridge_service_(bridge_service),
account_id_(multi_user_util::GetAccountIdFromProfile(
Profile::FromBrowserContext(context))),
binding_(this) {
arc_bridge_service_->boot_phase_monitor()->AddObserver(this);
}
ArcBootPhaseMonitorBridge::~ArcBootPhaseMonitorBridge() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
arc_bridge_service()->boot_phase_monitor()->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_->boot_phase_monitor()->RemoveObserver(this);
}
void ArcBootPhaseMonitorBridge::OnInstanceReady() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
auto* instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->boot_phase_monitor(), Init);
arc_bridge_service_->boot_phase_monitor(), Init);
DCHECK(instance);
mojom::BootPhaseMonitorHostPtr host_proxy;
binding_.Bind(mojo::MakeRequest(&host_proxy));
......
......@@ -9,12 +9,16 @@
#include "base/macros.h"
#include "base/threading/thread_checker.h"
#include "components/arc/arc_service.h"
#include "components/arc/common/boot_phase_monitor.mojom.h"
#include "components/arc/instance_holder.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/signin/core/account_id/account_id.h"
#include "mojo/public/cpp/bindings/binding.h"
namespace content {
class BrowserContext;
} // namespace content
namespace arc {
class ArcBridgeService;
......@@ -22,12 +26,17 @@ class ArcInstanceThrottle;
// Receives boot phase notifications from ARC.
class ArcBootPhaseMonitorBridge
: public ArcService,
: public KeyedService,
public InstanceHolder<mojom::BootPhaseMonitorInstance>::Observer,
public mojom::BootPhaseMonitorHost {
public:
ArcBootPhaseMonitorBridge(ArcBridgeService* bridge_service,
const AccountId& account_id);
// Returns singleton instance for the given BrowserContext,
// or nullptr if the browser |context| is not allowed to use ARC.
static ArcBootPhaseMonitorBridge* GetForBrowserContext(
content::BrowserContext* context);
ArcBootPhaseMonitorBridge(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcBootPhaseMonitorBridge() override;
// InstanceHolder<mojom::BootPhaseMonitorInstance>::Observer
......@@ -40,6 +49,7 @@ class ArcBootPhaseMonitorBridge
private:
THREAD_CHECKER(thread_checker_);
ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager.
const AccountId account_id_;
mojo::Binding<mojom::BootPhaseMonitorHost> binding_;
std::unique_ptr<ArcInstanceThrottle> throttle_;
......
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