Commit 53d57824 authored by Hidehiko Abe's avatar Hidehiko Abe Committed by Commit Bot

Migrate ArcService to BrowserContextKeyedService part 23.

This CL migrates ArcUserSessionService.

BUG=672829
TEST=Ran try.

Change-Id: Icdd45e1f52b2372bd3613266ed96fa463c801a9a
Reviewed-on: https://chromium-review.googlesource.com/572474
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@{#487335}
parent 5c3feaef
......@@ -98,8 +98,6 @@ void ArcServiceLauncher::Initialize() {
base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcSettingsService>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcUserSessionService>(arc_bridge_service));
if (chromeos::switches::IsVoiceInteractionEnabled()) {
arc_service_manager_->AddService(
base::MakeUnique<ArcVoiceInteractionFrameworkService>(
......@@ -181,6 +179,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcProvisionNotificationService::GetForBrowserContext(profile);
ArcTracingBridge::GetForBrowserContext(profile);
ArcTtsService::GetForBrowserContext(profile);
ArcUserSessionService::GetForBrowserContext(profile);
arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(
arc_service_manager_->arc_bridge_service(),
......
......@@ -4,18 +4,53 @@
#include "chrome/browser/chromeos/arc/user_session/arc_user_session_service.h"
#include "base/memory/singleton.h"
#include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
#include "components/session_manager/core/session_manager.h"
namespace arc {
namespace {
ArcUserSessionService::ArcUserSessionService(ArcBridgeService* bridge_service)
: ArcService(bridge_service) {
arc_bridge_service()->intent_helper()->AddObserver(this);
// Singleton factory for ArcUserSessionService.
class ArcUserSessionServiceFactory
: public internal::ArcBrowserContextKeyedServiceFactoryBase<
ArcUserSessionService,
ArcUserSessionServiceFactory> {
public:
// Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
static constexpr const char* kName = "ArcUserSessionServiceFactory";
static ArcUserSessionServiceFactory* GetInstance() {
return base::Singleton<ArcUserSessionServiceFactory>::get();
}
private:
friend base::DefaultSingletonTraits<ArcUserSessionServiceFactory>;
ArcUserSessionServiceFactory() = default;
~ArcUserSessionServiceFactory() override = default;
};
} // namespace
ArcUserSessionService* ArcUserSessionService::GetForBrowserContext(
content::BrowserContext* context) {
return ArcUserSessionServiceFactory::GetForBrowserContext(context);
}
ArcUserSessionService::ArcUserSessionService(content::BrowserContext* context,
ArcBridgeService* bridge_service)
: arc_bridge_service_(bridge_service) {
arc_bridge_service_->intent_helper()->AddObserver(this);
}
ArcUserSessionService::~ArcUserSessionService() {
arc_bridge_service()->intent_helper()->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_->intent_helper()->RemoveObserver(this);
}
void ArcUserSessionService::OnSessionStateChanged() {
......@@ -25,7 +60,7 @@ void ArcUserSessionService::OnSessionStateChanged() {
return;
auto* instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->intent_helper(), SendBroadcast);
arc_bridge_service_->intent_helper(), SendBroadcast);
if (!instance)
return;
......
......@@ -6,21 +6,31 @@
#define CHROME_BROWSER_CHROMEOS_ARC_USER_SESSION_ARC_USER_SESSION_SERVICE_H_
#include "base/macros.h"
#include "components/arc/arc_service.h"
#include "components/arc/common/intent_helper.mojom.h"
#include "components/arc/instance_holder.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/session_manager/core/session_manager_observer.h"
namespace content {
class BrowserContext;
} // namespace content
namespace arc {
class ArcBridgeService;
class ArcUserSessionService
: public ArcService,
: public KeyedService,
public InstanceHolder<mojom::IntentHelperInstance>::Observer,
public session_manager::SessionManagerObserver {
public:
explicit ArcUserSessionService(ArcBridgeService* bridge_service);
// Returns singleton instance for the given BrowserContext,
// or nullptr if the browser |context| is not allowed to use ARC.
static ArcUserSessionService* GetForBrowserContext(
content::BrowserContext* context);
ArcUserSessionService(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcUserSessionService() override;
// InstanceHolder<mojom::IntentHelperInstance>::Observer
......@@ -31,6 +41,8 @@ class ArcUserSessionService
void OnSessionStateChanged() override;
private:
ArcBridgeService* const arc_bridge_service_;
DISALLOW_COPY_AND_ASSIGN(ArcUserSessionService);
};
......
......@@ -7,6 +7,7 @@
#include "chrome/test/base/in_process_browser_test.h"
#include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_service_manager.h"
#include "components/arc/arc_util.h"
#include "components/arc/test/fake_intent_helper_instance.h"
#include "components/session_manager/core/session_manager.h"
......@@ -43,6 +44,10 @@ class ArcUserSessionServiceTest : public InProcessBrowserTest {
// InProcessBrowserTest:
~ArcUserSessionServiceTest() override = default;
void SetUpCommandLine(base::CommandLine* command_line) override {
arc::SetArcAvailableCommandLineForTesting(command_line);
}
void SetUpInProcessBrowserTestFixture() override {
fake_intent_helper_instance_.reset(new FakeIntentHelperInstance());
}
......
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