Chromium Code Reviews| 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 21 matching lines...) Expand all Loading... | |
| 32 #include "ui/events/scoped_target_handler.h" | 32 #include "ui/events/scoped_target_handler.h" |
| 33 #include "ui/gfx/canvas.h" | 33 #include "ui/gfx/canvas.h" |
| 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/devtools_observer.h" | |
| 42 #include "ui/views/focus/view_storage.h" | 43 #include "ui/views/focus/view_storage.h" |
| 43 #include "ui/views/test/views_test_base.h" | 44 #include "ui/views/test/views_test_base.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 { |
| (...skipping 4518 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 // DevTools observer tests. | |
| 4583 //////////////////////////////////////////////////////////////////////////////// | |
| 4584 | |
| 4585 class DevToolsObserverTest : public ViewTest, public DevToolsObserver { | |
| 4586 public: | |
| 4587 DevToolsObserverTest() | |
| 4588 : views_hierarchy_changed_times_(0), | |
| 4589 view_visibility_changed_(nullptr), | |
| 4590 view_enabled_changed_(nullptr), | |
| 4591 view_bounds_changed_(nullptr), | |
| 4592 view_reordered_(nullptr) {} | |
| 4593 | |
| 4594 ~DevToolsObserverTest() override {} | |
| 4595 | |
| 4596 void OnViewHierarchyChanged( | |
| 4597 View* view, | |
| 4598 const View::ViewHierarchyChangedDetails& details) override { | |
| 4599 views_hierarchy_changed_.push_back(view); | |
| 4600 view_hierarchy_changed_details_ = details; | |
| 4601 views_hierarchy_changed_times_++; | |
| 4602 } | |
| 4603 | |
| 4604 void OnViewVisibilityChanged(View* view, bool visible) override { | |
| 4605 view_visibility_changed_ = view; | |
| 4606 } | |
| 4607 | |
| 4608 void OnViewEnabledChanged(View* view, int index) override { | |
| 4609 view_enabled_changed_ = view; | |
| 4610 } | |
| 4611 | |
| 4612 void OnViewBoundsChanged(View* view, const gfx::Rect& new_bounds) override { | |
| 4613 view_bounds_changed_ = view; | |
| 4614 } | |
| 4615 | |
| 4616 void OnChildViewReordered(View* view, int index) override { | |
| 4617 view_reordered_ = view; | |
| 4618 } | |
| 4619 | |
| 4620 bool DidChangeHierarchy(bool is_add, | |
| 4621 View* parent, | |
| 4622 View* child, | |
| 4623 View* move_view) { | |
| 4624 return view_hierarchy_changed_details_.is_add == is_add && | |
| 4625 view_hierarchy_changed_details_.parent == parent && | |
| 4626 view_hierarchy_changed_details_.child == child && | |
| 4627 view_hierarchy_changed_details_.move_view == move_view; | |
| 4628 } | |
| 4629 | |
| 4630 bool DidChangeHierarchy(View* view) { | |
| 4631 return std::find(views_hierarchy_changed_.begin(), | |
| 4632 views_hierarchy_changed_.end(), | |
| 4633 view) != views_hierarchy_changed_.end(); | |
| 4634 } | |
| 4635 | |
| 4636 void reset() { | |
| 4637 views_hierarchy_changed_.clear(); | |
| 4638 views_hierarchy_changed_times_ = 0; | |
| 4639 view_visibility_changed_ = nullptr; | |
| 4640 view_enabled_changed_ = nullptr; | |
| 4641 view_bounds_changed_ = nullptr; | |
| 4642 view_reordered_ = nullptr; | |
| 4643 } | |
| 4644 | |
| 4645 std::unique_ptr<View> NewView() { | |
| 4646 auto view = base::MakeUnique<View>(); | |
| 4647 view->set_devtools_observer(this); | |
| 4648 return view; | |
| 4649 } | |
| 4650 | |
| 4651 int views_hierarchy_changed_times() const { | |
| 4652 return views_hierarchy_changed_times_; | |
| 4653 } | |
| 4654 const View* view_visibility_changed() const { | |
| 4655 return view_visibility_changed_; | |
| 4656 } | |
| 4657 const View* view_enabled_changed() const { return view_enabled_changed_; } | |
| 4658 const View* view_bounds_changed() const { return view_bounds_changed_; } | |
| 4659 const View* view_reordered() const { return view_reordered_; } | |
| 4660 | |
| 4661 private: | |
| 4662 View::ViewHierarchyChangedDetails view_hierarchy_changed_details_; | |
| 4663 | |
| 4664 int views_hierarchy_changed_times_; | |
| 4665 std::vector<View*> views_hierarchy_changed_; | |
| 4666 View* view_visibility_changed_; | |
| 4667 View* view_enabled_changed_; | |
| 4668 View* view_bounds_changed_; | |
| 4669 View* view_reordered_; | |
| 4670 }; | |
| 4671 | |
| 4672 TEST_F(DevToolsObserverTest, DevToolsObserverViewHierarchyChanged) { | |
| 4673 std::unique_ptr<View> parent1 = NewView(); | |
| 4674 std::unique_ptr<View> parent2 = NewView(); | |
| 4675 std::unique_ptr<View> childView = NewView(); | |
| 4676 | |
| 4677 parent1->AddChildView(childView.get()); | |
| 4678 EXPECT_EQ(2, views_hierarchy_changed_times()); | |
|
sadrul
2016/11/16 18:35:23
Does this need to be called twice? Shouldn't once
| |
| 4679 EXPECT_TRUE(DidChangeHierarchy(parent1.get())); | |
| 4680 EXPECT_TRUE(DidChangeHierarchy(childView.get())); | |
| 4681 EXPECT_TRUE( | |
| 4682 DidChangeHierarchy(true, parent1.get(), childView.get(), nullptr)); | |
| 4683 | |
| 4684 reset(); | |
| 4685 | |
| 4686 parent2->AddChildView(childView.get()); | |
| 4687 EXPECT_EQ(4, views_hierarchy_changed_times()); | |
| 4688 EXPECT_TRUE(DidChangeHierarchy(parent1.get())); | |
| 4689 EXPECT_TRUE(DidChangeHierarchy(parent2.get())); | |
| 4690 EXPECT_TRUE(DidChangeHierarchy(childView.get())); | |
| 4691 EXPECT_TRUE( | |
| 4692 DidChangeHierarchy(true, parent2.get(), childView.get(), parent1.get())); | |
| 4693 | |
| 4694 reset(); | |
| 4695 | |
| 4696 parent2->RemoveChildView(childView.get()); | |
| 4697 EXPECT_EQ(2, views_hierarchy_changed_times()); | |
| 4698 EXPECT_TRUE(DidChangeHierarchy(parent2.get())); | |
| 4699 EXPECT_TRUE(DidChangeHierarchy(childView.get())); | |
| 4700 EXPECT_TRUE( | |
| 4701 DidChangeHierarchy(false, parent2.get(), childView.get(), nullptr)); | |
| 4702 } | |
| 4703 | |
| 4704 TEST_F(DevToolsObserverTest, DevToolsObserverViewVisibilityChanged) { | |
| 4705 std::unique_ptr<View> view = NewView(); | |
| 4706 view->SetVisible(false); | |
| 4707 EXPECT_EQ(view.get(), view_visibility_changed()); | |
| 4708 } | |
| 4709 | |
| 4710 TEST_F(DevToolsObserverTest, DevToolsObserverViewEnabledChanged) { | |
| 4711 std::unique_ptr<View> view = NewView(); | |
| 4712 view->SetEnabled(false); | |
| 4713 EXPECT_EQ(view.get(), view_enabled_changed()); | |
| 4714 } | |
| 4715 | |
| 4716 TEST_F(DevToolsObserverTest, DevToolsObserverViewBoundsChanged) { | |
| 4717 std::unique_ptr<View> view = NewView(); | |
| 4718 view->SetBounds(2, 2, 2, 2); | |
| 4719 EXPECT_EQ(view.get(), view_bounds_changed()); | |
| 4720 | |
| 4721 reset(); | |
| 4722 | |
| 4723 view->SetBoundsRect(gfx::Rect(1, 1, 1, 1)); | |
| 4724 EXPECT_EQ(view.get(), view_bounds_changed()); | |
| 4725 } | |
| 4726 | |
| 4727 TEST_F(DevToolsObserverTest, DevToolsObserverChildViewReordered) { | |
| 4728 std::unique_ptr<View> view = NewView(); | |
| 4729 std::unique_ptr<View> childView = NewView(); | |
| 4730 std::unique_ptr<View> childView2 = NewView(); | |
| 4731 view->AddChildView(childView.get()); | |
| 4732 view->AddChildView(childView2.get()); | |
| 4733 view->ReorderChildView(childView2.get(), 0); | |
| 4734 EXPECT_EQ(childView2.get(), view_reordered()); | |
| 4735 } | |
| 4736 | |
| 4580 } // namespace views | 4737 } // namespace views |
| OLD | NEW |