1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.h" 6 7#include "ash/display/display_manager.h" 8#include "ash/shell.h" 9#include "base/bind.h" 10#include "base/bind_helpers.h" 11#include "base/command_line.h" 12#include "base/memory/weak_ptr.h" 13#include "base/prefs/pref_service.h" 14#include "base/strings/utf_string_conversions.h" 15#include "base/values.h" 16#include "chrome/browser/profiles/profile.h" 17#include "chrome/common/pref_names.h" 18#include "chrome/common/url_constants.h" 19#include "chrome/grit/chromium_strings.h" 20#include "chrome/grit/generated_resources.h" 21#include "chromeos/chromeos_switches.h" 22#include "chromeos/ime/ime_keyboard.h" 23#include "chromeos/ime/input_method_manager.h" 24#include "content/public/browser/page_navigator.h" 25#include "content/public/browser/web_contents.h" 26#include "content/public/browser/web_contents_delegate.h" 27#include "content/public/browser/web_ui.h" 28#include "content/public/browser/web_ui_data_source.h" 29#include "content/public/browser/web_ui_message_handler.h" 30#include "grit/browser_resources.h" 31 32using chromeos::input_method::ModifierKey; 33using content::WebUIMessageHandler; 34using ui::WebDialogUI; 35 36namespace { 37 38const char kLearnMoreURL[] = 39#if defined(OFFICIAL_BUILD) 40 "chrome-extension://honijodknafkokifofgiaalefdiedpko/" 41 "main.html?answer=188743"; 42#else 43 "http://support.google.com/chromeos/bin/answer.py?answer=183101"; 44#endif 45 46struct ModifierToLabel { 47 const ModifierKey modifier; 48 const char* label; 49} kModifierToLabels[] = { 50 {chromeos::input_method::kSearchKey, "search"}, 51 {chromeos::input_method::kControlKey, "ctrl"}, 52 {chromeos::input_method::kAltKey, "alt"}, 53 {chromeos::input_method::kVoidKey, "disabled"}, 54 {chromeos::input_method::kCapsLockKey, "caps lock"}, 55 {chromeos::input_method::kEscapeKey, "esc"}, 56}; 57 58struct I18nContentToMessage { 59 const char* i18n_content; 60 int message; 61} kI18nContentToMessage[] = { 62 { "keyboardOverlayLearnMore", IDS_KEYBOARD_OVERLAY_LEARN_MORE }, 63 { "keyboardOverlayTitle", IDS_KEYBOARD_OVERLAY_TITLE }, 64 { "keyboardOverlayInstructions", IDS_KEYBOARD_OVERLAY_INSTRUCTIONS }, 65 { "keyboardOverlayInstructionsHide", IDS_KEYBOARD_OVERLAY_INSTRUCTIONS_HIDE }, 66 { "keyboardOverlayActivateLastShelfItem", 67 IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_SHELF_ITEM }, 68 { "keyboardOverlayActivateLastTab", IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_TAB }, 69 { "keyboardOverlayActivateShelfItem1", 70 IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_1 }, 71 { "keyboardOverlayActivateShelfItem2", 72 IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_2 }, 73 { "keyboardOverlayActivateShelfItem3", 74 IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_3 }, 75 { "keyboardOverlayActivateShelfItem4", 76 IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_4 }, 77 { "keyboardOverlayActivateShelfItem5", 78 IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_5 }, 79 { "keyboardOverlayActivateShelfItem6", 80 IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_6 }, 81 { "keyboardOverlayActivateShelfItem7", 82 IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_7 }, 83 { "keyboardOverlayActivateShelfItem8", 84 IDS_KEYBOARD_OVERLAY_ACTIVATE_SHELF_ITEM_8 }, 85 { "keyboardOverlayActivateNextTab", IDS_KEYBOARD_OVERLAY_ACTIVATE_NEXT_TAB }, 86 { "keyboardOverlayActivatePreviousTab", 87 IDS_KEYBOARD_OVERLAY_ACTIVATE_PREVIOUS_TAB }, 88 { "keyboardOverlayActivateTab1", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_1 }, 89 { "keyboardOverlayActivateTab2", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_2 }, 90 { "keyboardOverlayActivateTab3", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_3 }, 91 { "keyboardOverlayActivateTab4", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_4 }, 92 { "keyboardOverlayActivateTab5", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_5 }, 93 { "keyboardOverlayActivateTab6", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_6 }, 94 { "keyboardOverlayActivateTab7", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_7 }, 95 { "keyboardOverlayActivateTab8", IDS_KEYBOARD_OVERLAY_ACTIVATE_TAB_8 }, 96 { "keyboardOverlayAddWwwAndComAndOpenAddress", 97 IDS_KEYBOARD_OVERLAY_ADD_WWW_AND_COM_AND_OPEN_ADDRESS }, 98 { "keyboardOverlayBookmarkAllTabs", IDS_KEYBOARD_OVERLAY_BOOKMARK_ALL_TABS }, 99 { "keyboardOverlayBookmarkCurrentPage", 100 IDS_KEYBOARD_OVERLAY_BOOKMARK_CURRENT_PAGE }, 101 { "keyboardOverlayBookmarkManager", IDS_KEYBOARD_OVERLAY_BOOKMARK_MANAGER }, 102 { "keyboardOverlayCenterWindow", IDS_KEYBOARD_OVERLAY_CENTER_WINDOW }, 103 { "keyboardOverlayClearBrowsingDataDialog", 104 IDS_KEYBOARD_OVERLAY_CLEAR_BROWSING_DATA_DIALOG }, 105 { "keyboardOverlayCloseTab", IDS_KEYBOARD_OVERLAY_CLOSE_TAB }, 106 { "keyboardOverlayCloseWindow", IDS_KEYBOARD_OVERLAY_CLOSE_WINDOW }, 107 { "keyboardOverlayCopy", IDS_KEYBOARD_OVERLAY_COPY }, 108 { "keyboardOverlayCut", IDS_KEYBOARD_OVERLAY_CUT }, 109 { "keyboardOverlayCycleThroughInputMethods", 110 IDS_KEYBOARD_OVERLAY_CYCLE_THROUGH_INPUT_METHODS }, 111 { "keyboardOverlayDecreaseKeyBrightness", 112 IDS_KEYBOARD_OVERLAY_DECREASE_KEY_BRIGHTNESS }, 113 { "keyboardOverlayDelete", IDS_KEYBOARD_OVERLAY_DELETE }, 114 { "keyboardOverlayDeleteWord", IDS_KEYBOARD_OVERLAY_DELETE_WORD }, 115 { "keyboardOverlayDeveloperTools", IDS_KEYBOARD_OVERLAY_DEVELOPER_TOOLS }, 116 { "keyboardOverlayDockWindowLeft", IDS_KEYBOARD_OVERLAY_DOCK_WINDOW_LEFT }, 117 { "keyboardOverlayDockWindowRight", IDS_KEYBOARD_OVERLAY_DOCK_WINDOW_RIGHT }, 118 { "keyboardOverlayDomInspector", IDS_KEYBOARD_OVERLAY_DOM_INSPECTOR }, 119 { "keyboardOverlayDownloads", IDS_KEYBOARD_OVERLAY_DOWNLOADS }, 120 { "keyboardOverlayEnd", IDS_KEYBOARD_OVERLAY_END }, 121 { "keyboardOverlayF1", IDS_KEYBOARD_OVERLAY_F1 }, 122 { "keyboardOverlayF10", IDS_KEYBOARD_OVERLAY_F10 }, 123 { "keyboardOverlayF11", IDS_KEYBOARD_OVERLAY_F11 }, 124 { "keyboardOverlayF12", IDS_KEYBOARD_OVERLAY_F12 }, 125 { "keyboardOverlayF2", IDS_KEYBOARD_OVERLAY_F2 }, 126 { "keyboardOverlayF3", IDS_KEYBOARD_OVERLAY_F3 }, 127 { "keyboardOverlayF4", IDS_KEYBOARD_OVERLAY_F4 }, 128 { "keyboardOverlayF5", IDS_KEYBOARD_OVERLAY_F5 }, 129 { "keyboardOverlayF6", IDS_KEYBOARD_OVERLAY_F6 }, 130 { "keyboardOverlayF7", IDS_KEYBOARD_OVERLAY_F7 }, 131 { "keyboardOverlayF8", IDS_KEYBOARD_OVERLAY_F8 }, 132 { "keyboardOverlayF9", IDS_KEYBOARD_OVERLAY_F9 }, 133 { "keyboardOverlayFindPreviousText", 134 IDS_KEYBOARD_OVERLAY_FIND_PREVIOUS_TEXT }, 135 { "keyboardOverlayFindText", IDS_KEYBOARD_OVERLAY_FIND_TEXT }, 136 { "keyboardOverlayFindTextAgain", IDS_KEYBOARD_OVERLAY_FIND_TEXT_AGAIN }, 137 { "keyboardOverlayFocusAddressBar", IDS_KEYBOARD_OVERLAY_FOCUS_ADDRESS_BAR }, 138 { "keyboardOverlayFocusAddressBarInSearchMode", 139 IDS_KEYBOARD_OVERLAY_FOCUS_ADDRESS_BAR_IN_SEARCH_MODE }, 140 { "keyboardOverlayFocusBookmarks", IDS_KEYBOARD_OVERLAY_FOCUS_BOOKMARKS }, 141 { "keyboardOverlayFocusShelf", IDS_KEYBOARD_OVERLAY_FOCUS_SHELF }, 142 { "keyboardOverlayFocusNextPane", IDS_KEYBOARD_OVERLAY_FOCUS_NEXT_PANE }, 143 { "keyboardOverlayFocusPreviousPane", 144 IDS_KEYBOARD_OVERLAY_FOCUS_PREVIOUS_PANE }, 145 { "keyboardOverlayFocusToolbar", IDS_KEYBOARD_OVERLAY_FOCUS_TOOLBAR }, 146 { "keyboardOverlayGoBack", IDS_KEYBOARD_OVERLAY_GO_BACK }, 147 { "keyboardOverlayGoForward", IDS_KEYBOARD_OVERLAY_GO_FORWARD }, 148 { "keyboardOverlayHelp", IDS_KEYBOARD_OVERLAY_HELP }, 149 { "keyboardOverlayHistory", IDS_KEYBOARD_OVERLAY_HISTORY }, 150 { "keyboardOverlayHome", IDS_KEYBOARD_OVERLAY_HOME }, 151 { "keyboardOverlayIncreaseKeyBrightness", 152 IDS_KEYBOARD_OVERLAY_INCREASE_KEY_BRIGHTNESS }, 153 { "keyboardOverlayInputUnicodeCharacters", 154 IDS_KEYBOARD_OVERLAY_INPUT_UNICODE_CHARACTERS }, 155 { "keyboardOverlayInsert", IDS_KEYBOARD_OVERLAY_INSERT }, 156 { "keyboardOverlayJavascriptConsole", 157 IDS_KEYBOARD_OVERLAY_JAVASCRIPT_CONSOLE }, 158 { "keyboardOverlayLockScreen", IDS_KEYBOARD_OVERLAY_LOCK_SCREEN }, 159 { "keyboardOverlayLockScreenOrPowerOff", 160 IDS_KEYBOARD_OVERLAY_LOCK_SCREEN_OR_POWER_OFF }, 161 { "keyboardOverlayMagnifierDecreaseZoom", 162 IDS_KEYBOARD_OVERLAY_MAGNIFIER_DECREASE_ZOOM }, 163 { "keyboardOverlayMagnifierIncreaseZoom", 164 IDS_KEYBOARD_OVERLAY_MAGNIFIER_INCREASE_ZOOM }, 165 { "keyboardOverlayMaximizeWindow", IDS_KEYBOARD_OVERLAY_MAXIMIZE_WINDOW }, 166 { "keyboardOverlayMinimizeWindow", IDS_KEYBOARD_OVERLAY_MINIMIZE_WINDOW }, 167 { "keyboardOverlayMirrorMonitors", IDS_KEYBOARD_OVERLAY_MIRROR_MONITORS }, 168 { "keyboardOverlayNewIncognitoWindow", 169 IDS_KEYBOARD_OVERLAY_NEW_INCOGNITO_WINDOW }, 170 { "keyboardOverlayNewTab", IDS_KEYBOARD_OVERLAY_NEW_TAB }, 171 { "keyboardOverlayNewTerminal", IDS_KEYBOARD_OVERLAY_NEW_TERMINAL }, 172 { "keyboardOverlayNewWindow", IDS_KEYBOARD_OVERLAY_NEW_WINDOW }, 173 { "keyboardOverlayNextUser", IDS_KEYBOARD_OVERLAY_NEXT_USER }, 174 { "keyboardOverlayNextWindow", IDS_KEYBOARD_OVERLAY_NEXT_WINDOW }, 175 { "keyboardOverlayNextWord", IDS_KEYBOARD_OVERLAY_NEXT_WORD }, 176 { "keyboardOverlayOpen", IDS_KEYBOARD_OVERLAY_OPEN }, 177 { "keyboardOverlayOpenAddressInNewTab", 178 IDS_KEYBOARD_OVERLAY_OPEN_ADDRESS_IN_NEW_TAB }, 179 { "keyboardOverlayOpenFileManager", IDS_KEYBOARD_OVERLAY_OPEN_FILE_MANAGER }, 180 { "keyboardOverlayOpenGoogleCloudPrint", 181 IDS_KEYBOARD_OVERLAY_OPEN_GOOGLE_CLOUD_PRINT }, 182 { "keyboardOverlayPageDown", IDS_KEYBOARD_OVERLAY_PAGE_DOWN }, 183 { "keyboardOverlayPageUp", IDS_KEYBOARD_OVERLAY_PAGE_UP }, 184 { "keyboardOverlayPaste", IDS_KEYBOARD_OVERLAY_PASTE }, 185 { "keyboardOverlayPasteAsPlainText", 186 IDS_KEYBOARD_OVERLAY_PASTE_AS_PLAIN_TEXT }, 187 { "keyboardOverlayPreviousUser", IDS_KEYBOARD_OVERLAY_PREVIOUS_USER }, 188 { "keyboardOverlayPreviousWindow", IDS_KEYBOARD_OVERLAY_PREVIOUS_WINDOW }, 189 { "keyboardOverlayPreviousWord", IDS_KEYBOARD_OVERLAY_PREVIOUS_WORD }, 190 { "keyboardOverlayPrint", IDS_KEYBOARD_OVERLAY_PRINT }, 191 { "keyboardOverlayReloadCurrentPage", 192 IDS_KEYBOARD_OVERLAY_RELOAD_CURRENT_PAGE }, 193 { "keyboardOverlayReloadIgnoringCache", 194 IDS_KEYBOARD_OVERLAY_RELOAD_IGNORING_CACHE }, 195 { "keyboardOverlayReopenLastClosedTab", 196 IDS_KEYBOARD_OVERLAY_REOPEN_LAST_CLOSED_TAB }, 197 { "keyboardOverlayReportIssue", IDS_KEYBOARD_OVERLAY_REPORT_ISSUE }, 198 { "keyboardOverlayResetScreenZoom", IDS_KEYBOARD_OVERLAY_RESET_SCREEN_ZOOM }, 199 { "keyboardOverlayResetZoom", IDS_KEYBOARD_OVERLAY_RESET_ZOOM }, 200 { "keyboardOverlayRotateScreen", IDS_KEYBOARD_OVERLAY_ROTATE_SCREEN }, 201 { "keyboardOverlaySave", IDS_KEYBOARD_OVERLAY_SAVE }, 202 { "keyboardOverlayScreenshotRegion", 203 IDS_KEYBOARD_OVERLAY_SCREENSHOT_REGION }, 204 { "keyboardOverlayScrollUpOnePage", 205 IDS_KEYBOARD_OVERLAY_SCROLL_UP_ONE_PAGE }, 206 { "keyboardOverlaySelectAll", IDS_KEYBOARD_OVERLAY_SELECT_ALL }, 207 { "keyboardOverlaySelectPreviousInputMethod", 208 IDS_KEYBOARD_OVERLAY_SELECT_PREVIOUS_INPUT_METHOD }, 209 { "keyboardOverlaySelectWordAtATime", 210 IDS_KEYBOARD_OVERLAY_SELECT_WORD_AT_A_TIME }, 211 { "keyboardOverlayShowMessageCenter", 212 IDS_KEYBOARD_OVERLAY_SHOW_MESSAGE_CENTER }, 213 { "keyboardOverlayShowStatusMenu", IDS_KEYBOARD_OVERLAY_SHOW_STATUS_MENU }, 214 { "keyboardOverlayShowWrenchMenu", IDS_KEYBOARD_OVERLAY_SHOW_WRENCH_MENU }, 215 { "keyboardOverlaySignOut", IDS_KEYBOARD_OVERLAY_SIGN_OUT }, 216 { "keyboardOverlaySwapPrimaryMonitor", 217 IDS_KEYBOARD_OVERLAY_SWAP_PRIMARY_MONITOR }, 218 { "keyboardOverlayTakeScreenshot", IDS_KEYBOARD_OVERLAY_TAKE_SCREENSHOT }, 219 { "keyboardOverlayTaskManager", IDS_KEYBOARD_OVERLAY_TASK_MANAGER }, 220 { "keyboardOverlayToggleBookmarkBar", 221 IDS_KEYBOARD_OVERLAY_TOGGLE_BOOKMARK_BAR }, 222 { "keyboardOverlayToggleCapsLock", IDS_KEYBOARD_OVERLAY_TOGGLE_CAPS_LOCK }, 223 { "keyboardOverlayToggleChromevoxSpokenFeedback", 224 IDS_KEYBOARD_OVERLAY_TOGGLE_CHROMEVOX_SPOKEN_FEEDBACK }, 225 { "keyboardOverlayToggleProjectionTouchHud", 226 IDS_KEYBOARD_OVERLAY_TOGGLE_PROJECTION_TOUCH_HUD }, 227 { "keyboardOverlayToggleSpeechInput", 228 IDS_KEYBOARD_OVERLAY_TOGGLE_SPEECH_INPUT }, 229 { "keyboardOverlayUndo", IDS_KEYBOARD_OVERLAY_UNDO }, 230 { "keyboardOverlayViewKeyboardOverlay", 231 IDS_KEYBOARD_OVERLAY_VIEW_KEYBOARD_OVERLAY }, 232 { "keyboardOverlayViewSource", IDS_KEYBOARD_OVERLAY_VIEW_SOURCE }, 233 { "keyboardOverlayWordMove", IDS_KEYBOARD_OVERLAY_WORD_MOVE }, 234 { "keyboardOverlayZoomIn", IDS_KEYBOARD_OVERLAY_ZOOM_IN }, 235 { "keyboardOverlayZoomOut", IDS_KEYBOARD_OVERLAY_ZOOM_OUT }, 236 { "keyboardOverlayZoomScreenIn", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_IN }, 237 { "keyboardOverlayZoomScreenOut", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_OUT }, 238}; 239 240std::string ModifierKeyToLabel(ModifierKey modifier) { 241 for (size_t i = 0; i < arraysize(kModifierToLabels); ++i) { 242 if (modifier == kModifierToLabels[i].modifier) { 243 return kModifierToLabels[i].label; 244 } 245 } 246 return ""; 247} 248 249content::WebUIDataSource* CreateKeyboardOverlayUIHTMLSource() { 250 content::WebUIDataSource* source = 251 content::WebUIDataSource::Create(chrome::kChromeUIKeyboardOverlayHost); 252 253 for (size_t i = 0; i < arraysize(kI18nContentToMessage); ++i) { 254 source->AddLocalizedString(kI18nContentToMessage[i].i18n_content, 255 kI18nContentToMessage[i].message); 256 } 257 258 source->AddString("keyboardOverlayLearnMoreURL", 259 base::UTF8ToUTF16(kLearnMoreURL)); 260 source->AddBoolean("keyboardOverlayHasChromeOSDiamondKey", 261 CommandLine::ForCurrentProcess()->HasSwitch( 262 chromeos::switches::kHasChromeOSDiamondKey)); 263 ash::Shell* shell = ash::Shell::GetInstance(); 264 ash::DisplayManager* display_manager = shell->display_manager(); 265 source->AddBoolean("keyboardOverlayIsDisplayUIScalingEnabled", 266 display_manager->IsDisplayUIScalingEnabled()); 267 source->SetJsonPath("strings.js"); 268 source->SetUseJsonJSFormatV2(); 269 source->AddResourcePath("keyboard_overlay.js", IDR_KEYBOARD_OVERLAY_JS); 270 source->SetDefaultResource(IDR_KEYBOARD_OVERLAY_HTML); 271 return source; 272} 273 274} // namespace 275 276// The handler for Javascript messages related to the "keyboardoverlay" view. 277class KeyboardOverlayHandler 278 : public WebUIMessageHandler, 279 public base::SupportsWeakPtr<KeyboardOverlayHandler> { 280 public: 281 explicit KeyboardOverlayHandler(Profile* profile); 282 virtual ~KeyboardOverlayHandler(); 283 284 // WebUIMessageHandler implementation. 285 virtual void RegisterMessages() OVERRIDE; 286 287 private: 288 // Called when the page requires the input method ID corresponding to the 289 // current input method or keyboard layout during initialization. 290 void GetInputMethodId(const base::ListValue* args); 291 292 // Called when the page requres the information of modifier key remapping 293 // during the initialization. 294 void GetLabelMap(const base::ListValue* args); 295 296 // Called when the learn more link is clicked. 297 void OpenLearnMorePage(const base::ListValue* args); 298 299 Profile* profile_; 300 301 DISALLOW_COPY_AND_ASSIGN(KeyboardOverlayHandler); 302}; 303 304//////////////////////////////////////////////////////////////////////////////// 305// 306// KeyboardOverlayHandler 307// 308//////////////////////////////////////////////////////////////////////////////// 309KeyboardOverlayHandler::KeyboardOverlayHandler(Profile* profile) 310 : profile_(profile) { 311} 312 313KeyboardOverlayHandler::~KeyboardOverlayHandler() { 314} 315 316void KeyboardOverlayHandler::RegisterMessages() { 317 web_ui()->RegisterMessageCallback("getInputMethodId", 318 base::Bind(&KeyboardOverlayHandler::GetInputMethodId, 319 base::Unretained(this))); 320 web_ui()->RegisterMessageCallback("getLabelMap", 321 base::Bind(&KeyboardOverlayHandler::GetLabelMap, 322 base::Unretained(this))); 323 web_ui()->RegisterMessageCallback("openLearnMorePage", 324 base::Bind(&KeyboardOverlayHandler::OpenLearnMorePage, 325 base::Unretained(this))); 326} 327 328void KeyboardOverlayHandler::GetInputMethodId(const base::ListValue* args) { 329 chromeos::input_method::InputMethodManager* manager = 330 chromeos::input_method::InputMethodManager::Get(); 331 const chromeos::input_method::InputMethodDescriptor& descriptor = 332 manager->GetActiveIMEState()->GetCurrentInputMethod(); 333 base::StringValue param(descriptor.id()); 334 web_ui()->CallJavascriptFunction("initKeyboardOverlayId", param); 335} 336 337void KeyboardOverlayHandler::GetLabelMap(const base::ListValue* args) { 338 DCHECK(profile_); 339 PrefService* pref_service = profile_->GetPrefs(); 340 typedef std::map<ModifierKey, ModifierKey> ModifierMap; 341 ModifierMap modifier_map; 342 modifier_map[chromeos::input_method::kSearchKey] = static_cast<ModifierKey>( 343 pref_service->GetInteger(prefs::kLanguageRemapSearchKeyTo)); 344 modifier_map[chromeos::input_method::kControlKey] = static_cast<ModifierKey>( 345 pref_service->GetInteger(prefs::kLanguageRemapControlKeyTo)); 346 modifier_map[chromeos::input_method::kAltKey] = static_cast<ModifierKey>( 347 pref_service->GetInteger(prefs::kLanguageRemapAltKeyTo)); 348 // TODO(mazda): Support prefs::kLanguageRemapCapsLockKeyTo once Caps Lock is 349 // added to the overlay UI. 350 351 base::DictionaryValue dict; 352 for (ModifierMap::const_iterator i = modifier_map.begin(); 353 i != modifier_map.end(); ++i) { 354 dict.SetString(ModifierKeyToLabel(i->first), ModifierKeyToLabel(i->second)); 355 } 356 357 web_ui()->CallJavascriptFunction("initIdentifierMap", dict); 358} 359 360void KeyboardOverlayHandler::OpenLearnMorePage(const base::ListValue* args) { 361 web_ui()->GetWebContents()->GetDelegate()->OpenURLFromTab( 362 web_ui()->GetWebContents(), 363 content::OpenURLParams(GURL(kLearnMoreURL), 364 content::Referrer(), 365 NEW_FOREGROUND_TAB, 366 ui::PAGE_TRANSITION_LINK, 367 false)); 368} 369 370//////////////////////////////////////////////////////////////////////////////// 371// 372// KeyboardOverlayUI 373// 374//////////////////////////////////////////////////////////////////////////////// 375 376KeyboardOverlayUI::KeyboardOverlayUI(content::WebUI* web_ui) 377 : WebDialogUI(web_ui) { 378 Profile* profile = Profile::FromWebUI(web_ui); 379 KeyboardOverlayHandler* handler = new KeyboardOverlayHandler(profile); 380 web_ui->AddMessageHandler(handler); 381 382 // Set up the chrome://keyboardoverlay/ source. 383 content::WebUIDataSource::Add(profile, CreateKeyboardOverlayUIHTMLSource()); 384} 385