blob: ce9d6fe86735bf47165325ca03607b3079da77d4 [file] [log] [blame]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/base/ime/init/input_method_initializer.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#if defined(USE_AURA) && BUILDFLAG(IS_LINUX)
#include "ui/base/ime/linux/fake_input_method_context.h"
#include "ui/base/ime/linux/linux_input_method_context_factory.h"
#elif BUILDFLAG(IS_WIN)
#include "ui/base/ime/init/input_method_factory.h"
#include "ui/base/ime/win/tsf_bridge.h"
#endif
namespace ui {
void InitializeInputMethod() {
TRACE_EVENT0("startup", "ui::InitializeInputMethod");
#if BUILDFLAG(IS_WIN)
TSFBridge::Initialize();
#endif
}
void ShutdownInputMethod() {
#if BUILDFLAG(IS_WIN)
TSFBridge::Shutdown();
#endif
}
void InitializeInputMethodForTesting() {
#if defined(USE_AURA) && BUILDFLAG(IS_LINUX)
GetInputMethodContextFactoryForTest() =
base::BindRepeating([](LinuxInputMethodContextDelegate* delegate)
-> std::unique_ptr<LinuxInputMethodContext> {
return std::make_unique<FakeInputMethodContext>();
});
#elif BUILDFLAG(IS_WIN)
TSFBridge::InitializeForTesting();
#endif
}
void ShutdownInputMethodForTesting() {
#if defined(USE_AURA) && BUILDFLAG(IS_LINUX)
// The function owns the factory (as a static variable that's returned by
// reference), so setting this to an empty factory will free the old one.
GetInputMethodContextFactoryForTest() = LinuxInputMethodContextFactory();
#elif BUILDFLAG(IS_WIN)
TSFBridge::Shutdown();
#endif
}
} // namespace ui