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

Side by Side Diff: views/focus/focus_manager_unittest.cc

Issue 7057014: Variety of tweaks to View API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « views/focus/focus_manager.cc ('k') | views/focus/focus_search.cc » ('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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/string16.h" 8 #include "base/string16.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 DISALLOW_COPY_AND_ASSIGN(FocusManagerTest); 255 DISALLOW_COPY_AND_ASSIGN(FocusManagerTest);
256 }; 256 };
257 257
258 // BorderView is a view containing a native window with its own view hierarchy. 258 // BorderView is a view containing a native window with its own view hierarchy.
259 // It is interesting to test focus traversal from a view hierarchy to an inner 259 // It is interesting to test focus traversal from a view hierarchy to an inner
260 // view hierarchy. 260 // view hierarchy.
261 class BorderView : public NativeViewHost { 261 class BorderView : public NativeViewHost {
262 public: 262 public:
263 explicit BorderView(View* child) : child_(child), widget_(NULL) { 263 explicit BorderView(View* child) : child_(child), widget_(NULL) {
264 DCHECK(child); 264 DCHECK(child);
265 SetFocusable(false); 265 set_focusable(false);
266 } 266 }
267 267
268 virtual ~BorderView() {} 268 virtual ~BorderView() {}
269 269
270 virtual internal::RootView* GetContentsRootView() { 270 virtual internal::RootView* GetContentsRootView() {
271 return static_cast<internal::RootView*>(widget_->GetRootView()); 271 return static_cast<internal::RootView*>(widget_->GetRootView());
272 } 272 }
273 273
274 virtual FocusTraversable* GetFocusTraversable() { 274 virtual FocusTraversable* GetFocusTraversable() {
275 return static_cast<internal::RootView*>(widget_->GetRootView()); 275 return static_cast<internal::RootView*>(widget_->GetRootView());
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 // NativeButton * kThumbnailStarID 458 // NativeButton * kThumbnailStarID
459 // NativeButton * kThumbnailSuperStarID 459 // NativeButton * kThumbnailSuperStarID
460 460
461 content_view_->set_background( 461 content_view_->set_background(
462 Background::CreateSolidBackground(SK_ColorWHITE)); 462 Background::CreateSolidBackground(SK_ColorWHITE));
463 463
464 Checkbox* cb = new Checkbox(L"This is a checkbox"); 464 Checkbox* cb = new Checkbox(L"This is a checkbox");
465 content_view_->AddChildView(cb); 465 content_view_->AddChildView(cb);
466 // In this fast paced world, who really has time for non hard-coded layout? 466 // In this fast paced world, who really has time for non hard-coded layout?
467 cb->SetBounds(10, 10, 200, 20); 467 cb->SetBounds(10, 10, 200, 20);
468 cb->SetID(kTopCheckBoxID); 468 cb->set_id(kTopCheckBoxID);
469 469
470 left_container_ = new PaneView(); 470 left_container_ = new PaneView();
471 left_container_->set_border(Border::CreateSolidBorder(1, SK_ColorBLACK)); 471 left_container_->set_border(Border::CreateSolidBorder(1, SK_ColorBLACK));
472 left_container_->set_background( 472 left_container_->set_background(
473 Background::CreateSolidBackground(240, 240, 240)); 473 Background::CreateSolidBackground(240, 240, 240));
474 left_container_->SetID(kLeftContainerID); 474 left_container_->set_id(kLeftContainerID);
475 content_view_->AddChildView(left_container_); 475 content_view_->AddChildView(left_container_);
476 left_container_->SetBounds(10, 35, 250, 200); 476 left_container_->SetBounds(10, 35, 250, 200);
477 477
478 int label_x = 5; 478 int label_x = 5;
479 int label_width = 50; 479 int label_width = 50;
480 int label_height = 15; 480 int label_height = 15;
481 int text_field_width = 150; 481 int text_field_width = 150;
482 int y = 10; 482 int y = 10;
483 int gap_between_labels = 10; 483 int gap_between_labels = 10;
484 484
485 Label* label = new Label(L"Apple:"); 485 Label* label = new Label(L"Apple:");
486 label->SetID(kAppleLabelID); 486 label->set_id(kAppleLabelID);
487 left_container_->AddChildView(label); 487 left_container_->AddChildView(label);
488 label->SetBounds(label_x, y, label_width, label_height); 488 label->SetBounds(label_x, y, label_width, label_height);
489 489
490 Textfield* text_field = new Textfield(); 490 Textfield* text_field = new Textfield();
491 text_field->SetID(kAppleTextfieldID); 491 text_field->set_id(kAppleTextfieldID);
492 left_container_->AddChildView(text_field); 492 left_container_->AddChildView(text_field);
493 text_field->SetBounds(label_x + label_width + 5, y, 493 text_field->SetBounds(label_x + label_width + 5, y,
494 text_field_width, label_height); 494 text_field_width, label_height);
495 495
496 y += label_height + gap_between_labels; 496 y += label_height + gap_between_labels;
497 497
498 label = new Label(L"Orange:"); 498 label = new Label(L"Orange:");
499 label->SetID(kOrangeLabelID); 499 label->set_id(kOrangeLabelID);
500 left_container_->AddChildView(label); 500 left_container_->AddChildView(label);
501 label->SetBounds(label_x, y, label_width, label_height); 501 label->SetBounds(label_x, y, label_width, label_height);
502 502
503 text_field = new Textfield(); 503 text_field = new Textfield();
504 text_field->SetID(kOrangeTextfieldID); 504 text_field->set_id(kOrangeTextfieldID);
505 left_container_->AddChildView(text_field); 505 left_container_->AddChildView(text_field);
506 text_field->SetBounds(label_x + label_width + 5, y, 506 text_field->SetBounds(label_x + label_width + 5, y,
507 text_field_width, label_height); 507 text_field_width, label_height);
508 508
509 y += label_height + gap_between_labels; 509 y += label_height + gap_between_labels;
510 510
511 label = new Label(L"Banana:"); 511 label = new Label(L"Banana:");
512 label->SetID(kBananaLabelID); 512 label->set_id(kBananaLabelID);
513 left_container_->AddChildView(label); 513 left_container_->AddChildView(label);
514 label->SetBounds(label_x, y, label_width, label_height); 514 label->SetBounds(label_x, y, label_width, label_height);
515 515
516 text_field = new Textfield(); 516 text_field = new Textfield();
517 text_field->SetID(kBananaTextfieldID); 517 text_field->set_id(kBananaTextfieldID);
518 left_container_->AddChildView(text_field); 518 left_container_->AddChildView(text_field);
519 text_field->SetBounds(label_x + label_width + 5, y, 519 text_field->SetBounds(label_x + label_width + 5, y,
520 text_field_width, label_height); 520 text_field_width, label_height);
521 521
522 y += label_height + gap_between_labels; 522 y += label_height + gap_between_labels;
523 523
524 label = new Label(L"Kiwi:"); 524 label = new Label(L"Kiwi:");
525 label->SetID(kKiwiLabelID); 525 label->set_id(kKiwiLabelID);
526 left_container_->AddChildView(label); 526 left_container_->AddChildView(label);
527 label->SetBounds(label_x, y, label_width, label_height); 527 label->SetBounds(label_x, y, label_width, label_height);
528 528
529 text_field = new Textfield(); 529 text_field = new Textfield();
530 text_field->SetID(kKiwiTextfieldID); 530 text_field->set_id(kKiwiTextfieldID);
531 left_container_->AddChildView(text_field); 531 left_container_->AddChildView(text_field);
532 text_field->SetBounds(label_x + label_width + 5, y, 532 text_field->SetBounds(label_x + label_width + 5, y,
533 text_field_width, label_height); 533 text_field_width, label_height);
534 534
535 y += label_height + gap_between_labels; 535 y += label_height + gap_between_labels;
536 536
537 NativeButton* button = new NativeButton(NULL, L"Click me"); 537 NativeButton* button = new NativeButton(NULL, L"Click me");
538 button->SetBounds(label_x, y + 10, 80, 30); 538 button->SetBounds(label_x, y + 10, 80, 30);
539 button->SetID(kFruitButtonID); 539 button->set_id(kFruitButtonID);
540 left_container_->AddChildView(button); 540 left_container_->AddChildView(button);
541 y += 40; 541 y += 40;
542 542
543 cb = new Checkbox(L"This is another check box"); 543 cb = new Checkbox(L"This is another check box");
544 cb->SetBounds(label_x + label_width + 5, y, 180, 20); 544 cb->SetBounds(label_x + label_width + 5, y, 180, 20);
545 cb->SetID(kFruitCheckBoxID); 545 cb->set_id(kFruitCheckBoxID);
546 left_container_->AddChildView(cb); 546 left_container_->AddChildView(cb);
547 y += 20; 547 y += 20;
548 548
549 Combobox* combobox = new Combobox(&combobox_model_); 549 Combobox* combobox = new Combobox(&combobox_model_);
550 combobox->SetBounds(label_x + label_width + 5, y, 150, 30); 550 combobox->SetBounds(label_x + label_width + 5, y, 150, 30);
551 combobox->SetID(kComboboxID); 551 combobox->set_id(kComboboxID);
552 left_container_->AddChildView(combobox); 552 left_container_->AddChildView(combobox);
553 553
554 right_container_ = new PaneView(); 554 right_container_ = new PaneView();
555 right_container_->set_border(Border::CreateSolidBorder(1, SK_ColorBLACK)); 555 right_container_->set_border(Border::CreateSolidBorder(1, SK_ColorBLACK));
556 right_container_->set_background( 556 right_container_->set_background(
557 Background::CreateSolidBackground(240, 240, 240)); 557 Background::CreateSolidBackground(240, 240, 240));
558 right_container_->SetID(kRightContainerID); 558 right_container_->set_id(kRightContainerID);
559 content_view_->AddChildView(right_container_); 559 content_view_->AddChildView(right_container_);
560 right_container_->SetBounds(270, 35, 300, 200); 560 right_container_->SetBounds(270, 35, 300, 200);
561 561
562 y = 10; 562 y = 10;
563 int radio_button_height = 18; 563 int radio_button_height = 18;
564 int gap_between_radio_buttons = 10; 564 int gap_between_radio_buttons = 10;
565 RadioButton* radio_button = new RadioButton(L"Asparagus", 1); 565 RadioButton* radio_button = new RadioButton(L"Asparagus", 1);
566 radio_button->SetID(kAsparagusButtonID); 566 radio_button->set_id(kAsparagusButtonID);
567 right_container_->AddChildView(radio_button); 567 right_container_->AddChildView(radio_button);
568 radio_button->SetBounds(5, y, 70, radio_button_height); 568 radio_button->SetBounds(5, y, 70, radio_button_height);
569 radio_button->SetGroup(1); 569 radio_button->set_group(1);
570 y += radio_button_height + gap_between_radio_buttons; 570 y += radio_button_height + gap_between_radio_buttons;
571 radio_button = new RadioButton(L"Broccoli", 1); 571 radio_button = new RadioButton(L"Broccoli", 1);
572 radio_button->SetID(kBroccoliButtonID); 572 radio_button->set_id(kBroccoliButtonID);
573 right_container_->AddChildView(radio_button); 573 right_container_->AddChildView(radio_button);
574 radio_button->SetBounds(5, y, 70, radio_button_height); 574 radio_button->SetBounds(5, y, 70, radio_button_height);
575 radio_button->SetGroup(1); 575 radio_button->set_group(1);
576 RadioButton* radio_button_to_check = radio_button; 576 RadioButton* radio_button_to_check = radio_button;
577 y += radio_button_height + gap_between_radio_buttons; 577 y += radio_button_height + gap_between_radio_buttons;
578 radio_button = new RadioButton(L"Cauliflower", 1); 578 radio_button = new RadioButton(L"Cauliflower", 1);
579 radio_button->SetID(kCauliflowerButtonID); 579 radio_button->set_id(kCauliflowerButtonID);
580 right_container_->AddChildView(radio_button); 580 right_container_->AddChildView(radio_button);
581 radio_button->SetBounds(5, y, 70, radio_button_height); 581 radio_button->SetBounds(5, y, 70, radio_button_height);
582 radio_button->SetGroup(1); 582 radio_button->set_group(1);
583 y += radio_button_height + gap_between_radio_buttons; 583 y += radio_button_height + gap_between_radio_buttons;
584 584
585 View* inner_container = new View(); 585 View* inner_container = new View();
586 inner_container->set_border(Border::CreateSolidBorder(1, SK_ColorBLACK)); 586 inner_container->set_border(Border::CreateSolidBorder(1, SK_ColorBLACK));
587 inner_container->set_background( 587 inner_container->set_background(
588 Background::CreateSolidBackground(230, 230, 230)); 588 Background::CreateSolidBackground(230, 230, 230));
589 inner_container->SetID(kInnerContainerID); 589 inner_container->set_id(kInnerContainerID);
590 right_container_->AddChildView(inner_container); 590 right_container_->AddChildView(inner_container);
591 inner_container->SetBounds(100, 10, 150, 180); 591 inner_container->SetBounds(100, 10, 150, 180);
592 592
593 ScrollView* scroll_view = new ScrollView(); 593 ScrollView* scroll_view = new ScrollView();
594 scroll_view->SetID(kScrollViewID); 594 scroll_view->set_id(kScrollViewID);
595 inner_container->AddChildView(scroll_view); 595 inner_container->AddChildView(scroll_view);
596 scroll_view->SetBounds(1, 1, 148, 178); 596 scroll_view->SetBounds(1, 1, 148, 178);
597 597
598 View* scroll_content = new View(); 598 View* scroll_content = new View();
599 scroll_content->SetBounds(0, 0, 200, 200); 599 scroll_content->SetBounds(0, 0, 200, 200);
600 scroll_content->set_background( 600 scroll_content->set_background(
601 Background::CreateSolidBackground(200, 200, 200)); 601 Background::CreateSolidBackground(200, 200, 200));
602 scroll_view->SetContents(scroll_content); 602 scroll_view->SetContents(scroll_content);
603 603
604 static const wchar_t* const kTitles[] = { 604 static const wchar_t* const kTitles[] = {
605 L"Rosetta", L"Stupeur et tremblement", L"The diner game", 605 L"Rosetta", L"Stupeur et tremblement", L"The diner game",
606 L"Ridicule", L"Le placard", L"Les Visiteurs", L"Amelie", 606 L"Ridicule", L"Le placard", L"Les Visiteurs", L"Amelie",
607 L"Joyeux Noel", L"Camping", L"Brice de Nice", 607 L"Joyeux Noel", L"Camping", L"Brice de Nice",
608 L"Taxi", L"Asterix" 608 L"Taxi", L"Asterix"
609 }; 609 };
610 610
611 static const int kIDs[] = { 611 static const int kIDs[] = {
612 kRosettaLinkID, kStupeurEtTremblementLinkID, kDinerGameLinkID, 612 kRosettaLinkID, kStupeurEtTremblementLinkID, kDinerGameLinkID,
613 kRidiculeLinkID, kClosetLinkID, kVisitingLinkID, kAmelieLinkID, 613 kRidiculeLinkID, kClosetLinkID, kVisitingLinkID, kAmelieLinkID,
614 kJoyeuxNoelLinkID, kCampingLinkID, kBriceDeNiceLinkID, 614 kJoyeuxNoelLinkID, kCampingLinkID, kBriceDeNiceLinkID,
615 kTaxiLinkID, kAsterixLinkID 615 kTaxiLinkID, kAsterixLinkID
616 }; 616 };
617 617
618 DCHECK(arraysize(kTitles) == arraysize(kIDs)); 618 DCHECK(arraysize(kTitles) == arraysize(kIDs));
619 619
620 y = 5; 620 y = 5;
621 for (size_t i = 0; i < arraysize(kTitles); ++i) { 621 for (size_t i = 0; i < arraysize(kTitles); ++i) {
622 Link* link = new Link(kTitles[i]); 622 Link* link = new Link(kTitles[i]);
623 link->SetHorizontalAlignment(Label::ALIGN_LEFT); 623 link->SetHorizontalAlignment(Label::ALIGN_LEFT);
624 link->SetID(kIDs[i]); 624 link->set_id(kIDs[i]);
625 scroll_content->AddChildView(link); 625 scroll_content->AddChildView(link);
626 link->SetBounds(5, y, 300, 15); 626 link->SetBounds(5, y, 300, 15);
627 y += 15; 627 y += 15;
628 } 628 }
629 629
630 y = 250; 630 y = 250;
631 int width = 60; 631 int width = 60;
632 button = new NativeButton(NULL, L"OK"); 632 button = new NativeButton(NULL, L"OK");
633 button->SetID(kOKButtonID); 633 button->set_id(kOKButtonID);
634 button->SetIsDefault(true); 634 button->SetIsDefault(true);
635 635
636 content_view_->AddChildView(button); 636 content_view_->AddChildView(button);
637 button->SetBounds(150, y, width, 30); 637 button->SetBounds(150, y, width, 30);
638 638
639 button = new NativeButton(NULL, L"Cancel"); 639 button = new NativeButton(NULL, L"Cancel");
640 button->SetID(kCancelButtonID); 640 button->set_id(kCancelButtonID);
641 content_view_->AddChildView(button); 641 content_view_->AddChildView(button);
642 button->SetBounds(220, y, width, 30); 642 button->SetBounds(220, y, width, 30);
643 643
644 button = new NativeButton(NULL, L"Help"); 644 button = new NativeButton(NULL, L"Help");
645 button->SetID(kHelpButtonID); 645 button->set_id(kHelpButtonID);
646 content_view_->AddChildView(button); 646 content_view_->AddChildView(button);
647 button->SetBounds(290, y, width, 30); 647 button->SetBounds(290, y, width, 30);
648 648
649 y += 40; 649 y += 40;
650 650
651 // Left bottom box with style checkboxes. 651 // Left bottom box with style checkboxes.
652 View* contents = new View(); 652 View* contents = new View();
653 contents->set_background(Background::CreateSolidBackground(SK_ColorWHITE)); 653 contents->set_background(Background::CreateSolidBackground(SK_ColorWHITE));
654 cb = new Checkbox(L"Bold"); 654 cb = new Checkbox(L"Bold");
655 contents->AddChildView(cb); 655 contents->AddChildView(cb);
656 cb->SetBounds(10, 10, 50, 20); 656 cb->SetBounds(10, 10, 50, 20);
657 cb->SetID(kBoldCheckBoxID); 657 cb->set_id(kBoldCheckBoxID);
658 658
659 cb = new Checkbox(L"Italic"); 659 cb = new Checkbox(L"Italic");
660 contents->AddChildView(cb); 660 contents->AddChildView(cb);
661 cb->SetBounds(70, 10, 50, 20); 661 cb->SetBounds(70, 10, 50, 20);
662 cb->SetID(kItalicCheckBoxID); 662 cb->set_id(kItalicCheckBoxID);
663 663
664 cb = new Checkbox(L"Underlined"); 664 cb = new Checkbox(L"Underlined");
665 contents->AddChildView(cb); 665 contents->AddChildView(cb);
666 cb->SetBounds(130, 10, 70, 20); 666 cb->SetBounds(130, 10, 70, 20);
667 cb->SetID(kUnderlinedCheckBoxID); 667 cb->set_id(kUnderlinedCheckBoxID);
668 668
669 Link* link = new Link(L"Help"); 669 Link* link = new Link(L"Help");
670 contents->AddChildView(link); 670 contents->AddChildView(link);
671 link->SetBounds(10, 35, 70, 10); 671 link->SetBounds(10, 35, 70, 10);
672 link->SetID(kStyleHelpLinkID); 672 link->set_id(kStyleHelpLinkID);
673 673
674 text_field = new Textfield(); 674 text_field = new Textfield();
675 contents->AddChildView(text_field); 675 contents->AddChildView(text_field);
676 text_field->SetBounds(10, 50, 100, 20); 676 text_field->SetBounds(10, 50, 100, 20);
677 text_field->SetID(kStyleTextEditID); 677 text_field->set_id(kStyleTextEditID);
678 678
679 style_tab_ = new TabbedPane(); 679 style_tab_ = new TabbedPane();
680 style_tab_->SetID(kStyleContainerID); 680 style_tab_->set_id(kStyleContainerID);
681 content_view_->AddChildView(style_tab_); 681 content_view_->AddChildView(style_tab_);
682 style_tab_->SetBounds(10, y, 210, 100); 682 style_tab_->SetBounds(10, y, 210, 100);
683 style_tab_->AddTab(L"Style", contents); 683 style_tab_->AddTab(L"Style", contents);
684 style_tab_->AddTab(L"Other", new View()); 684 style_tab_->AddTab(L"Other", new View());
685 685
686 // Right bottom box with search. 686 // Right bottom box with search.
687 contents = new View(); 687 contents = new View();
688 contents->set_background(Background::CreateSolidBackground(SK_ColorWHITE)); 688 contents->set_background(Background::CreateSolidBackground(SK_ColorWHITE));
689 text_field = new Textfield(); 689 text_field = new Textfield();
690 contents->AddChildView(text_field); 690 contents->AddChildView(text_field);
691 text_field->SetBounds(10, 10, 100, 20); 691 text_field->SetBounds(10, 10, 100, 20);
692 text_field->SetID(kSearchTextfieldID); 692 text_field->set_id(kSearchTextfieldID);
693 693
694 button = new NativeButton(NULL, L"Search"); 694 button = new NativeButton(NULL, L"Search");
695 contents->AddChildView(button); 695 contents->AddChildView(button);
696 button->SetBounds(112, 5, 60, 30); 696 button->SetBounds(112, 5, 60, 30);
697 button->SetID(kSearchButtonID); 697 button->set_id(kSearchButtonID);
698 698
699 link = new Link(L"Help"); 699 link = new Link(L"Help");
700 link->SetHorizontalAlignment(Label::ALIGN_LEFT); 700 link->SetHorizontalAlignment(Label::ALIGN_LEFT);
701 link->SetID(kHelpLinkID); 701 link->set_id(kHelpLinkID);
702 contents->AddChildView(link); 702 contents->AddChildView(link);
703 link->SetBounds(175, 10, 30, 20); 703 link->SetBounds(175, 10, 30, 20);
704 704
705 search_border_view_ = new BorderView(contents); 705 search_border_view_ = new BorderView(contents);
706 search_border_view_->SetID(kSearchContainerID); 706 search_border_view_->set_id(kSearchContainerID);
707 707
708 content_view_->AddChildView(search_border_view_); 708 content_view_->AddChildView(search_border_view_);
709 search_border_view_->SetBounds(300, y, 240, 50); 709 search_border_view_->SetBounds(300, y, 240, 50);
710 710
711 y += 60; 711 y += 60;
712 712
713 contents = new View(); 713 contents = new View();
714 contents->SetFocusable(true); 714 contents->set_focusable(true);
715 contents->set_background(Background::CreateSolidBackground(SK_ColorBLUE)); 715 contents->set_background(Background::CreateSolidBackground(SK_ColorBLUE));
716 contents->SetID(kThumbnailContainerID); 716 contents->set_id(kThumbnailContainerID);
717 button = new NativeButton(NULL, L"Star"); 717 button = new NativeButton(NULL, L"Star");
718 contents->AddChildView(button); 718 contents->AddChildView(button);
719 button->SetBounds(5, 5, 50, 30); 719 button->SetBounds(5, 5, 50, 30);
720 button->SetID(kThumbnailStarID); 720 button->set_id(kThumbnailStarID);
721 button = new NativeButton(NULL, L"SuperStar"); 721 button = new NativeButton(NULL, L"SuperStar");
722 contents->AddChildView(button); 722 contents->AddChildView(button);
723 button->SetBounds(60, 5, 100, 30); 723 button->SetBounds(60, 5, 100, 30);
724 button->SetID(kThumbnailSuperStarID); 724 button->set_id(kThumbnailSuperStarID);
725 725
726 content_view_->AddChildView(contents); 726 content_view_->AddChildView(contents);
727 contents->SetBounds(250, y, 200, 50); 727 contents->SetBounds(250, y, 200, 50);
728 // We can only call RadioButton::SetChecked() on the radio-button is part of 728 // We can only call RadioButton::SetChecked() on the radio-button is part of
729 // the view hierarchy. 729 // the view hierarchy.
730 radio_button_to_check->SetChecked(true); 730 radio_button_to_check->SetChecked(true);
731 } 731 }
732 732
733 //////////////////////////////////////////////////////////////////////////////// 733 ////////////////////////////////////////////////////////////////////////////////
734 // The tests 734 // The tests
(...skipping 11 matching lines...) Expand all
746 } 746 }
747 747
748 FocusTestEventType type; 748 FocusTestEventType type;
749 int view_id; 749 int view_id;
750 }; 750 };
751 751
752 class SimpleTestView : public View { 752 class SimpleTestView : public View {
753 public: 753 public:
754 SimpleTestView(std::vector<FocusTestEvent>* event_list, int view_id) 754 SimpleTestView(std::vector<FocusTestEvent>* event_list, int view_id)
755 : event_list_(event_list) { 755 : event_list_(event_list) {
756 SetFocusable(true); 756 set_focusable(true);
757 SetID(view_id); 757 set_id(view_id);
758 } 758 }
759 759
760 virtual void OnFocus() { 760 virtual void OnFocus() {
761 event_list_->push_back(FocusTestEvent(ON_FOCUS, GetID())); 761 event_list_->push_back(FocusTestEvent(ON_FOCUS, id()));
762 } 762 }
763 763
764 virtual void OnBlur() { 764 virtual void OnBlur() {
765 event_list_->push_back(FocusTestEvent(ON_BLUR, GetID())); 765 event_list_->push_back(FocusTestEvent(ON_BLUR, id()));
766 } 766 }
767 767
768 private: 768 private:
769 std::vector<FocusTestEvent>* event_list_; 769 std::vector<FocusTestEvent>* event_list_;
770 }; 770 };
771 771
772 // Tests that the appropriate Focus related methods are called when a View 772 // Tests that the appropriate Focus related methods are called when a View
773 // gets/loses focus. 773 // gets/loses focus.
774 TEST_F(FocusManagerTest, ViewFocusCallbacks) { 774 TEST_F(FocusManagerTest, ViewFocusCallbacks) {
775 std::vector<FocusTestEvent> event_list; 775 std::vector<FocusTestEvent> event_list;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 const std::vector<ViewPair>& focus_changes() const { return focus_changes_; } 811 const std::vector<ViewPair>& focus_changes() const { return focus_changes_; }
812 void ClearFocusChanges() { focus_changes_.clear(); } 812 void ClearFocusChanges() { focus_changes_.clear(); }
813 813
814 private: 814 private:
815 // A vector of which views lost/gained focus. 815 // A vector of which views lost/gained focus.
816 std::vector<ViewPair> focus_changes_; 816 std::vector<ViewPair> focus_changes_;
817 }; 817 };
818 818
819 TEST_F(FocusManagerTest, FocusChangeListener) { 819 TEST_F(FocusManagerTest, FocusChangeListener) {
820 View* view1 = new View(); 820 View* view1 = new View();
821 view1->SetFocusable(true); 821 view1->set_focusable(true);
822 View* view2 = new View(); 822 View* view2 = new View();
823 view2->SetFocusable(true); 823 view2->set_focusable(true);
824 content_view_->AddChildView(view1); 824 content_view_->AddChildView(view1);
825 content_view_->AddChildView(view2); 825 content_view_->AddChildView(view2);
826 826
827 TestFocusChangeListener listener; 827 TestFocusChangeListener listener;
828 AddFocusChangeListener(&listener); 828 AddFocusChangeListener(&listener);
829 829
830 // Visual Studio 2010 has problems converting NULL to the null pointer for 830 // Visual Studio 2010 has problems converting NULL to the null pointer for
831 // std::pair. See http://connect.microsoft.com/VisualStudio/feedback/details/ 520043/error-converting-from-null-to-a-pointer-type-in-std-pair 831 // std::pair. See http://connect.microsoft.com/VisualStudio/feedback/details/ 520043/error-converting-from-null-to-a-pointer-type-in-std-pair
832 // It will work if we pass nullptr. 832 // It will work if we pass nullptr.
833 #if defined(_MSC_VER) && _MSC_VER >= 1600 833 #if defined(_MSC_VER) && _MSC_VER >= 1600
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 #if defined(OS_WIN) 961 #if defined(OS_WIN)
962 962
963 // Test that when activating/deactivating the top window, the focus is stored/ 963 // Test that when activating/deactivating the top window, the focus is stored/
964 // restored properly. 964 // restored properly.
965 TEST_F(FocusManagerTest, FocusStoreRestore) { 965 TEST_F(FocusManagerTest, FocusStoreRestore) {
966 // Simulate an activate, otherwise the deactivate isn't going to do anything. 966 // Simulate an activate, otherwise the deactivate isn't going to do anything.
967 SimulateActivateWindow(); 967 SimulateActivateWindow();
968 968
969 NativeButton* button = new NativeButton(NULL, L"Press me"); 969 NativeButton* button = new NativeButton(NULL, L"Press me");
970 View* view = new View(); 970 View* view = new View();
971 view->SetFocusable(true); 971 view->set_focusable(true);
972 972
973 content_view_->AddChildView(button); 973 content_view_->AddChildView(button);
974 button->SetBounds(10, 10, 200, 30); 974 button->SetBounds(10, 10, 200, 30);
975 content_view_->AddChildView(view); 975 content_view_->AddChildView(view);
976 message_loop()->RunAllPending(); 976 message_loop()->RunAllPending();
977 977
978 TestFocusChangeListener listener; 978 TestFocusChangeListener listener;
979 AddFocusChangeListener(&listener); 979 AddFocusChangeListener(&listener);
980 980
981 view->RequestFocus(); 981 view->RequestFocus();
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 1078
1079 // Let's traverse the whole focus hierarchy (several times, to make sure it 1079 // Let's traverse the whole focus hierarchy (several times, to make sure it
1080 // loops OK). 1080 // loops OK).
1081 GetFocusManager()->ClearFocus(); 1081 GetFocusManager()->ClearFocus();
1082 for (int i = 0; i < 3; ++i) { 1082 for (int i = 0; i < 3; ++i) {
1083 for (size_t j = 0; j < arraysize(kTraversalIDs); j++) { 1083 for (size_t j = 0; j < arraysize(kTraversalIDs); j++) {
1084 GetFocusManager()->AdvanceFocus(false); 1084 GetFocusManager()->AdvanceFocus(false);
1085 View* focused_view = GetFocusManager()->GetFocusedView(); 1085 View* focused_view = GetFocusManager()->GetFocusedView();
1086 EXPECT_TRUE(focused_view != NULL); 1086 EXPECT_TRUE(focused_view != NULL);
1087 if (focused_view) 1087 if (focused_view)
1088 EXPECT_EQ(kTraversalIDs[j], focused_view->GetID()); 1088 EXPECT_EQ(kTraversalIDs[j], focused_view->id());
1089 } 1089 }
1090 } 1090 }
1091 1091
1092 // Let's traverse in reverse order. 1092 // Let's traverse in reverse order.
1093 GetFocusManager()->ClearFocus(); 1093 GetFocusManager()->ClearFocus();
1094 for (int i = 0; i < 3; ++i) { 1094 for (int i = 0; i < 3; ++i) {
1095 for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) { 1095 for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) {
1096 GetFocusManager()->AdvanceFocus(true); 1096 GetFocusManager()->AdvanceFocus(true);
1097 View* focused_view = GetFocusManager()->GetFocusedView(); 1097 View* focused_view = GetFocusManager()->GetFocusedView();
1098 EXPECT_TRUE(focused_view != NULL); 1098 EXPECT_TRUE(focused_view != NULL);
1099 if (focused_view) 1099 if (focused_view)
1100 EXPECT_EQ(kTraversalIDs[j], focused_view->GetID()); 1100 EXPECT_EQ(kTraversalIDs[j], focused_view->id());
1101 } 1101 }
1102 } 1102 }
1103 } 1103 }
1104 1104
1105 TEST_F(FocusTraversalTest, TraversalWithNonEnabledViews) { 1105 TEST_F(FocusTraversalTest, TraversalWithNonEnabledViews) {
1106 const int kDisabledIDs[] = { 1106 const int kDisabledIDs[] = {
1107 kBananaTextfieldID, kFruitCheckBoxID, kComboboxID, kAsparagusButtonID, 1107 kBananaTextfieldID, kFruitCheckBoxID, kComboboxID, kAsparagusButtonID,
1108 kCauliflowerButtonID, kClosetLinkID, kVisitingLinkID, kBriceDeNiceLinkID, 1108 kCauliflowerButtonID, kClosetLinkID, kVisitingLinkID, kBriceDeNiceLinkID,
1109 kTaxiLinkID, kAsterixLinkID, kHelpButtonID, kBoldCheckBoxID, 1109 kTaxiLinkID, kAsterixLinkID, kHelpButtonID, kBoldCheckBoxID,
1110 kSearchTextfieldID, kHelpLinkID }; 1110 kSearchTextfieldID, kHelpLinkID };
(...skipping 20 matching lines...) Expand all
1131 1131
1132 View* focused_view; 1132 View* focused_view;
1133 // Let's do one traversal (several times, to make sure it loops ok). 1133 // Let's do one traversal (several times, to make sure it loops ok).
1134 GetFocusManager()->ClearFocus(); 1134 GetFocusManager()->ClearFocus();
1135 for (int i = 0; i < 3; ++i) { 1135 for (int i = 0; i < 3; ++i) {
1136 for (size_t j = 0; j < arraysize(kTraversalIDs); j++) { 1136 for (size_t j = 0; j < arraysize(kTraversalIDs); j++) {
1137 GetFocusManager()->AdvanceFocus(false); 1137 GetFocusManager()->AdvanceFocus(false);
1138 focused_view = GetFocusManager()->GetFocusedView(); 1138 focused_view = GetFocusManager()->GetFocusedView();
1139 EXPECT_TRUE(focused_view != NULL); 1139 EXPECT_TRUE(focused_view != NULL);
1140 if (focused_view) 1140 if (focused_view)
1141 EXPECT_EQ(kTraversalIDs[j], focused_view->GetID()); 1141 EXPECT_EQ(kTraversalIDs[j], focused_view->id());
1142 } 1142 }
1143 } 1143 }
1144 1144
1145 // Same thing in reverse. 1145 // Same thing in reverse.
1146 GetFocusManager()->ClearFocus(); 1146 GetFocusManager()->ClearFocus();
1147 for (int i = 0; i < 3; ++i) { 1147 for (int i = 0; i < 3; ++i) {
1148 for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) { 1148 for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) {
1149 GetFocusManager()->AdvanceFocus(true); 1149 GetFocusManager()->AdvanceFocus(true);
1150 focused_view = GetFocusManager()->GetFocusedView(); 1150 focused_view = GetFocusManager()->GetFocusedView();
1151 EXPECT_TRUE(focused_view != NULL); 1151 EXPECT_TRUE(focused_view != NULL);
1152 if (focused_view) 1152 if (focused_view)
1153 EXPECT_EQ(kTraversalIDs[j], focused_view->GetID()); 1153 EXPECT_EQ(kTraversalIDs[j], focused_view->id());
1154 } 1154 }
1155 } 1155 }
1156 } 1156 }
1157 1157
1158 TEST_F(FocusTraversalTest, TraversalWithInvisibleViews) { 1158 TEST_F(FocusTraversalTest, TraversalWithInvisibleViews) {
1159 const int kInvisibleIDs[] = { kTopCheckBoxID, kOKButtonID, 1159 const int kInvisibleIDs[] = { kTopCheckBoxID, kOKButtonID,
1160 kThumbnailContainerID }; 1160 kThumbnailContainerID };
1161 1161
1162 const int kTraversalIDs[] = { kAppleTextfieldID, kOrangeTextfieldID, 1162 const int kTraversalIDs[] = { kAppleTextfieldID, kOrangeTextfieldID,
1163 kBananaTextfieldID, kKiwiTextfieldID, kFruitButtonID, kFruitCheckBoxID, 1163 kBananaTextfieldID, kKiwiTextfieldID, kFruitButtonID, kFruitCheckBoxID,
(...skipping 19 matching lines...) Expand all
1183 1183
1184 View* focused_view; 1184 View* focused_view;
1185 // Let's do one traversal (several times, to make sure it loops ok). 1185 // Let's do one traversal (several times, to make sure it loops ok).
1186 GetFocusManager()->ClearFocus(); 1186 GetFocusManager()->ClearFocus();
1187 for (int i = 0; i < 3; ++i) { 1187 for (int i = 0; i < 3; ++i) {
1188 for (size_t j = 0; j < arraysize(kTraversalIDs); j++) { 1188 for (size_t j = 0; j < arraysize(kTraversalIDs); j++) {
1189 GetFocusManager()->AdvanceFocus(false); 1189 GetFocusManager()->AdvanceFocus(false);
1190 focused_view = GetFocusManager()->GetFocusedView(); 1190 focused_view = GetFocusManager()->GetFocusedView();
1191 EXPECT_TRUE(focused_view != NULL); 1191 EXPECT_TRUE(focused_view != NULL);
1192 if (focused_view) 1192 if (focused_view)
1193 EXPECT_EQ(kTraversalIDs[j], focused_view->GetID()); 1193 EXPECT_EQ(kTraversalIDs[j], focused_view->id());
1194 } 1194 }
1195 } 1195 }
1196 1196
1197 // Same thing in reverse. 1197 // Same thing in reverse.
1198 GetFocusManager()->ClearFocus(); 1198 GetFocusManager()->ClearFocus();
1199 for (int i = 0; i < 3; ++i) { 1199 for (int i = 0; i < 3; ++i) {
1200 for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) { 1200 for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) {
1201 GetFocusManager()->AdvanceFocus(true); 1201 GetFocusManager()->AdvanceFocus(true);
1202 focused_view = GetFocusManager()->GetFocusedView(); 1202 focused_view = GetFocusManager()->GetFocusedView();
1203 EXPECT_TRUE(focused_view != NULL); 1203 EXPECT_TRUE(focused_view != NULL);
1204 if (focused_view) 1204 if (focused_view)
1205 EXPECT_EQ(kTraversalIDs[j], focused_view->GetID()); 1205 EXPECT_EQ(kTraversalIDs[j], focused_view->id());
1206 } 1206 }
1207 } 1207 }
1208 } 1208 }
1209 1209
1210 TEST_F(FocusTraversalTest, PaneTraversal) { 1210 TEST_F(FocusTraversalTest, PaneTraversal) {
1211 // Tests trapping the traversal within a pane - useful for full 1211 // Tests trapping the traversal within a pane - useful for full
1212 // keyboard accessibility for toolbars. 1212 // keyboard accessibility for toolbars.
1213 1213
1214 // First test the left container. 1214 // First test the left container.
1215 const int kLeftTraversalIDs[] = { 1215 const int kLeftTraversalIDs[] = {
1216 kAppleTextfieldID, 1216 kAppleTextfieldID,
1217 kOrangeTextfieldID, kBananaTextfieldID, kKiwiTextfieldID, 1217 kOrangeTextfieldID, kBananaTextfieldID, kKiwiTextfieldID,
1218 kFruitButtonID, kFruitCheckBoxID, kComboboxID }; 1218 kFruitButtonID, kFruitCheckBoxID, kComboboxID };
1219 1219
1220 FocusSearch focus_search_left(left_container_, true, false); 1220 FocusSearch focus_search_left(left_container_, true, false);
1221 left_container_->EnablePaneFocus(&focus_search_left); 1221 left_container_->EnablePaneFocus(&focus_search_left);
1222 FindViewByID(kComboboxID)->RequestFocus(); 1222 FindViewByID(kComboboxID)->RequestFocus();
1223 1223
1224 // Traverse the focus hierarchy within the pane several times. 1224 // Traverse the focus hierarchy within the pane several times.
1225 for (int i = 0; i < 3; ++i) { 1225 for (int i = 0; i < 3; ++i) {
1226 for (size_t j = 0; j < arraysize(kLeftTraversalIDs); j++) { 1226 for (size_t j = 0; j < arraysize(kLeftTraversalIDs); j++) {
1227 GetFocusManager()->AdvanceFocus(false); 1227 GetFocusManager()->AdvanceFocus(false);
1228 View* focused_view = GetFocusManager()->GetFocusedView(); 1228 View* focused_view = GetFocusManager()->GetFocusedView();
1229 EXPECT_TRUE(focused_view != NULL); 1229 EXPECT_TRUE(focused_view != NULL);
1230 if (focused_view) 1230 if (focused_view)
1231 EXPECT_EQ(kLeftTraversalIDs[j], focused_view->GetID()); 1231 EXPECT_EQ(kLeftTraversalIDs[j], focused_view->id());
1232 } 1232 }
1233 } 1233 }
1234 1234
1235 // Traverse in reverse order. 1235 // Traverse in reverse order.
1236 FindViewByID(kAppleTextfieldID)->RequestFocus(); 1236 FindViewByID(kAppleTextfieldID)->RequestFocus();
1237 for (int i = 0; i < 3; ++i) { 1237 for (int i = 0; i < 3; ++i) {
1238 for (int j = arraysize(kLeftTraversalIDs) - 1; j >= 0; --j) { 1238 for (int j = arraysize(kLeftTraversalIDs) - 1; j >= 0; --j) {
1239 GetFocusManager()->AdvanceFocus(true); 1239 GetFocusManager()->AdvanceFocus(true);
1240 View* focused_view = GetFocusManager()->GetFocusedView(); 1240 View* focused_view = GetFocusManager()->GetFocusedView();
1241 EXPECT_TRUE(focused_view != NULL); 1241 EXPECT_TRUE(focused_view != NULL);
1242 if (focused_view) 1242 if (focused_view)
1243 EXPECT_EQ(kLeftTraversalIDs[j], focused_view->GetID()); 1243 EXPECT_EQ(kLeftTraversalIDs[j], focused_view->id());
1244 } 1244 }
1245 } 1245 }
1246 1246
1247 // Now test the right container, but this time with accessibility mode. 1247 // Now test the right container, but this time with accessibility mode.
1248 // Make some links not focusable, but mark one of them as 1248 // Make some links not focusable, but mark one of them as
1249 // "accessibility focusable", so it should show up in the traversal. 1249 // "accessibility focusable", so it should show up in the traversal.
1250 const int kRightTraversalIDs[] = { 1250 const int kRightTraversalIDs[] = {
1251 kBroccoliButtonID, kDinerGameLinkID, kRidiculeLinkID, 1251 kBroccoliButtonID, kDinerGameLinkID, kRidiculeLinkID,
1252 kClosetLinkID, kVisitingLinkID, kAmelieLinkID, kJoyeuxNoelLinkID, 1252 kClosetLinkID, kVisitingLinkID, kAmelieLinkID, kJoyeuxNoelLinkID,
1253 kCampingLinkID, kBriceDeNiceLinkID, kTaxiLinkID, kAsterixLinkID }; 1253 kCampingLinkID, kBriceDeNiceLinkID, kTaxiLinkID, kAsterixLinkID };
1254 1254
1255 FocusSearch focus_search_right(right_container_, true, true); 1255 FocusSearch focus_search_right(right_container_, true, true);
1256 right_container_->EnablePaneFocus(&focus_search_right); 1256 right_container_->EnablePaneFocus(&focus_search_right);
1257 FindViewByID(kRosettaLinkID)->SetFocusable(false); 1257 FindViewByID(kRosettaLinkID)->set_focusable(false);
1258 FindViewByID(kStupeurEtTremblementLinkID)->SetFocusable(false); 1258 FindViewByID(kStupeurEtTremblementLinkID)->set_focusable(false);
1259 FindViewByID(kDinerGameLinkID)->set_accessibility_focusable(true); 1259 FindViewByID(kDinerGameLinkID)->set_accessibility_focusable(true);
1260 FindViewByID(kDinerGameLinkID)->SetFocusable(false); 1260 FindViewByID(kDinerGameLinkID)->set_focusable(false);
1261 FindViewByID(kAsterixLinkID)->RequestFocus(); 1261 FindViewByID(kAsterixLinkID)->RequestFocus();
1262 1262
1263 // Traverse the focus hierarchy within the pane several times. 1263 // Traverse the focus hierarchy within the pane several times.
1264 for (int i = 0; i < 3; ++i) { 1264 for (int i = 0; i < 3; ++i) {
1265 for (size_t j = 0; j < arraysize(kRightTraversalIDs); j++) { 1265 for (size_t j = 0; j < arraysize(kRightTraversalIDs); j++) {
1266 GetFocusManager()->AdvanceFocus(false); 1266 GetFocusManager()->AdvanceFocus(false);
1267 View* focused_view = GetFocusManager()->GetFocusedView(); 1267 View* focused_view = GetFocusManager()->GetFocusedView();
1268 EXPECT_TRUE(focused_view != NULL); 1268 EXPECT_TRUE(focused_view != NULL);
1269 if (focused_view) 1269 if (focused_view)
1270 EXPECT_EQ(kRightTraversalIDs[j], focused_view->GetID()); 1270 EXPECT_EQ(kRightTraversalIDs[j], focused_view->id());
1271 } 1271 }
1272 } 1272 }
1273 1273
1274 // Traverse in reverse order. 1274 // Traverse in reverse order.
1275 FindViewByID(kBroccoliButtonID)->RequestFocus(); 1275 FindViewByID(kBroccoliButtonID)->RequestFocus();
1276 for (int i = 0; i < 3; ++i) { 1276 for (int i = 0; i < 3; ++i) {
1277 for (int j = arraysize(kRightTraversalIDs) - 1; j >= 0; --j) { 1277 for (int j = arraysize(kRightTraversalIDs) - 1; j >= 0; --j) {
1278 GetFocusManager()->AdvanceFocus(true); 1278 GetFocusManager()->AdvanceFocus(true);
1279 View* focused_view = GetFocusManager()->GetFocusedView(); 1279 View* focused_view = GetFocusManager()->GetFocusedView();
1280 EXPECT_TRUE(focused_view != NULL); 1280 EXPECT_TRUE(focused_view != NULL);
1281 if (focused_view) 1281 if (focused_view)
1282 EXPECT_EQ(kRightTraversalIDs[j], focused_view->GetID()); 1282 EXPECT_EQ(kRightTraversalIDs[j], focused_view->id());
1283 } 1283 }
1284 } 1284 }
1285 1285
1286 } 1286 }
1287 1287
1288 // Counts accelerator calls. 1288 // Counts accelerator calls.
1289 class TestAcceleratorTarget : public AcceleratorTarget { 1289 class TestAcceleratorTarget : public AcceleratorTarget {
1290 public: 1290 public:
1291 explicit TestAcceleratorTarget(bool process_accelerator) 1291 explicit TestAcceleratorTarget(bool process_accelerator)
1292 : accelerator_count_(0), process_accelerator_(process_accelerator) {} 1292 : accelerator_count_(0), process_accelerator_(process_accelerator) {}
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 1721
1722 // Focus manager should be the last one to destruct. 1722 // Focus manager should be the last one to destruct.
1723 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str()); 1723 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str());
1724 1724
1725 // Clear window_ so that we don't try to close it again. 1725 // Clear window_ so that we don't try to close it again.
1726 window_ = NULL; 1726 window_ = NULL;
1727 } 1727 }
1728 1728
1729 1729
1730 } // namespace views 1730 } // namespace views
OLDNEW
« no previous file with comments | « views/focus/focus_manager.cc ('k') | views/focus/focus_search.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698