| 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 "ui/views/view.h" | 5 #include "ui/views/view.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "ui/gfx/path.h" | 34 #include "ui/gfx/path.h" |
| 35 #include "ui/gfx/transform.h" | 35 #include "ui/gfx/transform.h" |
| 36 #include "ui/native_theme/native_theme.h" | 36 #include "ui/native_theme/native_theme.h" |
| 37 #include "ui/strings/grit/ui_strings.h" | 37 #include "ui/strings/grit/ui_strings.h" |
| 38 #include "ui/views/background.h" | 38 #include "ui/views/background.h" |
| 39 #include "ui/views/controls/native/native_view_host.h" | 39 #include "ui/views/controls/native/native_view_host.h" |
| 40 #include "ui/views/controls/scroll_view.h" | 40 #include "ui/views/controls/scroll_view.h" |
| 41 #include "ui/views/controls/textfield/textfield.h" | 41 #include "ui/views/controls/textfield/textfield.h" |
| 42 #include "ui/views/focus/view_storage.h" | 42 #include "ui/views/focus/view_storage.h" |
| 43 #include "ui/views/test/views_test_base.h" | 43 #include "ui/views/test/views_test_base.h" |
| 44 #include "ui/views/view_observer.h" |
| 44 #include "ui/views/widget/native_widget.h" | 45 #include "ui/views/widget/native_widget.h" |
| 45 #include "ui/views/widget/root_view.h" | 46 #include "ui/views/widget/root_view.h" |
| 46 #include "ui/views/window/dialog_client_view.h" | 47 #include "ui/views/window/dialog_client_view.h" |
| 47 #include "ui/views/window/dialog_delegate.h" | 48 #include "ui/views/window/dialog_delegate.h" |
| 48 | 49 |
| 49 using base::ASCIIToUTF16; | 50 using base::ASCIIToUTF16; |
| 50 | 51 |
| 51 namespace { | 52 namespace { |
| 52 | 53 |
| 53 // Returns true if |ancestor| is an ancestor of |layer|. | 54 // Returns true if |ancestor| is an ancestor of |layer|. |
| (...skipping 4516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4570 params.bounds = gfx::Rect(50, 50, 350, 350); | 4571 params.bounds = gfx::Rect(50, 50, 350, 350); |
| 4571 widget.Init(params); | 4572 widget.Init(params); |
| 4572 | 4573 |
| 4573 AddViewWithChildLayer(widget.GetRootView()); | 4574 AddViewWithChildLayer(widget.GetRootView()); |
| 4574 ViewThatAddsViewInOnNativeThemeChanged* v = | 4575 ViewThatAddsViewInOnNativeThemeChanged* v = |
| 4575 new ViewThatAddsViewInOnNativeThemeChanged; | 4576 new ViewThatAddsViewInOnNativeThemeChanged; |
| 4576 widget.GetRootView()->AddChildView(v); | 4577 widget.GetRootView()->AddChildView(v); |
| 4577 EXPECT_TRUE(v->on_native_theme_changed_called()); | 4578 EXPECT_TRUE(v->on_native_theme_changed_called()); |
| 4578 } | 4579 } |
| 4579 | 4580 |
| 4581 //////////////////////////////////////////////////////////////////////////////// |
| 4582 // Observer tests. |
| 4583 //////////////////////////////////////////////////////////////////////////////// |
| 4584 |
| 4585 class ViewObserverTest : public ViewTest, public ViewObserver { |
| 4586 public: |
| 4587 ViewObserverTest() |
| 4588 : child_view_added_times_(0), |
| 4589 child_view_removed_times_(0), |
| 4590 child_view_added_(nullptr), |
| 4591 child_view_removed_(nullptr), |
| 4592 child_view_removed_parent_(nullptr), |
| 4593 view_visibility_changed_(nullptr), |
| 4594 view_enabled_changed_(nullptr), |
| 4595 view_bounds_changed_(nullptr), |
| 4596 view_reordered_(nullptr) {} |
| 4597 |
| 4598 ~ViewObserverTest() override {} |
| 4599 |
| 4600 // ViewObserver: |
| 4601 void OnChildViewAdded(View* child) override { |
| 4602 child_view_added_times_++; |
| 4603 child_view_added_ = child; |
| 4604 } |
| 4605 void OnChildViewRemoved(View* child, View* parent) override { |
| 4606 child_view_removed_times_++; |
| 4607 child_view_removed_ = child; |
| 4608 child_view_removed_parent_ = parent; |
| 4609 } |
| 4610 |
| 4611 void OnViewVisibilityChanged(View* view) override { |
| 4612 view_visibility_changed_ = view; |
| 4613 } |
| 4614 |
| 4615 void OnViewEnabledChanged(View* view) override { |
| 4616 view_enabled_changed_ = view; |
| 4617 } |
| 4618 |
| 4619 void OnViewBoundsChanged(View* view) override { view_bounds_changed_ = view; } |
| 4620 |
| 4621 void OnChildViewReordered(View* view) override { view_reordered_ = view; } |
| 4622 |
| 4623 void reset() { |
| 4624 child_view_added_times_ = 0; |
| 4625 child_view_removed_times_ = 0; |
| 4626 child_view_added_ = nullptr; |
| 4627 child_view_removed_ = nullptr; |
| 4628 child_view_removed_parent_ = nullptr; |
| 4629 view_visibility_changed_ = nullptr; |
| 4630 view_enabled_changed_ = nullptr; |
| 4631 view_bounds_changed_ = nullptr; |
| 4632 view_reordered_ = nullptr; |
| 4633 } |
| 4634 |
| 4635 std::unique_ptr<View> NewView() { |
| 4636 auto view = base::MakeUnique<View>(); |
| 4637 view->AddObserver(this); |
| 4638 return view; |
| 4639 } |
| 4640 |
| 4641 int child_view_added_times() { return child_view_added_times_; } |
| 4642 int child_view_removed_times() { return child_view_removed_times_; } |
| 4643 const View* child_view_added() const { return child_view_added_; } |
| 4644 const View* child_view_removed() const { return child_view_removed_; } |
| 4645 const View* child_view_removed_parent() const { |
| 4646 return child_view_removed_parent_; |
| 4647 } |
| 4648 const View* view_visibility_changed() const { |
| 4649 return view_visibility_changed_; |
| 4650 } |
| 4651 const View* view_enabled_changed() const { return view_enabled_changed_; } |
| 4652 const View* view_bounds_changed() const { return view_bounds_changed_; } |
| 4653 const View* view_reordered() const { return view_reordered_; } |
| 4654 |
| 4655 private: |
| 4656 int child_view_added_times_; |
| 4657 int child_view_removed_times_; |
| 4658 |
| 4659 View* child_view_added_; |
| 4660 View* child_view_removed_; |
| 4661 View* child_view_removed_parent_; |
| 4662 View* view_visibility_changed_; |
| 4663 View* view_enabled_changed_; |
| 4664 View* view_bounds_changed_; |
| 4665 View* view_reordered_; |
| 4666 |
| 4667 DISALLOW_COPY_AND_ASSIGN(ViewObserverTest); |
| 4668 }; |
| 4669 |
| 4670 TEST_F(ViewObserverTest, ViewParentChanged) { |
| 4671 std::unique_ptr<View> parent1 = NewView(); |
| 4672 std::unique_ptr<View> parent2 = NewView(); |
| 4673 std::unique_ptr<View> child_view = NewView(); |
| 4674 |
| 4675 parent1->AddChildView(child_view.get()); |
| 4676 EXPECT_EQ(0, child_view_removed_times()); |
| 4677 EXPECT_EQ(1, child_view_added_times()); |
| 4678 EXPECT_EQ(child_view.get(), child_view_added()); |
| 4679 EXPECT_EQ(child_view.get()->parent(), parent1.get()); |
| 4680 reset(); |
| 4681 |
| 4682 // Removed from parent1, added to parent2 |
| 4683 parent2->AddChildView(child_view.get()); |
| 4684 EXPECT_EQ(1, child_view_removed_times()); |
| 4685 EXPECT_EQ(1, child_view_added_times()); |
| 4686 EXPECT_EQ(child_view.get(), child_view_removed()); |
| 4687 EXPECT_EQ(parent1.get(), child_view_removed_parent()); |
| 4688 EXPECT_EQ(child_view.get(), child_view_added()); |
| 4689 EXPECT_EQ(child_view.get()->parent(), parent2.get()); |
| 4690 |
| 4691 reset(); |
| 4692 |
| 4693 parent2->RemoveChildView(child_view.get()); |
| 4694 EXPECT_EQ(1, child_view_removed_times()); |
| 4695 EXPECT_EQ(0, child_view_added_times()); |
| 4696 EXPECT_EQ(child_view.get(), child_view_removed()); |
| 4697 EXPECT_EQ(parent2.get(), child_view_removed_parent()); |
| 4698 } |
| 4699 |
| 4700 TEST_F(ViewObserverTest, ViewVisibilityChanged) { |
| 4701 std::unique_ptr<View> view = NewView(); |
| 4702 view->SetVisible(false); |
| 4703 EXPECT_EQ(view.get(), view_visibility_changed()); |
| 4704 EXPECT_EQ(false, view->visible()); |
| 4705 } |
| 4706 |
| 4707 TEST_F(ViewObserverTest, ViewEnabledChanged) { |
| 4708 std::unique_ptr<View> view = NewView(); |
| 4709 view->SetEnabled(false); |
| 4710 EXPECT_EQ(view.get(), view_enabled_changed()); |
| 4711 EXPECT_EQ(false, view->enabled()); |
| 4712 } |
| 4713 |
| 4714 TEST_F(ViewObserverTest, ViewBoundsChanged) { |
| 4715 std::unique_ptr<View> view = NewView(); |
| 4716 gfx::Rect bounds(2, 2, 2, 2); |
| 4717 view->SetBoundsRect(bounds); |
| 4718 EXPECT_EQ(view.get(), view_bounds_changed()); |
| 4719 EXPECT_EQ(bounds, view->bounds()); |
| 4720 |
| 4721 reset(); |
| 4722 |
| 4723 gfx::Rect new_bounds(1, 1, 1, 1); |
| 4724 view->SetBoundsRect(new_bounds); |
| 4725 EXPECT_EQ(view.get(), view_bounds_changed()); |
| 4726 EXPECT_EQ(new_bounds, view->bounds()); |
| 4727 } |
| 4728 |
| 4729 TEST_F(ViewObserverTest, ChildViewReordered) { |
| 4730 std::unique_ptr<View> view = NewView(); |
| 4731 std::unique_ptr<View> child_view = NewView(); |
| 4732 std::unique_ptr<View> child_view2 = NewView(); |
| 4733 view->AddChildView(child_view.get()); |
| 4734 view->AddChildView(child_view2.get()); |
| 4735 view->ReorderChildView(child_view2.get(), 0); |
| 4736 EXPECT_EQ(child_view2.get(), view_reordered()); |
| 4737 } |
| 4738 |
| 4580 } // namespace views | 4739 } // namespace views |
| OLD | NEW |