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