ProfilePolicyConnectorFactory: Refactoring from Profile to BrowserContext.
[chromium-blink-merge.git] / chrome / browser / ui / webui / chromeos / keyboard_overlay_ui.cc
blob7ef861de53f36fd46a013ac33ba0b30aa7db0905
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.
5 #include "chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.h"
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 "content/public/browser/page_navigator.h"
23 #include "content/public/browser/web_contents.h"
24 #include "content/public/browser/web_contents_delegate.h"
25 #include "content/public/browser/web_ui.h"
26 #include "content/public/browser/web_ui_data_source.h"
27 #include "content/public/browser/web_ui_message_handler.h"
28 #include "grit/browser_resources.h"
29 #include "ui/base/ime/chromeos/ime_keyboard.h"
30 #include "ui/base/ime/chromeos/input_method_manager.h"
32 using chromeos::input_method::ModifierKey;
33 using content::WebUIMessageHandler;
34 using ui::WebDialogUI;
36 namespace {
38 const 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
46 struct 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"},
58 struct 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 { "keyboardOverlayDisableCapsLock", IDS_KEYBOARD_OVERLAY_DISABLE_CAPS_LOCK },
224 { "keyboardOverlayToggleChromevoxSpokenFeedback",
225 IDS_KEYBOARD_OVERLAY_TOGGLE_CHROMEVOX_SPOKEN_FEEDBACK },
226 { "keyboardOverlayToggleProjectionTouchHud",
227 IDS_KEYBOARD_OVERLAY_TOGGLE_PROJECTION_TOUCH_HUD },
228 { "keyboardOverlayToggleSpeechInput",
229 IDS_KEYBOARD_OVERLAY_TOGGLE_SPEECH_INPUT },
230 { "keyboardOverlayUndo", IDS_KEYBOARD_OVERLAY_UNDO },
231 { "keyboardOverlayViewKeyboardOverlay",
232 IDS_KEYBOARD_OVERLAY_VIEW_KEYBOARD_OVERLAY },
233 { "keyboardOverlayViewSource", IDS_KEYBOARD_OVERLAY_VIEW_SOURCE },
234 { "keyboardOverlayWordMove", IDS_KEYBOARD_OVERLAY_WORD_MOVE },
235 { "keyboardOverlayZoomIn", IDS_KEYBOARD_OVERLAY_ZOOM_IN },
236 { "keyboardOverlayZoomOut", IDS_KEYBOARD_OVERLAY_ZOOM_OUT },
237 { "keyboardOverlayZoomScreenIn", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_IN },
238 { "keyboardOverlayZoomScreenOut", IDS_KEYBOARD_OVERLAY_ZOOM_SCREEN_OUT },
241 std::string ModifierKeyToLabel(ModifierKey modifier) {
242 for (size_t i = 0; i < arraysize(kModifierToLabels); ++i) {
243 if (modifier == kModifierToLabels[i].modifier) {
244 return kModifierToLabels[i].label;
247 return "";
250 content::WebUIDataSource* CreateKeyboardOverlayUIHTMLSource() {
251 content::WebUIDataSource* source =
252 content::WebUIDataSource::Create(chrome::kChromeUIKeyboardOverlayHost);
254 for (size_t i = 0; i < arraysize(kI18nContentToMessage); ++i) {
255 source->AddLocalizedString(kI18nContentToMessage[i].i18n_content,
256 kI18nContentToMessage[i].message);
259 source->AddString("keyboardOverlayLearnMoreURL",
260 base::UTF8ToUTF16(kLearnMoreURL));
261 source->AddBoolean("keyboardOverlayHasChromeOSDiamondKey",
262 base::CommandLine::ForCurrentProcess()->HasSwitch(
263 chromeos::switches::kHasChromeOSDiamondKey));
264 ash::Shell* shell = ash::Shell::GetInstance();
265 ash::DisplayManager* display_manager = shell->display_manager();
266 source->AddBoolean("keyboardOverlayIsDisplayUIScalingEnabled",
267 display_manager->IsDisplayUIScalingEnabled());
268 source->SetJsonPath("strings.js");
269 source->AddResourcePath("keyboard_overlay.js", IDR_KEYBOARD_OVERLAY_JS);
270 source->SetDefaultResource(IDR_KEYBOARD_OVERLAY_HTML);
271 return source;
274 } // namespace
276 // The handler for Javascript messages related to the "keyboardoverlay" view.
277 class KeyboardOverlayHandler
278 : public WebUIMessageHandler,
279 public base::SupportsWeakPtr<KeyboardOverlayHandler> {
280 public:
281 explicit KeyboardOverlayHandler(Profile* profile);
282 ~KeyboardOverlayHandler() override;
284 // WebUIMessageHandler implementation.
285 void RegisterMessages() override;
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);
292 // Called when the page requres the information of modifier key remapping
293 // during the initialization.
294 void GetLabelMap(const base::ListValue* args);
296 // Called when the learn more link is clicked.
297 void OpenLearnMorePage(const base::ListValue* args);
299 Profile* profile_;
301 DISALLOW_COPY_AND_ASSIGN(KeyboardOverlayHandler);
304 ////////////////////////////////////////////////////////////////////////////////
306 // KeyboardOverlayHandler
308 ////////////////////////////////////////////////////////////////////////////////
309 KeyboardOverlayHandler::KeyboardOverlayHandler(Profile* profile)
310 : profile_(profile) {
313 KeyboardOverlayHandler::~KeyboardOverlayHandler() {
316 void 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)));
328 void 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);
337 void 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.
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));
357 web_ui()->CallJavascriptFunction("initIdentifierMap", dict);
360 void 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));
370 ////////////////////////////////////////////////////////////////////////////////
372 // KeyboardOverlayUI
374 ////////////////////////////////////////////////////////////////////////////////
376 KeyboardOverlayUI::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);
382 // Set up the chrome://keyboardoverlay/ source.
383 content::WebUIDataSource::Add(profile, CreateKeyboardOverlayUIHTMLSource());