The current revision of CEF references test_shell, which contains no implementation of IME (Input Method Editor) based keyboard input (mostly for East Asian Languages) and others such as voice based input. Form elements in chromium aren't using the Windows Edit Control, therefore the host window has to implement specific IME details. Otherwise IME input will either be broken or impossible.
Luckily, we have a good reference in the chromium project itself, the existing implementations are suitable for the current revision of CEF. The steps to provide IME support in CEF are as below:
1. Include chromium\src\chrome\browser\ime_input.cc and chromium\src\chrome\browser\ime_input.h in libcef_static project, no modification is needed.
2. Consult chromium\src\chrome\browser\renderer_host\render_widget_host_view_win.cc and chromium\src\chrome\renderer\render_widget.cc for usage on ImeInput class and required message handlers.
3. In CEF's webwidget_host.h and webwidget_host.cc, add the ImeInput instance, message handlers for WM_IME_SETCONTEXT; WM_IME_STARTCOMPOSITION; WM_IME_COMPOSITION; WM_IME_ENDCOMPOSITION, and other details such as OnInputLangChange and IMEUpdateStatus.
4. Because CEF is not using WTL, it's important to review |bHandled| argument in original message handlers (in render_widget_host_view_win.cc) to decide whether to return "0" or "DefWindowProc".
5. Chromium's implementation involves IPC, but CEF doesn't, we can control |webwidget_| directly, like the way "render_widget.cc" did (calling WebKit's internal support for IME).
This is a short guide for anyone who would like to include the IME capability in CEF based apps. And to Marshall, you probably would also need custom IME implementation for the new edition of CEF you talked about.