IME: Delegate ui::InputMethod construction to ozone
This gives ui::OzonePlatform control over ui::InputMethod creation in
ozone builds.
Bug: 943789, 978970
Test: various builds, ui_unittests
Change-Id: Ie7f8977bf2d36df4ed84cfcae5254add27aa97eb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1531600
Commit-Queue: Michael Spang <spang@chromium.org>
Reviewed-by: Shu Chen <shuchen@chromium.org>
Reviewed-by: Antonio Gomes <tonikitoo@igalia.com>
Cr-Commit-Position: refs/heads/master@{#674959}
diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
index 15ef7e3..a3a8b1f6 100644
--- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
+++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
@@ -49,6 +49,7 @@
#include "ui/base/ime/ime_bridge.h"
#include "ui/chromeos/ime/input_method_menu_item.h"
#include "ui/chromeos/ime/input_method_menu_manager.h"
+#include "ui/ozone/public/ozone_platform.h"
namespace chromeos {
namespace input_method {
@@ -920,10 +921,12 @@
component_extension_ime_manager_(new ComponentExtensionIMEManager()),
enable_extension_loading_(enable_extension_loading),
features_enabled_state_(InputMethodManager::FEATURE_ALL) {
- if (IsRunningAsSystemCompositor())
- keyboard_ = std::make_unique<ImeKeyboardImpl>();
- else
+ if (IsRunningAsSystemCompositor()) {
+ keyboard_ = std::make_unique<ImeKeyboardImpl>(
+ ui::OzonePlatform::GetInstance()->GetInputController());
+ } else {
keyboard_ = std::make_unique<FakeImeKeyboard>();
+ }
// Initializes the system IME list.
std::unique_ptr<ComponentExtensionIMEManagerDelegate> comp_delegate(
new ComponentExtensionIMEManagerImpl());
diff --git a/ui/base/ime/chromeos/BUILD.gn b/ui/base/ime/chromeos/BUILD.gn
index a76249de..b2ce01d 100644
--- a/ui/base/ime/chromeos/BUILD.gn
+++ b/ui/base/ime/chromeos/BUILD.gn
@@ -58,6 +58,6 @@
"//third_party/icu",
"//ui/base",
"//ui/chromeos/strings",
- "//ui/ozone",
+ "//ui/ozone:ozone_base",
]
}
diff --git a/ui/base/ime/chromeos/ime_keyboard_impl.cc b/ui/base/ime/chromeos/ime_keyboard_impl.cc
index 5a35b01..2f5db43b 100644
--- a/ui/base/ime/chromeos/ime_keyboard_impl.cc
+++ b/ui/base/ime/chromeos/ime_keyboard_impl.cc
@@ -5,14 +5,12 @@
#include "ui/base/ime/chromeos/ime_keyboard_impl.h"
#include "ui/ozone/public/input_controller.h"
-#include "ui/ozone/public/ozone_platform.h"
namespace chromeos {
namespace input_method {
-ImeKeyboardImpl::ImeKeyboardImpl()
- : input_controller_(
- ui::OzonePlatform::GetInstance()->GetInputController()) {}
+ImeKeyboardImpl::ImeKeyboardImpl(ui::InputController* input_controller)
+ : input_controller_(input_controller) {}
ImeKeyboardImpl::~ImeKeyboardImpl() = default;
diff --git a/ui/base/ime/chromeos/ime_keyboard_impl.h b/ui/base/ime/chromeos/ime_keyboard_impl.h
index a06dcef..33edf34 100644
--- a/ui/base/ime/chromeos/ime_keyboard_impl.h
+++ b/ui/base/ime/chromeos/ime_keyboard_impl.h
@@ -20,7 +20,7 @@
class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ImeKeyboardImpl
: public ImeKeyboard {
public:
- ImeKeyboardImpl();
+ ImeKeyboardImpl(ui::InputController* input_controller);
~ImeKeyboardImpl() override;
// ImeKeyboard:
@@ -35,7 +35,7 @@
bool CapsLockIsEnabled() override;
private:
- ui::InputController* input_controller_;
+ ui::InputController* const input_controller_;
DISALLOW_COPY_AND_ASSIGN(ImeKeyboardImpl);
};
diff --git a/ui/base/ime/init/BUILD.gn b/ui/base/ime/init/BUILD.gn
index f054326..57c1503 100644
--- a/ui/base/ime/init/BUILD.gn
+++ b/ui/base/ime/init/BUILD.gn
@@ -33,13 +33,10 @@
if (is_mac) {
deps += [ "//ui/base/ime/mac" ]
}
- if (is_chromeos) {
- deps += [ "//ui/base/ime/chromeos" ]
- }
- if (is_fuchsia) {
- deps += [ "//ui/base/ime/fuchsia" ]
- }
if (is_linux && !is_chromeos) {
deps += [ "//ui/base/ime/linux" ]
}
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
}
diff --git a/ui/base/ime/init/DEPS b/ui/base/ime/init/DEPS
new file mode 100644
index 0000000..4127e4e5
--- /dev/null
+++ b/ui/base/ime/init/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+ui/ozone/public"
+]
diff --git a/ui/base/ime/init/input_method_factory.cc b/ui/base/ime/init/input_method_factory.cc
index 81f7f8a9..e12ee43 100644
--- a/ui/base/ime/init/input_method_factory.cc
+++ b/ui/base/ime/init/input_method_factory.cc
@@ -12,17 +12,15 @@
#include "ui/base/ui_base_features.h"
#include "ui/gfx/switches.h"
-#if defined(OS_CHROMEOS)
-#include "ui/base/ime/chromeos/input_method_chromeos.h"
-#elif defined(OS_WIN)
+#if defined(OS_WIN)
#include "ui/base/ime/win/input_method_win_imm32.h"
#include "ui/base/ime/win/input_method_win_tsf.h"
#elif defined(OS_MACOSX)
#include "ui/base/ime/mac/input_method_mac.h"
-#elif defined(OS_FUCHSIA)
-#include "ui/base/ime/fuchsia/input_method_fuchsia.h"
-#elif defined(USE_AURA) && (defined(USE_X11) || defined(USE_OZONE))
+#elif defined(USE_X11)
#include "ui/base/ime/linux/input_method_auralinux.h"
+#elif defined(USE_OZONE)
+#include "ui/ozone/public/ozone_platform.h"
#else
#include "ui/base/ime/input_method_minimal.h"
#endif
@@ -57,9 +55,7 @@
if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kHeadless))
return base::WrapUnique(new MockInputMethod(delegate));
-#if defined(OS_CHROMEOS)
- return std::make_unique<InputMethodChromeOS>(delegate);
-#elif defined(OS_WIN)
+#if defined(OS_WIN)
if (base::FeatureList::IsEnabled(features::kTSFImeSupport) &&
base::win::GetVersion() >= base::win::Version::WIN10_RS3) {
return std::make_unique<InputMethodWinTSF>(delegate, widget);
@@ -67,10 +63,10 @@
return std::make_unique<InputMethodWinImm32>(delegate, widget);
#elif defined(OS_MACOSX)
return std::make_unique<InputMethodMac>(delegate);
-#elif defined(OS_FUCHSIA)
- return std::make_unique<InputMethodFuchsia>(delegate);
-#elif defined(USE_AURA) && (defined(USE_X11) || defined(USE_OZONE))
+#elif defined(USE_X11)
return std::make_unique<InputMethodAuraLinux>(delegate);
+#elif defined(USE_OZONE)
+ return ui::OzonePlatform::GetInstance()->CreateInputMethod(delegate);
#else
return std::make_unique<InputMethodMinimal>(delegate);
#endif
diff --git a/ui/ozone/BUILD.gn b/ui/ozone/BUILD.gn
index 6edc889..daa2f76 100644
--- a/ui/ozone/BUILD.gn
+++ b/ui/ozone/BUILD.gn
@@ -132,6 +132,7 @@
"//ui/ozone/common/*",
"//ui/ozone/public/interfaces",
"//ui/ozone/platform/*",
+ "//ui/base/ime/chromeos/*",
]
# Out of tree platforms can depend on this.
diff --git a/ui/ozone/platform/cast/BUILD.gn b/ui/ozone/platform/cast/BUILD.gn
index ade393a..9940dee 100644
--- a/ui/ozone/platform/cast/BUILD.gn
+++ b/ui/ozone/platform/cast/BUILD.gn
@@ -43,6 +43,7 @@
"//chromecast:chromecast_buildflags",
"//chromecast/base:base",
"//chromecast/graphics:libcast_graphics_1.0",
+ "//ui/base/ime",
"//ui/events/ozone:events_ozone",
"//ui/events/ozone:events_ozone_evdev",
"//ui/events/ozone:events_ozone_layout",
diff --git a/ui/ozone/platform/cast/ozone_platform_cast.cc b/ui/ozone/platform/cast/ozone_platform_cast.cc
index 5eca91a..fc04766 100644
--- a/ui/ozone/platform/cast/ozone_platform_cast.cc
+++ b/ui/ozone/platform/cast/ozone_platform_cast.cc
@@ -14,6 +14,7 @@
#include "chromecast/chromecast_buildflags.h"
#include "chromecast/public/cast_egl_platform.h"
#include "chromecast/public/cast_egl_platform_shlib.h"
+#include "ui/base/ime/input_method_minimal.h"
#include "ui/display/types/native_display_delegate.h"
#include "ui/events/ozone/device/device_manager.h"
#include "ui/events/ozone/evdev/event_factory_evdev.h"
@@ -103,6 +104,11 @@
// On Cast platform the display is initialized by low-level non-Ozone code.
return nullptr;
}
+ std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) override {
+ return std::make_unique<InputMethodMinimal>(delegate);
+ }
+
bool IsNativePixmapConfigSupported(gfx::BufferFormat format,
gfx::BufferUsage usage) const override {
return format == gfx::BufferFormat::BGRA_8888 &&
diff --git a/ui/ozone/platform/drm/BUILD.gn b/ui/ozone/platform/drm/BUILD.gn
index 55e26c2..c195b2d 100644
--- a/ui/ozone/platform/drm/BUILD.gn
+++ b/ui/ozone/platform/drm/BUILD.gn
@@ -134,6 +134,7 @@
"//third_party/libsync",
"//third_party/minigbm",
"//ui/base",
+ "//ui/base/ime",
"//ui/display",
"//ui/display/types",
"//ui/display/util",
@@ -154,6 +155,10 @@
"//ui/platform_window",
]
+ if (is_chromeos) {
+ deps += [ "//ui/base/ime/chromeos" ]
+ }
+
if (enable_vulkan) {
sources += [
"gpu/vulkan_implementation_gbm.cc",
@@ -195,6 +200,7 @@
"//build/config/linux/libdrm",
"//skia",
"//testing/gtest",
+ "//ui/base/ime",
"//ui/gfx",
"//ui/ozone:platform",
"//ui/ozone/common",
diff --git a/ui/ozone/platform/drm/ozone_platform_gbm.cc b/ui/ozone/platform/drm/ozone_platform_gbm.cc
index d762d447..5b40dfc 100644
--- a/ui/ozone/platform/drm/ozone_platform_gbm.cc
+++ b/ui/ozone/platform/drm/ozone_platform_gbm.cc
@@ -57,6 +57,12 @@
#include "ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h"
#endif
+#if defined(OS_CHROMEOS)
+#include "ui/base/ime/chromeos/input_method_chromeos.h"
+#else
+#include "ui/base/ime/input_method_minimal.h"
+#endif
+
namespace ui {
namespace {
@@ -155,6 +161,14 @@
override {
return std::make_unique<DrmNativeDisplayDelegate>(display_manager_.get());
}
+ std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) override {
+#if defined(OS_CHROMEOS)
+ return std::make_unique<InputMethodChromeOS>(delegate);
+#else
+ return std::make_unique<InputMethodMinimal>(delegate);
+#endif
+ }
bool IsNativePixmapConfigSupported(gfx::BufferFormat format,
gfx::BufferUsage usage) const override {
diff --git a/ui/ozone/platform/headless/BUILD.gn b/ui/ozone/platform/headless/BUILD.gn
index 64198049..635cc8f 100644
--- a/ui/ozone/platform/headless/BUILD.gn
+++ b/ui/ozone/platform/headless/BUILD.gn
@@ -26,6 +26,7 @@
"//base",
"//skia",
"//ui/base",
+ "//ui/base/ime",
"//ui/events",
"//ui/events/ozone:events_ozone_layout",
"//ui/events/platform",
@@ -35,4 +36,8 @@
"//ui/platform_window",
"//ui/platform_window/stub",
]
+
+ if (is_fuchsia) {
+ deps += [ "//ui/base/ime/fuchsia" ]
+ }
}
diff --git a/ui/ozone/platform/headless/ozone_platform_headless.cc b/ui/ozone/platform/headless/ozone_platform_headless.cc
index 1bf25803..7a2a1c2 100644
--- a/ui/ozone/platform/headless/ozone_platform_headless.cc
+++ b/ui/ozone/platform/headless/ozone_platform_headless.cc
@@ -9,7 +9,9 @@
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/macros.h"
+#include "build/build_config.h"
#include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h"
+#include "ui/base/ime/input_method_minimal.h"
#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
#include "ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h"
#include "ui/events/platform/platform_event_source.h"
@@ -26,6 +28,10 @@
#include "ui/ozone/public/system_input_injector.h"
#include "ui/platform_window/platform_window_init_properties.h"
+#if defined(OS_FUCHSIA)
+#include "ui/base/ime/fuchsia/input_method_fuchsia.h"
+#endif
+
namespace ui {
namespace {
@@ -78,6 +84,14 @@
override {
return std::make_unique<HeadlessNativeDisplayDelegate>();
}
+ std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) override {
+#if defined(OS_FUCHSIA)
+ return std::make_unique<InputMethodFuchsia>(delegate);
+#else
+ return std::make_unique<InputMethodMinimal>(delegate);
+#endif
+ }
void InitializeUI(const InitParams& params) override {
window_manager_ = std::make_unique<HeadlessWindowManager>();
diff --git a/ui/ozone/platform/magma/BUILD.gn b/ui/ozone/platform/magma/BUILD.gn
index 6afd9d7..e4873406 100644
--- a/ui/ozone/platform/magma/BUILD.gn
+++ b/ui/ozone/platform/magma/BUILD.gn
@@ -24,6 +24,7 @@
"//base",
"//skia",
"//ui/base",
+ "//ui/base/ime",
"//ui/display/fake",
"//ui/events",
"//ui/events/ozone:events_ozone_layout",
diff --git a/ui/ozone/platform/magma/ozone_platform_magma.cc b/ui/ozone/platform/magma/ozone_platform_magma.cc
index e5b661b..12367d5 100644
--- a/ui/ozone/platform/magma/ozone_platform_magma.cc
+++ b/ui/ozone/platform/magma/ozone_platform_magma.cc
@@ -11,6 +11,7 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h"
+#include "ui/base/ime/input_method_minimal.h"
#include "ui/display/fake/fake_display_delegate.h"
#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
#include "ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h"
@@ -77,6 +78,10 @@
override {
return std::make_unique<display::FakeDisplayDelegate>();
}
+ std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) override {
+ return std::make_unique<InputMethodMinimal>(delegate);
+ }
void InitializeUI(const InitParams& params) override {
window_manager_ = std::make_unique<MagmaWindowManager>();
diff --git a/ui/ozone/platform/scenic/BUILD.gn b/ui/ozone/platform/scenic/BUILD.gn
index 59d1d8ae..39e7355 100644
--- a/ui/ozone/platform/scenic/BUILD.gn
+++ b/ui/ozone/platform/scenic/BUILD.gn
@@ -53,6 +53,7 @@
"//third_party/fuchsia-sdk/sdk:ui_gfx",
"//third_party/fuchsia-sdk/sdk:ui_scenic",
"//ui/base",
+ "//ui/base/ime/fuchsia",
"//ui/display/fake",
"//ui/events:dom_keycode_converter",
"//ui/events/ozone:events_ozone_layout",
diff --git a/ui/ozone/platform/scenic/ozone_platform_scenic.cc b/ui/ozone/platform/scenic/ozone_platform_scenic.cc
index 237f106..45e47d3 100644
--- a/ui/ozone/platform/scenic/ozone_platform_scenic.cc
+++ b/ui/ozone/platform/scenic/ozone_platform_scenic.cc
@@ -13,6 +13,7 @@
#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop_current.h"
#include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h"
+#include "ui/base/ime/fuchsia/input_method_fuchsia.h"
#include "ui/display/fake/fake_display_delegate.h"
#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
#include "ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h"
@@ -112,6 +113,11 @@
return window_manager_->CreateScreen();
}
+ std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) override {
+ return std::make_unique<InputMethodFuchsia>(delegate);
+ }
+
void InitializeUI(const InitParams& params) override {
if (!PlatformEventSource::GetInstance())
platform_event_source_ = std::make_unique<ScenicPlatformEventSource>();
diff --git a/ui/ozone/platform/wayland/ozone_platform_wayland.cc b/ui/ozone/platform/wayland/ozone_platform_wayland.cc
index 17bb667..0e442dd 100644
--- a/ui/ozone/platform/wayland/ozone_platform_wayland.cc
+++ b/ui/ozone/platform/wayland/ozone_platform_wayland.cc
@@ -13,6 +13,7 @@
#include "base/memory/ptr_util.h"
#include "ui/base/buildflags.h"
#include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h"
+#include "ui/base/ime/linux/input_method_auralinux.h"
#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
#include "ui/gfx/linux/client_native_pixmap_dmabuf.h"
#include "ui/ozone/common/stub_overlay_manager.h"
@@ -97,16 +98,6 @@
std::unique_ptr<PlatformWindow> CreatePlatformWindow(
PlatformWindowDelegate* delegate,
PlatformWindowInitProperties properties) override {
- // Some unit tests may try to set custom input method context factory
- // after InitializeUI. Thus instead of creating factory in InitializeUI
- // it is set at this point if none exists
- if (!LinuxInputMethodContextFactory::instance() &&
- !input_method_context_factory_) {
- auto* factory = new WaylandInputMethodContextFactory(connection_.get());
- input_method_context_factory_.reset(factory);
- LinuxInputMethodContextFactory::SetInstance(factory);
- }
-
auto window = std::make_unique<WaylandWindow>(delegate, connection_.get());
if (!window->Initialize(std::move(properties)))
return nullptr;
@@ -131,6 +122,21 @@
return connection_->clipboard();
}
+ std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) override {
+ // Some unit tests may try to set custom input method context factory
+ // after InitializeUI. Thus instead of creating factory in InitializeUI
+ // it is set at this point if none exists
+ if (!LinuxInputMethodContextFactory::instance() &&
+ !input_method_context_factory_) {
+ auto* factory = new WaylandInputMethodContextFactory(connection_.get());
+ input_method_context_factory_.reset(factory);
+ LinuxInputMethodContextFactory::SetInstance(factory);
+ }
+
+ return std::make_unique<InputMethodAuraLinux>(delegate);
+ }
+
bool IsNativePixmapConfigSupported(gfx::BufferFormat format,
gfx::BufferUsage usage) const override {
// If there is no drm render node device available, native pixmaps are not
diff --git a/ui/ozone/platform/windows/ozone_platform_windows.cc b/ui/ozone/platform/windows/ozone_platform_windows.cc
index 5d7a8e746..702dcb9 100644
--- a/ui/ozone/platform/windows/ozone_platform_windows.cc
+++ b/ui/ozone/platform/windows/ozone_platform_windows.cc
@@ -76,6 +76,11 @@
override {
return std::make_unique<display::FakeDisplayDelegate>();
}
+ std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) override {
+ NOTREACHED();
+ return nullptr;
+ }
void InitializeUI(const InitParams& params) override {
window_manager_ = std::make_unique<WindowsWindowManager>();
diff --git a/ui/ozone/platform/x11/BUILD.gn b/ui/ozone/platform/x11/BUILD.gn
index 07ee634..42637c3 100644
--- a/ui/ozone/platform/x11/BUILD.gn
+++ b/ui/ozone/platform/x11/BUILD.gn
@@ -41,6 +41,7 @@
"//gpu/vulkan:buildflags",
"//skia",
"//ui/base",
+ "//ui/base/ime",
"//ui/base/x",
"//ui/display/fake",
"//ui/events",
@@ -59,6 +60,10 @@
"//ui/platform_window/x11",
]
+ if (is_chromeos) {
+ deps += [ "//ui/base/ime/chromeos" ]
+ }
+
if (enable_vulkan) {
deps += [ "//gpu/vulkan/x" ]
}
diff --git a/ui/ozone/platform/x11/ozone_platform_x11.cc b/ui/ozone/platform/x11/ozone_platform_x11.cc
index 3a65ca6..e5f7197f 100644
--- a/ui/ozone/platform/x11/ozone_platform_x11.cc
+++ b/ui/ozone/platform/x11/ozone_platform_x11.cc
@@ -28,6 +28,12 @@
#include "ui/platform_window/platform_window.h"
#include "ui/platform_window/platform_window_init_properties.h"
+#if defined(OS_CHROMEOS)
+#include "ui/base/ime/chromeos/input_method_chromeos.h"
+#else
+#include "ui/base/ime/input_method_minimal.h"
+#endif
+
namespace ui {
namespace {
@@ -87,6 +93,17 @@
return clipboard_.get();
}
+ std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) override {
+#if defined(OS_CHROMEOS)
+ return std::make_unique<InputMethodChromeOS>(delegate);
+#else
+ // TODO(spang): Fix InputMethodAuraLinux which requires another level
+ // of initization.
+ return std::make_unique<InputMethodMinimal>(delegate);
+#endif
+ }
+
void InitializeUI(const InitParams& params) override {
InitializeCommon(params);
CreatePlatformEventSource();
diff --git a/ui/ozone/public/ozone_platform.h b/ui/ozone/public/ozone_platform.h
index 67d1357..fc22f54 100644
--- a/ui/ozone/public/ozone_platform.h
+++ b/ui/ozone/public/ozone_platform.h
@@ -40,6 +40,11 @@
class SystemInputInjector;
class PlatformClipboard;
+namespace internal {
+class InputMethodDelegate;
+} // namespace internal
+class InputMethod;
+
struct PlatformWindowInitProperties;
// Base class for Ozone platform implementations.
@@ -155,6 +160,8 @@
CreateNativeDisplayDelegate() = 0;
virtual std::unique_ptr<PlatformScreen> CreateScreen();
virtual PlatformClipboard* GetPlatformClipboard();
+ virtual std::unique_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate) = 0;
// Returns true if the specified buffer format is supported.
virtual bool IsNativePixmapConfigSupported(gfx::BufferFormat format,