Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: ash/sticky_keys/sticky_keys_unittest.cc

Issue 1867223004: Convert //ash from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ash/sticky_keys/sticky_keys_overlay.h ('k') | ash/system/audio/tray_audio.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ash/sticky_keys/sticky_keys_controller.h" 5 #include "ash/sticky_keys/sticky_keys_controller.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/test/ash_test_base.h" 8 #include "ash/test/ash_test_base.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 } 185 }
186 186
187 // Creates a synthesized ET_MOUSE_MOVED event. 187 // Creates a synthesized ET_MOUSE_MOVED event.
188 ui::MouseEvent* GenerateSynthesizedMouseMoveEvent( 188 ui::MouseEvent* GenerateSynthesizedMouseMoveEvent(
189 const gfx::Point& location) { 189 const gfx::Point& location) {
190 return GenerateSynthesizedMouseEventAt(ui::ET_MOUSE_MOVED, location); 190 return GenerateSynthesizedMouseEventAt(ui::ET_MOUSE_MOVED, location);
191 } 191 }
192 192
193 // Creates a synthesized MouseWHeel event. 193 // Creates a synthesized MouseWHeel event.
194 ui::MouseWheelEvent* GenerateSynthesizedMouseWheelEvent(int wheel_delta) { 194 ui::MouseWheelEvent* GenerateSynthesizedMouseWheelEvent(int wheel_delta) {
195 scoped_ptr<ui::MouseEvent> mev( 195 std::unique_ptr<ui::MouseEvent> mev(
196 GenerateSynthesizedMouseEventAt(ui::ET_MOUSEWHEEL, gfx::Point(0, 0))); 196 GenerateSynthesizedMouseEventAt(ui::ET_MOUSEWHEEL, gfx::Point(0, 0)));
197 ui::MouseWheelEvent* event = new ui::MouseWheelEvent(*mev, 0, wheel_delta); 197 ui::MouseWheelEvent* event = new ui::MouseWheelEvent(*mev, 0, wheel_delta);
198 ui::Event::DispatcherApi dispatcher(event); 198 ui::Event::DispatcherApi dispatcher(event);
199 dispatcher.set_target(target_); 199 dispatcher.set_target(target_);
200 return event; 200 return event;
201 } 201 }
202 202
203 void SendActivateStickyKeyPattern(StickyKeysHandler* handler, 203 void SendActivateStickyKeyPattern(StickyKeysHandler* handler,
204 ui::KeyboardCode key_code) { 204 ui::KeyboardCode key_code) {
205 bool released = false; 205 bool released = false;
206 int down_flags = 0; 206 int down_flags = 0;
207 scoped_ptr<ui::KeyEvent> ev; 207 std::unique_ptr<ui::KeyEvent> ev;
208 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, key_code)); 208 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, key_code));
209 handler->HandleKeyEvent(*ev.get(), key_code, &down_flags, &released); 209 handler->HandleKeyEvent(*ev.get(), key_code, &down_flags, &released);
210 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, key_code)); 210 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, key_code));
211 handler->HandleKeyEvent(*ev.get(), key_code, &down_flags, &released); 211 handler->HandleKeyEvent(*ev.get(), key_code, &down_flags, &released);
212 } 212 }
213 213
214 bool HandleKeyEvent(const ui::KeyEvent& key_event, 214 bool HandleKeyEvent(const ui::KeyEvent& key_event,
215 StickyKeysHandler* handler, 215 StickyKeysHandler* handler,
216 int* down, 216 int* down,
217 bool* up) { 217 bool* up) {
(...skipping 18 matching lines...) Expand all
236 236
237 #if defined(USE_X11) 237 #if defined(USE_X11)
238 // Used to construct the various X events. 238 // Used to construct the various X events.
239 ui::ScopedXI2Event scoped_xevent_; 239 ui::ScopedXI2Event scoped_xevent_;
240 #endif 240 #endif
241 241
242 DISALLOW_COPY_AND_ASSIGN(StickyKeysTest); 242 DISALLOW_COPY_AND_ASSIGN(StickyKeysTest);
243 }; 243 };
244 244
245 TEST_F(StickyKeysTest, BasicOneshotScenarioTest) { 245 TEST_F(StickyKeysTest, BasicOneshotScenarioTest) {
246 scoped_ptr<ui::KeyEvent> ev; 246 std::unique_ptr<ui::KeyEvent> ev;
247 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN); 247 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN);
248 248
249 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 249 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
250 250
251 // By typing Shift key, internal state become ENABLED. 251 // By typing Shift key, internal state become ENABLED.
252 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); 252 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT);
253 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 253 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
254 254
255 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_A)); 255 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_A));
256 bool released = false; 256 bool released = false;
257 int mod_down_flags = 0; 257 int mod_down_flags = 0;
258 HandleKeyEvent(*ev.get(), &sticky_key, &mod_down_flags, &released); 258 HandleKeyEvent(*ev.get(), &sticky_key, &mod_down_flags, &released);
259 // Next keyboard event is shift modified. 259 // Next keyboard event is shift modified.
260 EXPECT_TRUE(mod_down_flags & ui::EF_SHIFT_DOWN); 260 EXPECT_TRUE(mod_down_flags & ui::EF_SHIFT_DOWN);
261 // Modifier release notification happens. 261 // Modifier release notification happens.
262 EXPECT_TRUE(released); 262 EXPECT_TRUE(released);
263 263
264 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_A)); 264 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_A));
265 released = false; 265 released = false;
266 mod_down_flags = 0; 266 mod_down_flags = 0;
267 HandleKeyEvent(*ev.get(), &sticky_key, &mod_down_flags, &released); 267 HandleKeyEvent(*ev.get(), &sticky_key, &mod_down_flags, &released);
268 268
269 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 269 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
270 // Making sure Shift up keyboard event is available. 270 // Making sure Shift up keyboard event is available.
271 scoped_ptr<ui::Event> up_event; 271 std::unique_ptr<ui::Event> up_event;
272 ASSERT_EQ(0, sticky_key.GetModifierUpEvent(&up_event)); 272 ASSERT_EQ(0, sticky_key.GetModifierUpEvent(&up_event));
273 EXPECT_TRUE(up_event.get()); 273 EXPECT_TRUE(up_event.get());
274 EXPECT_EQ(ui::ET_KEY_RELEASED, up_event->type()); 274 EXPECT_EQ(ui::ET_KEY_RELEASED, up_event->type());
275 EXPECT_EQ(ui::VKEY_SHIFT, 275 EXPECT_EQ(ui::VKEY_SHIFT,
276 static_cast<const ui::KeyEvent*>(up_event.get())->key_code()); 276 static_cast<const ui::KeyEvent*>(up_event.get())->key_code());
277 277
278 // Enabled state is one shot, so next key event should not be shift modified. 278 // Enabled state is one shot, so next key event should not be shift modified.
279 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_A)); 279 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_A));
280 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key); 280 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key);
281 EXPECT_FALSE(mod_down_flags & ui::EF_SHIFT_DOWN); 281 EXPECT_FALSE(mod_down_flags & ui::EF_SHIFT_DOWN);
282 282
283 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_A)); 283 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_A));
284 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key); 284 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key);
285 EXPECT_FALSE(mod_down_flags & ui::EF_SHIFT_DOWN); 285 EXPECT_FALSE(mod_down_flags & ui::EF_SHIFT_DOWN);
286 } 286 }
287 287
288 TEST_F(StickyKeysTest, BasicLockedScenarioTest) { 288 TEST_F(StickyKeysTest, BasicLockedScenarioTest) {
289 scoped_ptr<ui::KeyEvent> ev; 289 std::unique_ptr<ui::KeyEvent> ev;
290 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN); 290 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN);
291 291
292 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 292 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
293 293
294 // By typing shift key, internal state become ENABLED. 294 // By typing shift key, internal state become ENABLED.
295 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); 295 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT);
296 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 296 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
297 297
298 // By typing shift key again, internal state become LOCKED. 298 // By typing shift key again, internal state become LOCKED.
299 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); 299 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT);
(...skipping 20 matching lines...) Expand all
320 EXPECT_TRUE(mod_down_flags & ui::EF_SHIFT_DOWN); 320 EXPECT_TRUE(mod_down_flags & ui::EF_SHIFT_DOWN);
321 321
322 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); 322 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state());
323 323
324 // By typing shift key again, internal state become back to DISABLED. 324 // By typing shift key again, internal state become back to DISABLED.
325 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); 325 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT);
326 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 326 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
327 } 327 }
328 328
329 TEST_F(StickyKeysTest, NonTargetModifierTest) { 329 TEST_F(StickyKeysTest, NonTargetModifierTest) {
330 scoped_ptr<ui::KeyEvent> ev; 330 std::unique_ptr<ui::KeyEvent> ev;
331 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN); 331 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN);
332 332
333 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 333 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
334 334
335 // Non target modifier key does not affect internal state 335 // Non target modifier key does not affect internal state
336 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_MENU)); 336 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_MENU));
337 int mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key); 337 int mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key);
338 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 338 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
339 EXPECT_EQ(ui::EF_NONE, mod_down_flags); 339 EXPECT_EQ(ui::EF_NONE, mod_down_flags);
340 340
(...skipping 26 matching lines...) Expand all
367 EXPECT_EQ(ui::EF_NONE, mod_down_flags); 367 EXPECT_EQ(ui::EF_NONE, mod_down_flags);
368 368
369 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_MENU)); 369 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_MENU));
370 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key); 370 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key);
371 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); 371 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state());
372 EXPECT_EQ(ui::EF_NONE, mod_down_flags); 372 EXPECT_EQ(ui::EF_NONE, mod_down_flags);
373 } 373 }
374 374
375 TEST_F(StickyKeysTest, NormalShortcutTest) { 375 TEST_F(StickyKeysTest, NormalShortcutTest) {
376 // Sticky keys should not be enabled if we perform a normal shortcut. 376 // Sticky keys should not be enabled if we perform a normal shortcut.
377 scoped_ptr<ui::KeyEvent> ev; 377 std::unique_ptr<ui::KeyEvent> ev;
378 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 378 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
379 379
380 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 380 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
381 381
382 // Perform ctrl+n shortcut. 382 // Perform ctrl+n shortcut.
383 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL)); 383 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL));
384 int mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key); 384 int mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key);
385 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_N)); 385 ev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_N));
386 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key); 386 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key);
387 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_N)); 387 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_N));
(...skipping 16 matching lines...) Expand all
404 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key); 404 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key);
405 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_N)); 405 ev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_N));
406 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key); 406 mod_down_flags = HandleKeyEventForDownFlags(*ev.get(), &sticky_key);
407 407
408 // Sticky keys should not be enabled afterwards. 408 // Sticky keys should not be enabled afterwards.
409 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 409 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
410 EXPECT_EQ(ui::EF_NONE, mod_down_flags); 410 EXPECT_EQ(ui::EF_NONE, mod_down_flags);
411 } 411 }
412 412
413 TEST_F(StickyKeysTest, NormalModifiedClickTest) { 413 TEST_F(StickyKeysTest, NormalModifiedClickTest) {
414 scoped_ptr<ui::KeyEvent> kev; 414 std::unique_ptr<ui::KeyEvent> kev;
415 scoped_ptr<ui::MouseEvent> mev; 415 std::unique_ptr<ui::MouseEvent> mev;
416 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 416 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
417 417
418 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 418 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
419 419
420 // Perform ctrl+click. 420 // Perform ctrl+click.
421 kev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL)); 421 kev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL));
422 int mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 422 int mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
423 mev.reset(GenerateMouseEvent(ui::ET_MOUSE_PRESSED)); 423 mev.reset(GenerateMouseEvent(ui::ET_MOUSE_PRESSED));
424 bool released = false; 424 bool released = false;
425 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released); 425 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released);
426 mev.reset(GenerateMouseEvent(ui::ET_MOUSE_RELEASED)); 426 mev.reset(GenerateMouseEvent(ui::ET_MOUSE_RELEASED));
427 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released); 427 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released);
428 428
429 // Sticky keys should not be enabled afterwards. 429 // Sticky keys should not be enabled afterwards.
430 kev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL)); 430 kev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL));
431 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 431 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
432 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 432 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
433 EXPECT_EQ(ui::EF_NONE, mod_down_flags); 433 EXPECT_EQ(ui::EF_NONE, mod_down_flags);
434 } 434 }
435 435
436 TEST_F(StickyKeysTest, MouseMovedModifierTest) { 436 TEST_F(StickyKeysTest, MouseMovedModifierTest) {
437 scoped_ptr<ui::KeyEvent> kev; 437 std::unique_ptr<ui::KeyEvent> kev;
438 scoped_ptr<ui::MouseEvent> mev; 438 std::unique_ptr<ui::MouseEvent> mev;
439 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 439 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
440 440
441 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 441 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
442 442
443 // Press ctrl and handle mouse move events. 443 // Press ctrl and handle mouse move events.
444 kev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL)); 444 kev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL));
445 int mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 445 int mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
446 mev.reset(GenerateSynthesizedMouseMoveEvent(gfx::Point(0, 0))); 446 mev.reset(GenerateSynthesizedMouseMoveEvent(gfx::Point(0, 0)));
447 bool released = false; 447 bool released = false;
448 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released); 448 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released);
449 mev.reset(GenerateSynthesizedMouseMoveEvent(gfx::Point(100, 100))); 449 mev.reset(GenerateSynthesizedMouseMoveEvent(gfx::Point(100, 100)));
450 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released); 450 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released);
451 451
452 // Sticky keys should be enabled afterwards. 452 // Sticky keys should be enabled afterwards.
453 kev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL)); 453 kev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL));
454 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 454 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
455 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 455 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
456 EXPECT_EQ(ui::EF_NONE, mod_down_flags); 456 EXPECT_EQ(ui::EF_NONE, mod_down_flags);
457 } 457 }
458 458
459 TEST_F(StickyKeysTest, NormalModifiedScrollTest) { 459 TEST_F(StickyKeysTest, NormalModifiedScrollTest) {
460 scoped_ptr<ui::KeyEvent> kev; 460 std::unique_ptr<ui::KeyEvent> kev;
461 scoped_ptr<ui::ScrollEvent> sev; 461 std::unique_ptr<ui::ScrollEvent> sev;
462 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 462 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
463 463
464 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 464 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
465 465
466 // Perform ctrl+scroll. 466 // Perform ctrl+scroll.
467 kev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL)); 467 kev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL));
468 int mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 468 int mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
469 sev.reset(GenerateFlingScrollEvent(0, true)); 469 sev.reset(GenerateFlingScrollEvent(0, true));
470 bool released = false; 470 bool released = false;
471 sticky_key.HandleScrollEvent(*sev.get(), &mod_down_flags, &released); 471 sticky_key.HandleScrollEvent(*sev.get(), &mod_down_flags, &released);
472 sev.reset(GenerateScrollEvent(10)); 472 sev.reset(GenerateScrollEvent(10));
473 sticky_key.HandleScrollEvent(*sev.get(), &mod_down_flags, &released); 473 sticky_key.HandleScrollEvent(*sev.get(), &mod_down_flags, &released);
474 sev.reset(GenerateFlingScrollEvent(10, false)); 474 sev.reset(GenerateFlingScrollEvent(10, false));
475 sticky_key.HandleScrollEvent(*sev.get(), &mod_down_flags, &released); 475 sticky_key.HandleScrollEvent(*sev.get(), &mod_down_flags, &released);
476 476
477 // Sticky keys should not be enabled afterwards. 477 // Sticky keys should not be enabled afterwards.
478 kev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL)); 478 kev.reset(GenerateKey(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL));
479 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 479 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
480 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 480 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
481 EXPECT_EQ(ui::EF_NONE, mod_down_flags); 481 EXPECT_EQ(ui::EF_NONE, mod_down_flags);
482 } 482 }
483 483
484 TEST_F(StickyKeysTest, MouseEventOneshot) { 484 TEST_F(StickyKeysTest, MouseEventOneshot) {
485 scoped_ptr<ui::MouseEvent> ev; 485 std::unique_ptr<ui::MouseEvent> ev;
486 scoped_ptr<ui::KeyEvent> kev; 486 std::unique_ptr<ui::KeyEvent> kev;
487 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 487 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
488 488
489 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 489 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
490 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 490 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
491 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 491 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
492 492
493 // We should still be in the ENABLED state until we get the mouse 493 // We should still be in the ENABLED state until we get the mouse
494 // release event. 494 // release event.
495 ev.reset(GenerateMouseEvent(ui::ET_MOUSE_PRESSED)); 495 ev.reset(GenerateMouseEvent(ui::ET_MOUSE_PRESSED));
496 bool released = false; 496 bool released = false;
497 int mod_down_flags = 0; 497 int mod_down_flags = 0;
498 sticky_key.HandleMouseEvent(*ev.get(), &mod_down_flags, &released); 498 sticky_key.HandleMouseEvent(*ev.get(), &mod_down_flags, &released);
499 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN); 499 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN);
500 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 500 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
501 501
502 ev.reset(GenerateMouseEvent(ui::ET_MOUSE_RELEASED)); 502 ev.reset(GenerateMouseEvent(ui::ET_MOUSE_RELEASED));
503 released = false; 503 released = false;
504 mod_down_flags = 0; 504 mod_down_flags = 0;
505 sticky_key.HandleMouseEvent(*ev.get(), &mod_down_flags, &released); 505 sticky_key.HandleMouseEvent(*ev.get(), &mod_down_flags, &released);
506 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN); 506 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN);
507 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 507 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
508 508
509 // Making sure modifier key release event is dispatched in the right order. 509 // Making sure modifier key release event is dispatched in the right order.
510 EXPECT_TRUE(released); 510 EXPECT_TRUE(released);
511 scoped_ptr<ui::Event> up_event; 511 std::unique_ptr<ui::Event> up_event;
512 ASSERT_EQ(0, sticky_key.GetModifierUpEvent(&up_event)); 512 ASSERT_EQ(0, sticky_key.GetModifierUpEvent(&up_event));
513 EXPECT_TRUE(up_event.get()); 513 EXPECT_TRUE(up_event.get());
514 EXPECT_EQ(ui::ET_KEY_RELEASED, up_event->type()); 514 EXPECT_EQ(ui::ET_KEY_RELEASED, up_event->type());
515 EXPECT_EQ(ui::VKEY_CONTROL, 515 EXPECT_EQ(ui::VKEY_CONTROL,
516 static_cast<const ui::KeyEvent*>(up_event.get())->key_code()); 516 static_cast<const ui::KeyEvent*>(up_event.get())->key_code());
517 517
518 // Enabled state is one shot, so next click should not be control modified. 518 // Enabled state is one shot, so next click should not be control modified.
519 ev.reset(GenerateMouseEvent(ui::ET_MOUSE_PRESSED)); 519 ev.reset(GenerateMouseEvent(ui::ET_MOUSE_PRESSED));
520 released = false; 520 released = false;
521 mod_down_flags = 0; 521 mod_down_flags = 0;
522 sticky_key.HandleMouseEvent(*ev.get(), &mod_down_flags, &released); 522 sticky_key.HandleMouseEvent(*ev.get(), &mod_down_flags, &released);
523 EXPECT_FALSE(mod_down_flags & ui::EF_CONTROL_DOWN); 523 EXPECT_FALSE(mod_down_flags & ui::EF_CONTROL_DOWN);
524 524
525 ev.reset(GenerateMouseEvent(ui::ET_MOUSE_RELEASED)); 525 ev.reset(GenerateMouseEvent(ui::ET_MOUSE_RELEASED));
526 released = false; 526 released = false;
527 mod_down_flags = 0; 527 mod_down_flags = 0;
528 sticky_key.HandleMouseEvent(*ev.get(), &mod_down_flags, &released); 528 sticky_key.HandleMouseEvent(*ev.get(), &mod_down_flags, &released);
529 EXPECT_FALSE(mod_down_flags & ui::EF_CONTROL_DOWN); 529 EXPECT_FALSE(mod_down_flags & ui::EF_CONTROL_DOWN);
530 } 530 }
531 531
532 TEST_F(StickyKeysTest, MouseEventLocked) { 532 TEST_F(StickyKeysTest, MouseEventLocked) {
533 scoped_ptr<ui::MouseEvent> ev; 533 std::unique_ptr<ui::MouseEvent> ev;
534 scoped_ptr<ui::KeyEvent> kev; 534 std::unique_ptr<ui::KeyEvent> kev;
535 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 535 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
536 536
537 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 537 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
538 538
539 // Pressing modifier key twice should make us enter lock state. 539 // Pressing modifier key twice should make us enter lock state.
540 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 540 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
541 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 541 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
542 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 542 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
543 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); 543 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state());
544 544
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 kev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_N)); 580 kev.reset(GenerateKey(ui::ET_KEY_PRESSED, ui::VKEY_N));
581 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 581 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
582 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN); 582 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN);
583 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 583 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
584 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN); 584 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN);
585 585
586 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); 586 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state());
587 } 587 }
588 588
589 TEST_F(StickyKeysTest, ScrollEventOneshot) { 589 TEST_F(StickyKeysTest, ScrollEventOneshot) {
590 scoped_ptr<ui::ScrollEvent> ev; 590 std::unique_ptr<ui::ScrollEvent> ev;
591 scoped_ptr<ui::KeyEvent> kev; 591 std::unique_ptr<ui::KeyEvent> kev;
592 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 592 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
593 593
594 int scroll_deltas[] = {-10, 10}; 594 int scroll_deltas[] = {-10, 10};
595 for (int i = 0; i < 2; ++i) { 595 for (int i = 0; i < 2; ++i) {
596 // Enable sticky keys. 596 // Enable sticky keys.
597 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 597 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
598 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 598 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
599 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 599 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
600 600
601 // Test a scroll sequence. Sticky keys should only be disabled at the end 601 // Test a scroll sequence. Sticky keys should only be disabled at the end
(...skipping 16 matching lines...) Expand all
618 } 618 }
619 619
620 // Fling start event ends scroll sequence. 620 // Fling start event ends scroll sequence.
621 ev.reset(GenerateFlingScrollEvent(scroll_deltas[i], false)); 621 ev.reset(GenerateFlingScrollEvent(scroll_deltas[i], false));
622 released = false; 622 released = false;
623 mod_down_flags = 0; 623 mod_down_flags = 0;
624 sticky_key.HandleScrollEvent(*ev.get(), &mod_down_flags, &released); 624 sticky_key.HandleScrollEvent(*ev.get(), &mod_down_flags, &released);
625 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN); 625 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN);
626 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 626 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
627 627
628 scoped_ptr<ui::Event> up_event; 628 std::unique_ptr<ui::Event> up_event;
629 EXPECT_TRUE(released); 629 EXPECT_TRUE(released);
630 ASSERT_EQ(0, sticky_key.GetModifierUpEvent(&up_event)); 630 ASSERT_EQ(0, sticky_key.GetModifierUpEvent(&up_event));
631 EXPECT_TRUE(up_event.get()); 631 EXPECT_TRUE(up_event.get());
632 EXPECT_EQ(ui::ET_KEY_RELEASED, up_event->type()); 632 EXPECT_EQ(ui::ET_KEY_RELEASED, up_event->type());
633 EXPECT_EQ(ui::VKEY_CONTROL, 633 EXPECT_EQ(ui::VKEY_CONTROL,
634 static_cast<const ui::KeyEvent*>(up_event.get())->key_code()); 634 static_cast<const ui::KeyEvent*>(up_event.get())->key_code());
635 } 635 }
636 } 636 }
637 637
638 TEST_F(StickyKeysTest, ScrollDirectionChanged) { 638 TEST_F(StickyKeysTest, ScrollDirectionChanged) {
639 scoped_ptr<ui::ScrollEvent> ev; 639 std::unique_ptr<ui::ScrollEvent> ev;
640 scoped_ptr<ui::KeyEvent> kev; 640 std::unique_ptr<ui::KeyEvent> kev;
641 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 641 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
642 642
643 // Test direction change with both boundary value and negative value. 643 // Test direction change with both boundary value and negative value.
644 const int direction_change_values[2] = {0, -10}; 644 const int direction_change_values[2] = {0, -10};
645 for (int i = 0; i < 2; ++i) { 645 for (int i = 0; i < 2; ++i) {
646 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 646 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
647 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 647 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
648 648
649 // Fling cancel starts scroll sequence. 649 // Fling cancel starts scroll sequence.
650 ev.reset(GenerateFlingScrollEvent(0, true)); 650 ev.reset(GenerateFlingScrollEvent(0, true));
(...skipping 15 matching lines...) Expand all
666 666
667 ev.reset(GenerateScrollEvent(direction_change_values[i])); 667 ev.reset(GenerateScrollEvent(direction_change_values[i]));
668 released = false; 668 released = false;
669 mod_down_flags = 0; 669 mod_down_flags = 0;
670 sticky_key.HandleScrollEvent(*ev.get(), &mod_down_flags, &released); 670 sticky_key.HandleScrollEvent(*ev.get(), &mod_down_flags, &released);
671 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 671 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
672 } 672 }
673 } 673 }
674 674
675 TEST_F(StickyKeysTest, ScrollEventLocked) { 675 TEST_F(StickyKeysTest, ScrollEventLocked) {
676 scoped_ptr<ui::ScrollEvent> ev; 676 std::unique_ptr<ui::ScrollEvent> ev;
677 scoped_ptr<ui::KeyEvent> kev; 677 std::unique_ptr<ui::KeyEvent> kev;
678 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 678 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
679 679
680 // Lock sticky keys. 680 // Lock sticky keys.
681 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 681 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
682 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 682 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
683 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); 683 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state());
684 684
685 // Test scroll events are correctly modified in locked state. 685 // Test scroll events are correctly modified in locked state.
686 for (int i = 0; i < 5; ++i) { 686 for (int i = 0; i < 5; ++i) {
687 // Fling cancel starts scroll sequence. 687 // Fling cancel starts scroll sequence.
(...skipping 18 matching lines...) Expand all
706 706
707 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); 707 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state());
708 } 708 }
709 709
710 TEST_F(StickyKeysTest, SynthesizedEvents) { 710 TEST_F(StickyKeysTest, SynthesizedEvents) {
711 // Non-native, internally generated events should be properly handled 711 // Non-native, internally generated events should be properly handled
712 // by sticky keys. 712 // by sticky keys.
713 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN); 713 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN);
714 714
715 // Test non-native key events. 715 // Test non-native key events.
716 scoped_ptr<ui::KeyEvent> kev; 716 std::unique_ptr<ui::KeyEvent> kev;
717 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 717 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
718 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 718 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
719 719
720 kev.reset(GenerateSynthesizedKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_K)); 720 kev.reset(GenerateSynthesizedKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_K));
721 int mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 721 int mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
722 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN); 722 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN);
723 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 723 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
724 724
725 kev.reset(GenerateSynthesizedKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_K)); 725 kev.reset(GenerateSynthesizedKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_K));
726 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key); 726 mod_down_flags = HandleKeyEventForDownFlags(*kev.get(), &sticky_key);
727 EXPECT_FALSE(mod_down_flags & ui::EF_CONTROL_DOWN); 727 EXPECT_FALSE(mod_down_flags & ui::EF_CONTROL_DOWN);
728 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 728 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
729 729
730 // Test non-native mouse events. 730 // Test non-native mouse events.
731 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); 731 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL);
732 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 732 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
733 733
734 scoped_ptr<ui::MouseEvent> mev; 734 std::unique_ptr<ui::MouseEvent> mev;
735 mev.reset(GenerateSynthesizedMouseClickEvent(ui::ET_MOUSE_PRESSED, 735 mev.reset(GenerateSynthesizedMouseClickEvent(ui::ET_MOUSE_PRESSED,
736 gfx::Point(0, 0))); 736 gfx::Point(0, 0)));
737 bool released = false; 737 bool released = false;
738 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released); 738 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released);
739 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN); 739 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN);
740 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); 740 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state());
741 741
742 mev.reset(GenerateSynthesizedMouseClickEvent(ui::ET_MOUSE_RELEASED, 742 mev.reset(GenerateSynthesizedMouseClickEvent(ui::ET_MOUSE_RELEASED,
743 gfx::Point(0, 0))); 743 gfx::Point(0, 0)));
744 released = false; 744 released = false;
745 mod_down_flags = 0; 745 mod_down_flags = 0;
746 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released); 746 sticky_key.HandleMouseEvent(*mev.get(), &mod_down_flags, &released);
747 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN); 747 EXPECT_TRUE(mod_down_flags & ui::EF_CONTROL_DOWN);
748 EXPECT_TRUE(released); 748 EXPECT_TRUE(released);
749 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); 749 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state());
750 } 750 }
751 751
752 } // namespace ash 752 } // namespace ash
OLDNEW
« no previous file with comments | « ash/sticky_keys/sticky_keys_overlay.h ('k') | ash/system/audio/tray_audio.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698