15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/display/display_manager.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h"
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
21b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chromeos/chromeos_switches.h"
22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chromeos/ime/ime_keyboard.h"
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_manager.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_ui_data_source.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui_message_handler.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/browser_resources.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using chromeos::input_method::ModifierKey;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebUIMessageHandler;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ui::WebDialogUI;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kLearnMoreURL[] =
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OFFICIAL_BUILD)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "chrome-extension://honijodknafkokifofgiaalefdiedpko/"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "main.html?answer=188743";
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "http://support.google.com/chromeos/bin/answer.py?answer=183101";
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ModifierToLabel {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const ModifierKey modifier;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* label;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} kModifierToLabels[] = {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {chromeos::input_method::kSearchKey, "search"},
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {chromeos::input_method::kControlKey, "ctrl"},
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {chromeos::input_method::kAltKey, "alt"},
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {chromeos::input_method::kVoidKey, "disabled"},
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {chromeos::input_method::kCapsLockKey, "caps lock"},
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  {chromeos::input_method::kEscapeKey, "esc"},
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct I18nContentToMessage {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* i18n_content;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int message;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} kI18nContentToMessage[] = {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayLearnMore", IDS_KEYBOARD_OVERLAY_LEARN_MORE },
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayTitle", IDS_KEYBOARD_OVERLAY_TITLE },
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayInstructions", IDS_KEYBOARD_OVERLAY_INSTRUCTIONS },
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayInstructionsHide", IDS_KEYBOARD_OVERLAY_INSTRUCTIONS_HIDE },
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateLastShelfItem",
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_SHELF_ITEM },
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateLastTab", IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_TAB },
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateShelfItem1",
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_1 },
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateShelfItem2",
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_2 },
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateShelfItem3",
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_3 },
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateShelfItem4",
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_4 },
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateShelfItem5",
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_5 },
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateShelfItem6",
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_6 },
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateShelfItem7",
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_7 },
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayActivateShelfItem8",
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_8 },
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateNextTab", IDS_KEYBOARD_OVERLAY_ACTIVATE_NEXT_TAB },
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivatePreviousTab",
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_ACTIVATE_PREVIOUS_TAB },
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateTab1", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_1 },
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateTab2", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_2 },
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateTab3", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_3 },
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateTab4", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_4 },
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateTab5", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_5 },
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateTab6", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_6 },
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateTab7", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_7 },
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayActivateTab8", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_8 },
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayAddWwwAndComAndOpenAddress",
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_ADD_WWW_AND_COM_AND_OPEN_ADDRESS },
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayBookmarkAllTabs", IDS_KEYBOARD_OVERLAY_BOOKMARK_ALL_TABS },
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayBookmarkCurrentPage",
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_BOOKMARK_CURRENT_PAGE },
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayBookmarkManager", IDS_KEYBOARD_OVERLAY_BOOKMARK_MANAGER },
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayCenterWindow", IDS_KEYBOARD_OVERLAY_CENTER_WINDOW },
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayClearBrowsingDataDialog",
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_CLEAR_BROWSING_DATA_DIALOG },
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayCloseTab", IDS_KEYBOARD_OVERLAY_CLOSE_TAB },
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayCloseWindow", IDS_KEYBOARD_OVERLAY_CLOSE_WINDOW },
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayCopy", IDS_KEYBOARD_OVERLAY_COPY },
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayCut", IDS_KEYBOARD_OVERLAY_CUT },
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayCycleThroughInputMethods",
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_CYCLE_THROUGH_INPUT_METHODS },
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayDecreaseKeyBrightness",
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_DECREASE_KEY_BRIGHTNESS },
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayDelete", IDS_KEYBOARD_OVERLAY_DELETE },
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayDeleteWord", IDS_KEYBOARD_OVERLAY_DELETE_WORD },
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayDeveloperTools", IDS_KEYBOARD_OVERLAY_DEVELOPER_TOOLS },
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayDockWindowLeft", IDS_KEYBOARD_OVERLAY_DOCK_WINDOW_LEFT },
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayDockWindowRight", IDS_KEYBOARD_OVERLAY_DOCK_WINDOW_RIGHT },
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayDomInspector", IDS_KEYBOARD_OVERLAY_DOM_INSPECTOR },
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayDownloads", IDS_KEYBOARD_OVERLAY_DOWNLOADS },
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayEnd", IDS_KEYBOARD_OVERLAY_END },
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF1", IDS_KEYBOARD_OVERLAY_F1 },
122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF10", IDS_KEYBOARD_OVERLAY_F10 },
123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF11", IDS_KEYBOARD_OVERLAY_F11 },
124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF12", IDS_KEYBOARD_OVERLAY_F12 },
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF2", IDS_KEYBOARD_OVERLAY_F2 },
126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF3", IDS_KEYBOARD_OVERLAY_F3 },
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF4", IDS_KEYBOARD_OVERLAY_F4 },
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF5", IDS_KEYBOARD_OVERLAY_F5 },
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF6", IDS_KEYBOARD_OVERLAY_F6 },
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF7", IDS_KEYBOARD_OVERLAY_F7 },
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF8", IDS_KEYBOARD_OVERLAY_F8 },
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayF9", IDS_KEYBOARD_OVERLAY_F9 },
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFindPreviousText",
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_FIND_PREVIOUS_TEXT },
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFindText", IDS_KEYBOARD_OVERLAY_FIND_TEXT },
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFindTextAgain", IDS_KEYBOARD_OVERLAY_FIND_TEXT_AGAIN },
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFocusAddressBar", IDS_KEYBOARD_OVERLAY_FOCUS_ADDRESS_BAR },
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFocusAddressBarInSearchMode",
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_FOCUS_ADDRESS_BAR_IN_SEARCH_MODE },
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFocusBookmarks", IDS_KEYBOARD_OVERLAY_FOCUS_BOOKMARKS },
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  { "keyboardOverlayFocusShelf", IDS_KEYBOARD_OVERLAY_FOCUS_SHELF },
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFocusNextPane", IDS_KEYBOARD_OVERLAY_FOCUS_NEXT_PANE },
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFocusPreviousPane",
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_FOCUS_PREVIOUS_PANE },
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayFocusToolbar", IDS_KEYBOARD_OVERLAY_FOCUS_TOOLBAR },
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayGoBack", IDS_KEYBOARD_OVERLAY_GO_BACK },
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayGoForward", IDS_KEYBOARD_OVERLAY_GO_FORWARD },
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayHelp", IDS_KEYBOARD_OVERLAY_HELP },
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayHistory", IDS_KEYBOARD_OVERLAY_HISTORY },
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayHome", IDS_KEYBOARD_OVERLAY_HOME },
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayIncreaseKeyBrightness",
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_INCREASE_KEY_BRIGHTNESS },
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayInputUnicodeCharacters",
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_INPUT_UNICODE_CHARACTERS },
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  { "keyboardOverlayInsert", IDS_KEYBOARD_OVERLAY_INSERT },
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayJavascriptConsole",
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_JAVASCRIPT_CONSOLE },
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayLockScreen", IDS_KEYBOARD_OVERLAY_LOCK_SCREEN },
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayLockScreenOrPowerOff",
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_LOCK_SCREEN_OR_POWER_OFF },
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayMagnifierDecreaseZoom",
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_MAGNIFIER_DECREASE_ZOOM },
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayMagnifierIncreaseZoom",
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_MAGNIFIER_INCREASE_ZOOM },
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayMaximizeWindow", IDS_KEYBOARD_OVERLAY_MAXIMIZE_WINDOW },
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayMinimizeWindow", IDS_KEYBOARD_OVERLAY_MINIMIZE_WINDOW },
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayMirrorMonitors", IDS_KEYBOARD_OVERLAY_MIRROR_MONITORS },
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayNewIncognitoWindow",
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_NEW_INCOGNITO_WINDOW },
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayNewTab", IDS_KEYBOARD_OVERLAY_NEW_TAB },
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayNewTerminal", IDS_KEYBOARD_OVERLAY_NEW_TERMINAL },
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayNewWindow", IDS_KEYBOARD_OVERLAY_NEW_WINDOW },
1736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  { "keyboardOverlayNextUser", IDS_KEYBOARD_OVERLAY_NEXT_USER },
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayNextWindow", IDS_KEYBOARD_OVERLAY_NEXT_WINDOW },
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayNextWord", IDS_KEYBOARD_OVERLAY_NEXT_WORD },
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { "keyboardOverlayOpen", IDS_KEYBOARD_OVERLAY_OPEN },
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayOpenAddressInNewTab",
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_OPEN_ADDRESS_IN_NEW_TAB },
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  { "keyboardOverlayOpenFileManager", IDS_KEYBOARD_OVERLAY_OPEN_FILE_MANAGER },
1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  { "keyboardOverlayOpenGoogleCloudPrint",
1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_OPEN_GOOGLE_CLOUD_PRINT },
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayPageDown", IDS_KEYBOARD_OVERLAY_PAGE_DOWN },
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayPageUp", IDS_KEYBOARD_OVERLAY_PAGE_UP },
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayPaste", IDS_KEYBOARD_OVERLAY_PASTE },
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayPasteAsPlainText",
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_PASTE_AS_PLAIN_TEXT },
1876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  { "keyboardOverlayPreviousUser", IDS_KEYBOARD_OVERLAY_PREVIOUS_USER },
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayPreviousWindow", IDS_KEYBOARD_OVERLAY_PREVIOUS_WINDOW },
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayPreviousWord", IDS_KEYBOARD_OVERLAY_PREVIOUS_WORD },
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayPrint", IDS_KEYBOARD_OVERLAY_PRINT },
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayReloadCurrentPage",
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_RELOAD_CURRENT_PAGE },
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayReloadIgnoringCache",
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_RELOAD_IGNORING_CACHE },
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayReopenLastClosedTab",
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_REOPEN_LAST_CLOSED_TAB },
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayReportIssue", IDS_KEYBOARD_OVERLAY_REPORT_ISSUE },
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { "keyboardOverlayResetScreenZoom", IDS_KEYBOARD_OVERLAY_RESET_SCREEN_ZOOM },
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayResetZoom", IDS_KEYBOARD_OVERLAY_RESET_ZOOM },
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { "keyboardOverlayRotateScreen", IDS_KEYBOARD_OVERLAY_ROTATE_SCREEN },
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlaySave", IDS_KEYBOARD_OVERLAY_SAVE },
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayScreenshotRegion",
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_SCREENSHOT_REGION },
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayScrollUpOnePage",
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_SCROLL_UP_ONE_PAGE },
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlaySelectAll", IDS_KEYBOARD_OVERLAY_SELECT_ALL },
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlaySelectPreviousInputMethod",
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_SELECT_PREVIOUS_INPUT_METHOD },
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlaySelectWordAtATime",
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_SELECT_WORD_AT_A_TIME },
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { "keyboardOverlayShowMessageCenter",
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    IDS_KEYBOARD_OVERLAY_SHOW_MESSAGE_CENTER },
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { "keyboardOverlayShowStatusMenu", IDS_KEYBOARD_OVERLAY_SHOW_STATUS_MENU },
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayShowWrenchMenu", IDS_KEYBOARD_OVERLAY_SHOW_WRENCH_MENU },
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlaySignOut", IDS_KEYBOARD_OVERLAY_SIGN_OUT },
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlaySwapPrimaryMonitor",
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_SWAP_PRIMARY_MONITOR },
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayTakeScreenshot", IDS_KEYBOARD_OVERLAY_TAKE_SCREENSHOT },
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayTaskManager", IDS_KEYBOARD_OVERLAY_TASK_MANAGER },
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayToggleBookmarkBar",
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_TOGGLE_BOOKMARK_BAR },
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayToggleCapsLock", IDS_KEYBOARD_OVERLAY_TOGGLE_CAPS_LOCK },
223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  { "keyboardOverlayToggleChromevoxSpokenFeedback",
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_TOGGLE_CHROMEVOX_SPOKEN_FEEDBACK },
225d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  { "keyboardOverlayToggleProjectionTouchHud",
226d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    IDS_KEYBOARD_OVERLAY_TOGGLE_PROJECTION_TOUCH_HUD },
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayToggleSpeechInput",
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_TOGGLE_SPEECH_INPUT },
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayUndo", IDS_KEYBOARD_OVERLAY_UNDO },
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayViewKeyboardOverlay",
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDS_KEYBOARD_OVERLAY_VIEW_KEYBOARD_OVERLAY },
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayViewSource", IDS_KEYBOARD_OVERLAY_VIEW_SOURCE },
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayWordMove", IDS_KEYBOARD_OVERLAY_WORD_MOVE },
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayZoomIn", IDS_KEYBOARD_OVERLAY_ZOOM_IN },
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  { "keyboardOverlayZoomOut", IDS_KEYBOARD_OVERLAY_ZOOM_OUT },
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { "keyboardOverlayZoomScreenIn", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_IN },
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { "keyboardOverlayZoomScreenOut", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_OUT },
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ModifierKeyToLabel(ModifierKey modifier) {
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kModifierToLabels); ++i) {
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (modifier == kModifierToLabels[i].modifier) {
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return kModifierToLabels[i].label;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "";
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)content::WebUIDataSource* CreateKeyboardOverlayUIHTMLSource() {
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebUIDataSource* source =
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::WebUIDataSource::Create(chrome::kChromeUIKeyboardOverlayHost);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kI18nContentToMessage); ++i) {
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    source->AddLocalizedString(kI18nContentToMessage[i].i18n_content,
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               kI18nContentToMessage[i].message);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  source->AddString("keyboardOverlayLearnMoreURL",
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    base::UTF8ToUTF16(kLearnMoreURL));
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  source->AddBoolean("keyboardOverlayHasChromeOSDiamondKey",
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     CommandLine::ForCurrentProcess()->HasSwitch(
262b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                         chromeos::switches::kHasChromeOSDiamondKey));
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ash::Shell* shell = ash::Shell::GetInstance();
264c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ash::DisplayManager* display_manager = shell->display_manager();
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  source->AddBoolean("keyboardOverlayIsDisplayUIScalingEnabled",
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     display_manager->IsDisplayUIScalingEnabled());
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  source->SetJsonPath("strings.js");
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  source->SetUseJsonJSFormatV2();
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  source->AddResourcePath("keyboard_overlay.js", IDR_KEYBOARD_OVERLAY_JS);
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  source->SetDefaultResource(IDR_KEYBOARD_OVERLAY_HTML);
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return source;
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The handler for Javascript messages related to the "keyboardoverlay" view.
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class KeyboardOverlayHandler
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public WebUIMessageHandler,
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public base::SupportsWeakPtr<KeyboardOverlayHandler> {
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit KeyboardOverlayHandler(Profile* profile);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~KeyboardOverlayHandler();
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebUIMessageHandler implementation.
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RegisterMessages() OVERRIDE;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the page requires the input method ID corresponding to the
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // current input method or keyboard layout during initialization.
2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void GetInputMethodId(const base::ListValue* args);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the page requres the information of modifier key remapping
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // during the initialization.
2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void GetLabelMap(const base::ListValue* args);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the learn more link is clicked.
2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OpenLearnMorePage(const base::ListValue* args);
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_;
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(KeyboardOverlayHandler);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeyboardOverlayHandler
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)KeyboardOverlayHandler::KeyboardOverlayHandler(Profile* profile)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : profile_(profile) {
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)KeyboardOverlayHandler::~KeyboardOverlayHandler() {
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void KeyboardOverlayHandler::RegisterMessages() {
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("getInputMethodId",
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&KeyboardOverlayHandler::GetInputMethodId,
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("getLabelMap",
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&KeyboardOverlayHandler::GetLabelMap,
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("openLearnMorePage",
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&KeyboardOverlayHandler::OpenLearnMorePage,
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void KeyboardOverlayHandler::GetInputMethodId(const base::ListValue* args) {
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::input_method::InputMethodManager* manager =
330a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      chromeos::input_method::InputMethodManager::Get();
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const chromeos::input_method::InputMethodDescriptor& descriptor =
33203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      manager->GetActiveIMEState()->GetCurrentInputMethod();
3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::StringValue param(descriptor.id());
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("initKeyboardOverlayId", param);
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void KeyboardOverlayHandler::GetLabelMap(const base::ListValue* args) {
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(profile_);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = profile_->GetPrefs();
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<ModifierKey, ModifierKey> ModifierMap;
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ModifierMap modifier_map;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  modifier_map[chromeos::input_method::kSearchKey] = static_cast<ModifierKey>(
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->GetInteger(prefs::kLanguageRemapSearchKeyTo));
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  modifier_map[chromeos::input_method::kControlKey] = static_cast<ModifierKey>(
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->GetInteger(prefs::kLanguageRemapControlKeyTo));
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  modifier_map[chromeos::input_method::kAltKey] = static_cast<ModifierKey>(
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->GetInteger(prefs::kLanguageRemapAltKeyTo));
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(mazda): Support prefs::kLanguageRemapCapsLockKeyTo once Caps Lock is
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // added to the overlay UI.
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue dict;
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (ModifierMap::const_iterator i = modifier_map.begin();
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       i != modifier_map.end(); ++i) {
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict.SetString(ModifierKeyToLabel(i->first), ModifierKeyToLabel(i->second));
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("initIdentifierMap", dict);
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void KeyboardOverlayHandler::OpenLearnMorePage(const base::ListValue* args) {
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->GetWebContents()->GetDelegate()->OpenURLFromTab(
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents(),
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::OpenURLParams(GURL(kLearnMoreURL),
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             content::Referrer(),
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             NEW_FOREGROUND_TAB,
3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             ui::PAGE_TRANSITION_LINK,
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             false));
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeyboardOverlayUI
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)KeyboardOverlayUI::KeyboardOverlayUI(content::WebUI* web_ui)
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : WebDialogUI(web_ui) {
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  KeyboardOverlayHandler* handler = new KeyboardOverlayHandler(profile);
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui->AddMessageHandler(handler);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up the chrome://keyboardoverlay/ source.
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebUIDataSource::Add(profile, CreateKeyboardOverlayUIHTMLSource());
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385