Index: ash/shell.cc |
diff --git a/ash/shell.cc b/ash/shell.cc |
index fdc5bff17f49f274f7a740f5bca8ececc8a56868..6c05ecc6534cd9f2d0189da8c53a77d9f2894dbd 100644 |
--- a/ash/shell.cc |
+++ b/ash/shell.cc |
@@ -1239,6 +1239,15 @@ void Shell::OnSessionStateChanged(session_manager::SessionState state) { |
// multiple times (e.g. initial login vs. multiprofile add session). |
if (state == session_manager::SessionState::ACTIVE) { |
InitializeShelf(); |
+ } |
+ // Recreates keyboard on user profile change, to refresh keyboard |
+ // extensions with the new profile and the extensions call proper IME. |
+ // |LOGGED_IN_NOT_ACTIVE| is needed so that the virtual keyboard works on |
+ // supervised user creation. crbug.com/712873 |
+ // |ACTIVE| is also needed for guest user workflow. |
+ if ((state == session_manager::SessionState::LOGGED_IN_NOT_ACTIVE || |
+ state == session_manager::SessionState::ACTIVE) && |
+ keyboard::IsKeyboardEnabled()) { |
if (GetAshConfig() != Config::MASH) { |
// Recreate the keyboard after initial login and after multiprofile login. |
CreateKeyboard(); |