Commit 38d4de72 authored by Hidehiko Abe's avatar Hidehiko Abe Committed by Commit Bot

Migrate ArcService to BrowserContextKeyedService part 10.

This CL migrates ArcImeService.

BUG=672829
TEST=Ran try.

Change-Id: I88a3e2bcf2e5ffa4ba2cb4a96a9c1dbcf26ab0ec
Reviewed-on: https://chromium-review.googlesource.com/572470
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: default avatarLuis Hector Chavez <lhchavez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487117}
parent 2230cfaa
...@@ -94,8 +94,6 @@ void ArcServiceLauncher::Initialize() { ...@@ -94,8 +94,6 @@ void ArcServiceLauncher::Initialize() {
base::Bind(ArcSession::Create, arc_bridge_service))); base::Bind(ArcSession::Create, arc_bridge_service)));
// List in lexicographical order. // List in lexicographical order.
arc_service_manager_->AddService(
base::MakeUnique<ArcImeService>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service)); base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
...@@ -180,6 +178,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) { ...@@ -180,6 +178,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcDownloadsWatcherService::GetForBrowserContext(profile); ArcDownloadsWatcherService::GetForBrowserContext(profile);
ArcEnterpriseReportingService::GetForBrowserContext(profile); ArcEnterpriseReportingService::GetForBrowserContext(profile);
ArcFileSystemMounter::GetForBrowserContext(profile); ArcFileSystemMounter::GetForBrowserContext(profile);
ArcImeService::GetForBrowserContext(profile);
ArcMetricsService::GetForBrowserContext(profile); ArcMetricsService::GetForBrowserContext(profile);
ArcNetHostImpl::GetForBrowserContext(profile); ArcNetHostImpl::GetForBrowserContext(profile);
ArcObbMounterBridge::GetForBrowserContext(profile); ArcObbMounterBridge::GetForBrowserContext(profile);
......
...@@ -4,12 +4,14 @@ ...@@ -4,12 +4,14 @@
#include "components/arc/ime/arc_ime_bridge_impl.h" #include "components/arc/ime/arc_ime_bridge_impl.h"
#include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "base/logging.h" #include "base/logging.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "components/arc/arc_bridge_service.h" #include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_service_manager.h"
#include "ui/base/ime/composition_text.h" #include "ui/base/ime/composition_text.h"
#include "ui/base/ime/text_input_type.h" #include "ui/base/ime/text_input_type.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
...@@ -79,7 +81,12 @@ ArcImeBridgeImpl::ArcImeBridgeImpl(Delegate* delegate, ...@@ -79,7 +81,12 @@ ArcImeBridgeImpl::ArcImeBridgeImpl(Delegate* delegate,
} }
ArcImeBridgeImpl::~ArcImeBridgeImpl() { ArcImeBridgeImpl::~ArcImeBridgeImpl() {
bridge_service_->ime()->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())
bridge_service_->ime()->RemoveObserver(this);
} }
void ArcImeBridgeImpl::OnInstanceReady() { void ArcImeBridgeImpl::OnInstanceReady() {
......
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
#include <utility> #include <utility>
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/singleton.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
#include "components/arc/ime/arc_ime_bridge_impl.h" #include "components/arc/ime/arc_ime_bridge_impl.h"
#include "components/exo/shell_surface.h" #include "components/exo/shell_surface.h"
#include "components/exo/surface.h" #include "components/exo/surface.h"
...@@ -51,14 +53,39 @@ class ArcWindowDelegateImpl : public ArcImeService::ArcWindowDelegate { ...@@ -51,14 +53,39 @@ class ArcWindowDelegateImpl : public ArcImeService::ArcWindowDelegate {
DISALLOW_COPY_AND_ASSIGN(ArcWindowDelegateImpl); DISALLOW_COPY_AND_ASSIGN(ArcWindowDelegateImpl);
}; };
// Singleton factory for ArcImeService.
class ArcImeServiceFactory
: public internal::ArcBrowserContextKeyedServiceFactoryBase<
ArcImeService,
ArcImeServiceFactory> {
public:
// Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
static constexpr const char* kName = "ArcImeServiceFactory";
static ArcImeServiceFactory* GetInstance() {
return base::Singleton<ArcImeServiceFactory>::get();
}
private:
friend base::DefaultSingletonTraits<ArcImeServiceFactory>;
ArcImeServiceFactory() = default;
~ArcImeServiceFactory() override = default;
};
} // anonymous namespace } // anonymous namespace
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// ArcImeService main implementation: // ArcImeService main implementation:
ArcImeService::ArcImeService(ArcBridgeService* bridge_service) // static
: ArcService(bridge_service), ArcImeService* ArcImeService::GetForBrowserContext(
ime_bridge_(new ArcImeBridgeImpl(this, bridge_service)), content::BrowserContext* context) {
return ArcImeServiceFactory::GetForBrowserContext(context);
}
ArcImeService::ArcImeService(content::BrowserContext* context,
ArcBridgeService* bridge_service)
: ime_bridge_(new ArcImeBridgeImpl(this, bridge_service)),
arc_window_delegate_(new ArcWindowDelegateImpl(this)), arc_window_delegate_(new ArcWindowDelegateImpl(this)),
ime_type_(ui::TEXT_INPUT_TYPE_NONE), ime_type_(ui::TEXT_INPUT_TYPE_NONE),
has_composition_text_(false), has_composition_text_(false),
......
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
#include <memory> #include <memory>
#include "base/macros.h" #include "base/macros.h"
#include "components/arc/arc_service.h"
#include "components/arc/ime/arc_ime_bridge.h" #include "components/arc/ime/arc_ime_bridge.h"
#include "components/exo/wm_helper.h" #include "components/exo/wm_helper.h"
#include "components/keyed_service/core/keyed_service.h"
#include "ui/aura/env_observer.h" #include "ui/aura/env_observer.h"
#include "ui/aura/window_observer.h" #include "ui/aura/window_observer.h"
#include "ui/base/ime/text_input_client.h" #include "ui/base/ime/text_input_client.h"
...@@ -22,11 +22,15 @@ ...@@ -22,11 +22,15 @@
namespace aura { namespace aura {
class Window; class Window;
} } // namespace aura
namespace content {
class BrowserContext;
} // namespace content
namespace ui { namespace ui {
class InputMethod; class InputMethod;
} } // namespace ui
namespace arc { namespace arc {
...@@ -34,7 +38,7 @@ class ArcBridgeService; ...@@ -34,7 +38,7 @@ class ArcBridgeService;
// This class implements ui::TextInputClient and makes ARC windows behave // This class implements ui::TextInputClient and makes ARC windows behave
// as a text input target in Chrome OS environment. // as a text input target in Chrome OS environment.
class ArcImeService : public ArcService, class ArcImeService : public KeyedService,
public ArcImeBridge::Delegate, public ArcImeBridge::Delegate,
public aura::EnvObserver, public aura::EnvObserver,
public aura::WindowObserver, public aura::WindowObserver,
...@@ -42,7 +46,12 @@ class ArcImeService : public ArcService, ...@@ -42,7 +46,12 @@ class ArcImeService : public ArcService,
public keyboard::KeyboardControllerObserver, public keyboard::KeyboardControllerObserver,
public ui::TextInputClient { public ui::TextInputClient {
public: public:
explicit ArcImeService(ArcBridgeService* bridge_service); // Returns singleton instance for the given BrowserContext,
// or nullptr if the browser |context| is not allowed to use ARC.
static ArcImeService* GetForBrowserContext(content::BrowserContext* context);
ArcImeService(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcImeService() override; ~ArcImeService() override;
class ArcWindowDelegate { class ArcWindowDelegate {
......
...@@ -146,7 +146,8 @@ class ArcImeServiceTest : public testing::Test { ...@@ -146,7 +146,8 @@ class ArcImeServiceTest : public testing::Test {
private: private:
void SetUp() override { void SetUp() override {
arc_bridge_service_ = base::MakeUnique<ArcBridgeService>(); arc_bridge_service_ = base::MakeUnique<ArcBridgeService>();
instance_ = base::MakeUnique<ArcImeService>(arc_bridge_service_.get()); instance_ =
base::MakeUnique<ArcImeService>(nullptr, arc_bridge_service_.get());
fake_arc_ime_bridge_ = new FakeArcImeBridge(); fake_arc_ime_bridge_ = new FakeArcImeBridge();
instance_->SetImeBridgeForTesting(base::WrapUnique(fake_arc_ime_bridge_)); instance_->SetImeBridgeForTesting(base::WrapUnique(fake_arc_ime_bridge_));
......
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