OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind_helpers.h" | 5 #include "base/bind_helpers.h" |
6 #include "chrome/browser/extensions/extension_browsertest.h" | 6 #include "chrome/browser/extensions/extension_browsertest.h" |
7 #include "chrome/browser/extensions/extension_test_message_listener.h" | 7 #include "chrome/browser/extensions/extension_test_message_listener.h" |
8 #include "chrome/common/extensions/background_info.h" | 8 #include "chrome/common/extensions/background_info.h" |
9 #include "chromeos/dbus/ibus/ibus_text.h" | 9 #include "chromeos/dbus/ibus/ibus_text.h" |
10 #include "chromeos/ime/component_extension_ime_manager.h" | 10 #include "chromeos/ime/component_extension_ime_manager.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 namespace input_method { | 22 namespace input_method { |
23 namespace { | 23 namespace { |
24 | 24 |
25 const char kIdentityIMEID[] = | 25 const char kIdentityIMEID[] = |
26 "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpIdentityIME"; | 26 "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpIdentityIME"; |
27 const char kToUpperIMEID[] = | 27 const char kToUpperIMEID[] = |
28 "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpToUpperIME"; | 28 "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpToUpperIME"; |
29 const char kAPIArgumentIMEID[] = | 29 const char kAPIArgumentIMEID[] = |
30 "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpAPIArgumentIME"; | 30 "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpAPIArgumentIME"; |
31 | 31 |
32 const uint32 kAltKeyMask = 1 << 3; | |
33 const uint32 kCtrlKeyMask = 1 << 2; | |
34 const uint32 kShiftKeyMask = 1 << 0; | |
35 const uint32 kCapsLockMask = 1 << 1; | |
36 | |
37 // InputMethod extension should work on 1)normal extension, 2)normal extension | 32 // InputMethod extension should work on 1)normal extension, 2)normal extension |
38 // in incognito mode 3)component extension. | 33 // in incognito mode 3)component extension. |
39 enum TestType { | 34 enum TestType { |
40 kTestTypeNormal = 0, | 35 kTestTypeNormal = 0, |
41 kTestTypeIncognito = 1, | 36 kTestTypeIncognito = 1, |
42 kTestTypeComponent = 2, | 37 kTestTypeComponent = 2, |
43 }; | 38 }; |
44 | 39 |
45 class InputMethodEngineIBusBrowserTest | 40 class InputMethodEngineIBusBrowserTest |
46 : public ExtensionBrowserTest, | 41 : public ExtensionBrowserTest, |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 | 177 |
183 // onFocus event should be fired if FocusIn function is called. | 178 // onFocus event should be fired if FocusIn function is called. |
184 ExtensionTestMessageListener focus_listener("onFocus", false);; | 179 ExtensionTestMessageListener focus_listener("onFocus", false);; |
185 engine_handler->FocusIn(ibus::TEXT_INPUT_TYPE_TEXT); | 180 engine_handler->FocusIn(ibus::TEXT_INPUT_TYPE_TEXT); |
186 ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); | 181 ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); |
187 ASSERT_TRUE(focus_listener.was_satisfied()); | 182 ASSERT_TRUE(focus_listener.was_satisfied()); |
188 | 183 |
189 // onKeyEvent should be fired if ProcessKeyEvent is called. | 184 // onKeyEvent should be fired if ProcessKeyEvent is called. |
190 KeyEventDoneCallback callback(false); // EchoBackIME doesn't consume keys. | 185 KeyEventDoneCallback callback(false); // EchoBackIME doesn't consume keys. |
191 ExtensionTestMessageListener keyevent_listener("onKeyEvent", false); | 186 ExtensionTestMessageListener keyevent_listener("onKeyEvent", false); |
| 187 /* |
192 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. | 188 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. |
193 0x26, // KeyCode for 'a'. | 189 0x26, // KeyCode for 'a'. |
194 0, // No modifiers. | 190 0, // No modifiers. |
195 base::Bind(&KeyEventDoneCallback::Run, | 191 base::Bind(&KeyEventDoneCallback::Run, |
196 base::Unretained(&callback))); | 192 base::Unretained(&callback))); |
| 193 */ |
| 194 engine_handler->ProcessKeyEvent("a", // KeySym |
| 195 "KeyA", // KeyCode for 'a' |
| 196 true, // is_key_down |
| 197 false, // is_alt_down |
| 198 false, // is_ctrl_down |
| 199 false, // is_shift_down |
| 200 false, // is_caps_lock_down |
| 201 base::Bind(&KeyEventDoneCallback::Run, |
| 202 base::Unretained(&callback))); |
| 203 |
197 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); | 204 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); |
198 ASSERT_TRUE(keyevent_listener.was_satisfied()); | 205 ASSERT_TRUE(keyevent_listener.was_satisfied()); |
199 callback.WaitUntilCalled(); | 206 callback.WaitUntilCalled(); |
200 | 207 |
201 // onSurroundingTextChange should be fired if SetSurroundingText is called. | 208 // onSurroundingTextChange should be fired if SetSurroundingText is called. |
202 ExtensionTestMessageListener surrounding_text_listener( | 209 ExtensionTestMessageListener surrounding_text_listener( |
203 "onSurroundingTextChanged", false); | 210 "onSurroundingTextChanged", false); |
204 engine_handler->SetSurroundingText("text", // Surrounding text. | 211 engine_handler->SetSurroundingText("text", // Surrounding text. |
205 0, // focused position. | 212 0, // focused position. |
206 1); // anchor position. | 213 1); // anchor position. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 engine_handler->Enable(); | 272 engine_handler->Enable(); |
266 engine_handler->FocusIn(ibus::TEXT_INPUT_TYPE_TEXT); | 273 engine_handler->FocusIn(ibus::TEXT_INPUT_TYPE_TEXT); |
267 | 274 |
268 { | 275 { |
269 SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:No, Caps:No"); | 276 SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:No, Caps:No"); |
270 KeyEventDoneCallback callback(false); | 277 KeyEventDoneCallback callback(false); |
271 const std::string expected_value = | 278 const std::string expected_value = |
272 "onKeyEvent:keydown:a:KeyA:false:false:false:false"; | 279 "onKeyEvent:keydown:a:KeyA:false:false:false:false"; |
273 ExtensionTestMessageListener keyevent_listener(expected_value, false); | 280 ExtensionTestMessageListener keyevent_listener(expected_value, false); |
274 | 281 |
275 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. | 282 engine_handler->ProcessKeyEvent("a", // KeySym |
276 0x26, // KeyCode for 'a'. | 283 "KeyA", // KeyCode for 'a' |
277 0, // No modifiers. | 284 true, // is_key_down |
| 285 false, // is_alt_down |
| 286 false, // is_ctrl_down |
| 287 false, // is_shift_down |
| 288 false, // is_caps_lock_down |
278 base::Bind(&KeyEventDoneCallback::Run, | 289 base::Bind(&KeyEventDoneCallback::Run, |
279 base::Unretained(&callback))); | 290 base::Unretained(&callback))); |
280 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); | 291 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); |
281 EXPECT_TRUE(keyevent_listener.was_satisfied()); | 292 EXPECT_TRUE(keyevent_listener.was_satisfied()); |
282 callback.WaitUntilCalled(); | 293 callback.WaitUntilCalled(); |
283 } | 294 } |
284 { | 295 { |
285 SCOPED_TRACE("KeyDown, Ctrl:Yes, alt:No, Shift:No, Caps:No"); | 296 SCOPED_TRACE("KeyDown, Ctrl:Yes, alt:No, Shift:No, Caps:No"); |
286 KeyEventDoneCallback callback(false); | 297 KeyEventDoneCallback callback(false); |
287 const std::string expected_value = | 298 const std::string expected_value = |
288 "onKeyEvent:keydown:a:KeyA:true:false:false:false"; | 299 "onKeyEvent:keydown:a:KeyA:true:false:false:false"; |
289 ExtensionTestMessageListener keyevent_listener(expected_value, false); | 300 ExtensionTestMessageListener keyevent_listener(expected_value, false); |
290 | 301 |
291 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. | 302 engine_handler->ProcessKeyEvent("a", // KeySym |
292 0x26, // KeyCode for 'a'. | 303 "KeyA", // KeyCode for 'a' |
293 kCtrlKeyMask, | 304 true, // is_key_down |
| 305 false, // is_alt_down |
| 306 true, // is_ctrl_down |
| 307 false, // is_shift_down |
| 308 false, // is_caps_lock_down |
294 base::Bind(&KeyEventDoneCallback::Run, | 309 base::Bind(&KeyEventDoneCallback::Run, |
295 base::Unretained(&callback))); | 310 base::Unretained(&callback))); |
296 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); | 311 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); |
297 EXPECT_TRUE(keyevent_listener.was_satisfied()); | 312 EXPECT_TRUE(keyevent_listener.was_satisfied()); |
298 callback.WaitUntilCalled(); | 313 callback.WaitUntilCalled(); |
299 } | 314 } |
300 { | 315 { |
301 SCOPED_TRACE("KeyDown, Ctrl:No, alt:Yes, Shift:No, Caps:No"); | 316 SCOPED_TRACE("KeyDown, Ctrl:No, alt:Yes, Shift:No, Caps:No"); |
302 KeyEventDoneCallback callback(false); | 317 KeyEventDoneCallback callback(false); |
303 const std::string expected_value = | 318 const std::string expected_value = |
304 "onKeyEvent:keydown:a:KeyA:false:true:false:false"; | 319 "onKeyEvent:keydown:a:KeyA:false:true:false:false"; |
305 ExtensionTestMessageListener keyevent_listener(expected_value, false); | 320 ExtensionTestMessageListener keyevent_listener(expected_value, false); |
306 | 321 |
307 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. | 322 engine_handler->ProcessKeyEvent("a", // KeySym |
308 0x26, // KeyCode for 'a'. | 323 "KeyA", // KeyCode for 'a' |
309 kAltKeyMask, | 324 true, // is_key_down |
| 325 true, // is_alt_down |
| 326 false, // is_ctrl_down |
| 327 false, // is_shift_down |
| 328 false, // is_caps_lock_down |
310 base::Bind(&KeyEventDoneCallback::Run, | 329 base::Bind(&KeyEventDoneCallback::Run, |
311 base::Unretained(&callback))); | 330 base::Unretained(&callback))); |
312 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); | 331 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); |
313 EXPECT_TRUE(keyevent_listener.was_satisfied()); | 332 EXPECT_TRUE(keyevent_listener.was_satisfied()); |
314 callback.WaitUntilCalled(); | 333 callback.WaitUntilCalled(); |
315 } | 334 } |
316 { | 335 { |
317 SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:Yes, Caps:No"); | 336 SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:Yes, Caps:No"); |
318 KeyEventDoneCallback callback(false); | 337 KeyEventDoneCallback callback(false); |
319 const std::string expected_value = | 338 const std::string expected_value = |
320 "onKeyEvent:keydown:a:KeyA:false:false:true:false"; | 339 "onKeyEvent:keydown:a:KeyA:false:false:true:false"; |
321 ExtensionTestMessageListener keyevent_listener(expected_value, false); | 340 ExtensionTestMessageListener keyevent_listener(expected_value, false); |
322 | 341 |
323 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. | 342 engine_handler->ProcessKeyEvent("a", // KeySym |
324 0x26, // KeyCode for 'a'. | 343 "KeyA", // KeyCode for 'a' |
325 kShiftKeyMask, | 344 true, // is_key_down |
| 345 false, // is_alt_down |
| 346 false, // is_ctrl_down |
| 347 true, // is_shift_down |
| 348 false, // is_caps_lock_down |
326 base::Bind(&KeyEventDoneCallback::Run, | 349 base::Bind(&KeyEventDoneCallback::Run, |
327 base::Unretained(&callback))); | 350 base::Unretained(&callback))); |
328 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); | 351 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); |
329 EXPECT_TRUE(keyevent_listener.was_satisfied()); | 352 EXPECT_TRUE(keyevent_listener.was_satisfied()); |
330 callback.WaitUntilCalled(); | 353 callback.WaitUntilCalled(); |
331 } | 354 } |
332 { | 355 { |
333 SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:No, Caps:Yes"); | 356 SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:No, Caps:Yes"); |
334 KeyEventDoneCallback callback(false); | 357 KeyEventDoneCallback callback(false); |
335 const std::string expected_value = | 358 const std::string expected_value = |
336 "onKeyEvent:keydown:a:KeyA:false:false:false:true"; | 359 "onKeyEvent:keydown:a:KeyA:false:false:false:true"; |
337 ExtensionTestMessageListener keyevent_listener(expected_value, false); | 360 ExtensionTestMessageListener keyevent_listener(expected_value, false); |
338 | 361 |
339 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. | 362 engine_handler->ProcessKeyEvent("a", // KeySym |
340 0x26, // KeyCode for 'a'. | 363 "KeyA", // KeyCode for 'a' |
341 kCapsLockMask, | 364 true, // is_key_down |
| 365 false, // is_alt_down |
| 366 false, // is_ctrl_down |
| 367 false, // is_shift_down |
| 368 true, // is_caps_lock_down |
342 base::Bind(&KeyEventDoneCallback::Run, | 369 base::Bind(&KeyEventDoneCallback::Run, |
343 base::Unretained(&callback))); | 370 base::Unretained(&callback))); |
344 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); | 371 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); |
345 EXPECT_TRUE(keyevent_listener.was_satisfied()); | 372 EXPECT_TRUE(keyevent_listener.was_satisfied()); |
346 callback.WaitUntilCalled(); | 373 callback.WaitUntilCalled(); |
347 } | 374 } |
348 { | 375 { |
349 SCOPED_TRACE("KeyDown, Ctrl:Yes, alt:Yes, Shift:No, Caps:No"); | 376 SCOPED_TRACE("KeyDown, Ctrl:Yes, alt:Yes, Shift:No, Caps:No"); |
350 KeyEventDoneCallback callback(false); | 377 KeyEventDoneCallback callback(false); |
351 const std::string expected_value = | 378 const std::string expected_value = |
352 "onKeyEvent:keydown:a:KeyA:true:true:false:false"; | 379 "onKeyEvent:keydown:a:KeyA:true:true:false:false"; |
353 ExtensionTestMessageListener keyevent_listener(expected_value, false); | 380 ExtensionTestMessageListener keyevent_listener(expected_value, false); |
354 | 381 |
355 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. | 382 engine_handler->ProcessKeyEvent("a", // KeySym |
356 0x26, // KeyCode for 'a'. | 383 "KeyA", // KeyCode for 'a' |
357 kAltKeyMask | kCtrlKeyMask, | 384 true, // is_key_down |
| 385 true, // is_alt_down |
| 386 true, // is_ctrl_down |
| 387 false, // is_shift_down |
| 388 false, // is_caps_lock_down |
358 base::Bind(&KeyEventDoneCallback::Run, | 389 base::Bind(&KeyEventDoneCallback::Run, |
359 base::Unretained(&callback))); | 390 base::Unretained(&callback))); |
360 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); | 391 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); |
361 EXPECT_TRUE(keyevent_listener.was_satisfied()); | 392 EXPECT_TRUE(keyevent_listener.was_satisfied()); |
362 callback.WaitUntilCalled(); | 393 callback.WaitUntilCalled(); |
363 } | 394 } |
364 { | 395 { |
365 SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:Yes, Caps:Yes"); | 396 SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:Yes, Caps:Yes"); |
366 KeyEventDoneCallback callback(false); | 397 KeyEventDoneCallback callback(false); |
367 const std::string expected_value = | 398 const std::string expected_value = |
368 "onKeyEvent:keydown:a:KeyA:false:false:true:true"; | 399 "onKeyEvent:keydown:a:KeyA:false:false:true:true"; |
369 ExtensionTestMessageListener keyevent_listener(expected_value, false); | 400 ExtensionTestMessageListener keyevent_listener(expected_value, false); |
370 | 401 |
371 engine_handler->ProcessKeyEvent(0x61, // KeySym for 'a'. | 402 engine_handler->ProcessKeyEvent("a", // KeySym |
372 0x26, // KeyCode for 'a'. | 403 "KeyA", // KeyCode for 'a' |
373 kShiftKeyMask | kCapsLockMask, | 404 true, // is_key_down |
| 405 false, // is_alt_down |
| 406 false, // is_ctrl_down |
| 407 true, // is_shift_down |
| 408 true, // is_caps_lock_down |
374 base::Bind(&KeyEventDoneCallback::Run, | 409 base::Bind(&KeyEventDoneCallback::Run, |
375 base::Unretained(&callback))); | 410 base::Unretained(&callback))); |
376 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); | 411 ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); |
377 EXPECT_TRUE(keyevent_listener.was_satisfied()); | 412 EXPECT_TRUE(keyevent_listener.was_satisfied()); |
378 callback.WaitUntilCalled(); | 413 callback.WaitUntilCalled(); |
379 } | 414 } |
380 // TODO(nona): Add browser tests for other API as well. | 415 // TODO(nona): Add browser tests for other API as well. |
381 { | 416 { |
382 SCOPED_TRACE("commitText test"); | 417 SCOPED_TRACE("commitText test"); |
383 mock_input_context->Reset(); | 418 mock_input_context->Reset(); |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
795 mock_input_context->last_delete_surrounding_text_arg().length); | 830 mock_input_context->last_delete_surrounding_text_arg().length); |
796 } | 831 } |
797 IBusBridge::Get()->SetInputContextHandler(NULL); | 832 IBusBridge::Get()->SetInputContextHandler(NULL); |
798 IBusBridge::Get()->SetCandidateWindowHandler(NULL); | 833 IBusBridge::Get()->SetCandidateWindowHandler(NULL); |
799 IBusBridge::Get()->SetPropertyHandler(NULL); | 834 IBusBridge::Get()->SetPropertyHandler(NULL); |
800 } | 835 } |
801 | 836 |
802 } // namespace | 837 } // namespace |
803 } // namespace input_method | 838 } // namespace input_method |
804 } // namespace chromeos | 839 } // namespace chromeos |
OLD | NEW |