| 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" |
| 6 |
| 5 #include <stddef.h> | 7 #include <stddef.h> |
| 6 | 8 |
| 7 #include <map> | 9 #include <map> |
| 10 #include <memory> |
| 8 | 11 |
| 9 #include "base/i18n/rtl.h" | 12 #include "base/i18n/rtl.h" |
| 10 #include "base/macros.h" | 13 #include "base/macros.h" |
| 11 #include "base/memory/scoped_ptr.h" | |
| 12 #include "base/rand_util.h" | 14 #include "base/rand_util.h" |
| 13 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
| 14 #include "base/strings/stringprintf.h" | 16 #include "base/strings/stringprintf.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 16 #include "build/build_config.h" | 18 #include "build/build_config.h" |
| 17 #include "cc/playback/display_item_list.h" | 19 #include "cc/playback/display_item_list.h" |
| 18 #include "cc/playback/display_item_list_settings.h" | 20 #include "cc/playback/display_item_list_settings.h" |
| 19 #include "ui/base/accelerators/accelerator.h" | 21 #include "ui/base/accelerators/accelerator.h" |
| 20 #include "ui/base/clipboard/clipboard.h" | 22 #include "ui/base/clipboard/clipboard.h" |
| 21 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 32 #include "ui/gfx/path.h" | 34 #include "ui/gfx/path.h" |
| 33 #include "ui/gfx/transform.h" | 35 #include "ui/gfx/transform.h" |
| 34 #include "ui/native_theme/native_theme.h" | 36 #include "ui/native_theme/native_theme.h" |
| 35 #include "ui/strings/grit/ui_strings.h" | 37 #include "ui/strings/grit/ui_strings.h" |
| 36 #include "ui/views/background.h" | 38 #include "ui/views/background.h" |
| 37 #include "ui/views/controls/native/native_view_host.h" | 39 #include "ui/views/controls/native/native_view_host.h" |
| 38 #include "ui/views/controls/scroll_view.h" | 40 #include "ui/views/controls/scroll_view.h" |
| 39 #include "ui/views/controls/textfield/textfield.h" | 41 #include "ui/views/controls/textfield/textfield.h" |
| 40 #include "ui/views/focus/view_storage.h" | 42 #include "ui/views/focus/view_storage.h" |
| 41 #include "ui/views/test/views_test_base.h" | 43 #include "ui/views/test/views_test_base.h" |
| 42 #include "ui/views/view.h" | |
| 43 #include "ui/views/widget/native_widget.h" | 44 #include "ui/views/widget/native_widget.h" |
| 44 #include "ui/views/widget/root_view.h" | 45 #include "ui/views/widget/root_view.h" |
| 45 #include "ui/views/window/dialog_client_view.h" | 46 #include "ui/views/window/dialog_client_view.h" |
| 46 #include "ui/views/window/dialog_delegate.h" | 47 #include "ui/views/window/dialog_delegate.h" |
| 47 | 48 |
| 48 using base::ASCIIToUTF16; | 49 using base::ASCIIToUTF16; |
| 49 | 50 |
| 50 namespace { | 51 namespace { |
| 51 | 52 |
| 52 // Returns true if |ancestor| is an ancestor of |layer|. | 53 // Returns true if |ancestor| is an ancestor of |layer|. |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 received_mouse_exit_ = true; | 379 received_mouse_exit_ = true; |
| 379 } | 380 } |
| 380 | 381 |
| 381 TEST_F(ViewTest, MouseEvent) { | 382 TEST_F(ViewTest, MouseEvent) { |
| 382 TestView* v1 = new TestView(); | 383 TestView* v1 = new TestView(); |
| 383 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); | 384 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); |
| 384 | 385 |
| 385 TestView* v2 = new TestView(); | 386 TestView* v2 = new TestView(); |
| 386 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); | 387 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); |
| 387 | 388 |
| 388 scoped_ptr<Widget> widget(new Widget); | 389 std::unique_ptr<Widget> widget(new Widget); |
| 389 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 390 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 390 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 391 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 391 params.bounds = gfx::Rect(50, 50, 650, 650); | 392 params.bounds = gfx::Rect(50, 50, 650, 650); |
| 392 widget->Init(params); | 393 widget->Init(params); |
| 393 internal::RootView* root = | 394 internal::RootView* root = |
| 394 static_cast<internal::RootView*>(widget->GetRootView()); | 395 static_cast<internal::RootView*>(widget->GetRootView()); |
| 395 | 396 |
| 396 root->AddChildView(v1); | 397 root->AddChildView(v1); |
| 397 v1->AddChildView(v2); | 398 v1->AddChildView(v2); |
| 398 | 399 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 TEST_F(ViewTest, DeleteOnPressed) { | 442 TEST_F(ViewTest, DeleteOnPressed) { |
| 442 TestView* v1 = new TestView(); | 443 TestView* v1 = new TestView(); |
| 443 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); | 444 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); |
| 444 | 445 |
| 445 TestView* v2 = new TestView(); | 446 TestView* v2 = new TestView(); |
| 446 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); | 447 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); |
| 447 | 448 |
| 448 v1->Reset(); | 449 v1->Reset(); |
| 449 v2->Reset(); | 450 v2->Reset(); |
| 450 | 451 |
| 451 scoped_ptr<Widget> widget(new Widget); | 452 std::unique_ptr<Widget> widget(new Widget); |
| 452 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 453 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 453 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 454 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 454 params.bounds = gfx::Rect(50, 50, 650, 650); | 455 params.bounds = gfx::Rect(50, 50, 650, 650); |
| 455 widget->Init(params); | 456 widget->Init(params); |
| 456 View* root = widget->GetRootView(); | 457 View* root = widget->GetRootView(); |
| 457 | 458 |
| 458 root->AddChildView(v1); | 459 root->AddChildView(v1); |
| 459 v1->AddChildView(v2); | 460 v1->AddChildView(v2); |
| 460 | 461 |
| 461 v2->delete_on_pressed_ = true; | 462 v2->delete_on_pressed_ = true; |
| (...skipping 1644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2106 // handle accelerators or not (see View::CanHandleAccelerators for details). | 2107 // handle accelerators or not (see View::CanHandleAccelerators for details). |
| 2107 // This test targets that extra logic, but should also work on other platforms. | 2108 // This test targets that extra logic, but should also work on other platforms. |
| 2108 TEST_F(ViewTest, HandleAccelerator) { | 2109 TEST_F(ViewTest, HandleAccelerator) { |
| 2109 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 2110 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| 2110 TestView* view = new TestView(); | 2111 TestView* view = new TestView(); |
| 2111 view->Reset(); | 2112 view->Reset(); |
| 2112 view->AddAccelerator(return_accelerator); | 2113 view->AddAccelerator(return_accelerator); |
| 2113 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); | 2114 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
| 2114 | 2115 |
| 2115 // Create a window and add the view as its child. | 2116 // Create a window and add the view as its child. |
| 2116 scoped_ptr<Widget> widget(new Widget); | 2117 std::unique_ptr<Widget> widget(new Widget); |
| 2117 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 2118 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2118 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2119 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2119 params.bounds = gfx::Rect(0, 0, 100, 100); | 2120 params.bounds = gfx::Rect(0, 0, 100, 100); |
| 2120 widget->Init(params); | 2121 widget->Init(params); |
| 2121 View* root = widget->GetRootView(); | 2122 View* root = widget->GetRootView(); |
| 2122 root->AddChildView(view); | 2123 root->AddChildView(view); |
| 2123 widget->Show(); | 2124 widget->Show(); |
| 2124 | 2125 |
| 2125 FocusManager* focus_manager = widget->GetFocusManager(); | 2126 FocusManager* focus_manager = widget->GetFocusManager(); |
| 2126 ASSERT_TRUE(focus_manager); | 2127 ASSERT_TRUE(focus_manager); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2185 #if 0 | 2186 #if 0 |
| 2186 TEST_F(ViewTest, ActivateAccelerator) { | 2187 TEST_F(ViewTest, ActivateAccelerator) { |
| 2187 // Register a keyboard accelerator before the view is added to a window. | 2188 // Register a keyboard accelerator before the view is added to a window. |
| 2188 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 2189 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| 2189 TestView* view = new TestView(); | 2190 TestView* view = new TestView(); |
| 2190 view->Reset(); | 2191 view->Reset(); |
| 2191 view->AddAccelerator(return_accelerator); | 2192 view->AddAccelerator(return_accelerator); |
| 2192 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); | 2193 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
| 2193 | 2194 |
| 2194 // Create a window and add the view as its child. | 2195 // Create a window and add the view as its child. |
| 2195 scoped_ptr<Widget> widget(new Widget); | 2196 std::unique_ptr<Widget> widget(new Widget); |
| 2196 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 2197 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2197 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2198 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2198 params.bounds = gfx::Rect(0, 0, 100, 100); | 2199 params.bounds = gfx::Rect(0, 0, 100, 100); |
| 2199 widget->Init(params); | 2200 widget->Init(params); |
| 2200 View* root = widget->GetRootView(); | 2201 View* root = widget->GetRootView(); |
| 2201 root->AddChildView(view); | 2202 root->AddChildView(view); |
| 2202 widget->Show(); | 2203 widget->Show(); |
| 2203 | 2204 |
| 2204 // Get the focus manager. | 2205 // Get the focus manager. |
| 2205 FocusManager* focus_manager = widget->GetFocusManager(); | 2206 FocusManager* focus_manager = widget->GetFocusManager(); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2248 widget->CloseNow(); | 2249 widget->CloseNow(); |
| 2249 } | 2250 } |
| 2250 | 2251 |
| 2251 TEST_F(ViewTest, HiddenViewWithAccelerator) { | 2252 TEST_F(ViewTest, HiddenViewWithAccelerator) { |
| 2252 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 2253 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| 2253 TestView* view = new TestView(); | 2254 TestView* view = new TestView(); |
| 2254 view->Reset(); | 2255 view->Reset(); |
| 2255 view->AddAccelerator(return_accelerator); | 2256 view->AddAccelerator(return_accelerator); |
| 2256 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); | 2257 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
| 2257 | 2258 |
| 2258 scoped_ptr<Widget> widget(new Widget); | 2259 std::unique_ptr<Widget> widget(new Widget); |
| 2259 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 2260 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2260 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2261 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2261 params.bounds = gfx::Rect(0, 0, 100, 100); | 2262 params.bounds = gfx::Rect(0, 0, 100, 100); |
| 2262 widget->Init(params); | 2263 widget->Init(params); |
| 2263 View* root = widget->GetRootView(); | 2264 View* root = widget->GetRootView(); |
| 2264 root->AddChildView(view); | 2265 root->AddChildView(view); |
| 2265 widget->Show(); | 2266 widget->Show(); |
| 2266 | 2267 |
| 2267 FocusManager* focus_manager = widget->GetFocusManager(); | 2268 FocusManager* focus_manager = widget->GetFocusManager(); |
| 2268 ASSERT_TRUE(focus_manager); | 2269 ASSERT_TRUE(focus_manager); |
| 2269 | 2270 |
| 2270 view->SetVisible(false); | 2271 view->SetVisible(false); |
| 2271 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); | 2272 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 2272 | 2273 |
| 2273 view->SetVisible(true); | 2274 view->SetVisible(true); |
| 2274 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 2275 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 2275 | 2276 |
| 2276 widget->CloseNow(); | 2277 widget->CloseNow(); |
| 2277 } | 2278 } |
| 2278 | 2279 |
| 2279 TEST_F(ViewTest, ViewInHiddenWidgetWithAccelerator) { | 2280 TEST_F(ViewTest, ViewInHiddenWidgetWithAccelerator) { |
| 2280 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 2281 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| 2281 TestView* view = new TestView(); | 2282 TestView* view = new TestView(); |
| 2282 view->Reset(); | 2283 view->Reset(); |
| 2283 view->AddAccelerator(return_accelerator); | 2284 view->AddAccelerator(return_accelerator); |
| 2284 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); | 2285 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
| 2285 | 2286 |
| 2286 scoped_ptr<Widget> widget(new Widget); | 2287 std::unique_ptr<Widget> widget(new Widget); |
| 2287 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 2288 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2288 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2289 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2289 params.bounds = gfx::Rect(0, 0, 100, 100); | 2290 params.bounds = gfx::Rect(0, 0, 100, 100); |
| 2290 widget->Init(params); | 2291 widget->Init(params); |
| 2291 View* root = widget->GetRootView(); | 2292 View* root = widget->GetRootView(); |
| 2292 root->AddChildView(view); | 2293 root->AddChildView(view); |
| 2293 | 2294 |
| 2294 FocusManager* focus_manager = widget->GetFocusManager(); | 2295 FocusManager* focus_manager = widget->GetFocusManager(); |
| 2295 ASSERT_TRUE(focus_manager); | 2296 ASSERT_TRUE(focus_manager); |
| 2296 | 2297 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2422 // No ReparentNativeView on Mac. See http://crbug.com/514920. | 2423 // No ReparentNativeView on Mac. See http://crbug.com/514920. |
| 2423 #if defined(OS_MACOSX) && !defined(USE_AURA) | 2424 #if defined(OS_MACOSX) && !defined(USE_AURA) |
| 2424 #define MAYBE_NativeViewHierarchyChanged DISABLED_NativeViewHierarchyChanged | 2425 #define MAYBE_NativeViewHierarchyChanged DISABLED_NativeViewHierarchyChanged |
| 2425 #else | 2426 #else |
| 2426 #define MAYBE_NativeViewHierarchyChanged NativeViewHierarchyChanged | 2427 #define MAYBE_NativeViewHierarchyChanged NativeViewHierarchyChanged |
| 2427 #endif | 2428 #endif |
| 2428 | 2429 |
| 2429 // Test that a view can track the current top level widget by overriding | 2430 // Test that a view can track the current top level widget by overriding |
| 2430 // View::ViewHierarchyChanged() and View::NativeViewHierarchyChanged(). | 2431 // View::ViewHierarchyChanged() and View::NativeViewHierarchyChanged(). |
| 2431 TEST_F(ViewTest, MAYBE_NativeViewHierarchyChanged) { | 2432 TEST_F(ViewTest, MAYBE_NativeViewHierarchyChanged) { |
| 2432 scoped_ptr<Widget> toplevel1(new Widget); | 2433 std::unique_ptr<Widget> toplevel1(new Widget); |
| 2433 Widget::InitParams toplevel1_params = | 2434 Widget::InitParams toplevel1_params = |
| 2434 CreateParams(Widget::InitParams::TYPE_POPUP); | 2435 CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2435 toplevel1_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2436 toplevel1_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2436 toplevel1->Init(toplevel1_params); | 2437 toplevel1->Init(toplevel1_params); |
| 2437 | 2438 |
| 2438 scoped_ptr<Widget> toplevel2(new Widget); | 2439 std::unique_ptr<Widget> toplevel2(new Widget); |
| 2439 Widget::InitParams toplevel2_params = | 2440 Widget::InitParams toplevel2_params = |
| 2440 CreateParams(Widget::InitParams::TYPE_POPUP); | 2441 CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2441 toplevel2_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2442 toplevel2_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2442 toplevel2->Init(toplevel2_params); | 2443 toplevel2->Init(toplevel2_params); |
| 2443 | 2444 |
| 2444 Widget* child = new Widget; | 2445 Widget* child = new Widget; |
| 2445 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL); | 2446 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL); |
| 2446 child_params.parent = toplevel1->GetNativeView(); | 2447 child_params.parent = toplevel1->GetNativeView(); |
| 2447 child->Init(child_params); | 2448 child->Init(child_params); |
| 2448 | 2449 |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2669 EXPECT_EQ(25, v3->location_.y()); | 2670 EXPECT_EQ(25, v3->location_.y()); |
| 2670 | 2671 |
| 2671 root->OnMouseReleased(released); | 2672 root->OnMouseReleased(released); |
| 2672 | 2673 |
| 2673 widget->CloseNow(); | 2674 widget->CloseNow(); |
| 2674 } | 2675 } |
| 2675 | 2676 |
| 2676 TEST_F(ViewTest, TransformVisibleBound) { | 2677 TEST_F(ViewTest, TransformVisibleBound) { |
| 2677 gfx::Rect viewport_bounds(0, 0, 100, 100); | 2678 gfx::Rect viewport_bounds(0, 0, 100, 100); |
| 2678 | 2679 |
| 2679 scoped_ptr<Widget> widget(new Widget); | 2680 std::unique_ptr<Widget> widget(new Widget); |
| 2680 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 2681 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2681 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2682 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2682 params.bounds = viewport_bounds; | 2683 params.bounds = viewport_bounds; |
| 2683 widget->Init(params); | 2684 widget->Init(params); |
| 2684 widget->GetRootView()->SetBoundsRect(viewport_bounds); | 2685 widget->GetRootView()->SetBoundsRect(viewport_bounds); |
| 2685 | 2686 |
| 2686 View* viewport = new View; | 2687 View* viewport = new View; |
| 2687 widget->SetContentsView(viewport); | 2688 widget->SetContentsView(viewport); |
| 2688 View* contents = new View; | 2689 View* contents = new View; |
| 2689 viewport->AddChildView(contents); | 2690 viewport->AddChildView(contents); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2726 void OnVisibleBoundsChanged() override { received_notification_ = true; } | 2727 void OnVisibleBoundsChanged() override { received_notification_ = true; } |
| 2727 | 2728 |
| 2728 bool received_notification_; | 2729 bool received_notification_; |
| 2729 | 2730 |
| 2730 DISALLOW_COPY_AND_ASSIGN(VisibleBoundsView); | 2731 DISALLOW_COPY_AND_ASSIGN(VisibleBoundsView); |
| 2731 }; | 2732 }; |
| 2732 | 2733 |
| 2733 TEST_F(ViewTest, OnVisibleBoundsChanged) { | 2734 TEST_F(ViewTest, OnVisibleBoundsChanged) { |
| 2734 gfx::Rect viewport_bounds(0, 0, 100, 100); | 2735 gfx::Rect viewport_bounds(0, 0, 100, 100); |
| 2735 | 2736 |
| 2736 scoped_ptr<Widget> widget(new Widget); | 2737 std::unique_ptr<Widget> widget(new Widget); |
| 2737 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 2738 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2738 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2739 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2739 params.bounds = viewport_bounds; | 2740 params.bounds = viewport_bounds; |
| 2740 widget->Init(params); | 2741 widget->Init(params); |
| 2741 widget->GetRootView()->SetBoundsRect(viewport_bounds); | 2742 widget->GetRootView()->SetBoundsRect(viewport_bounds); |
| 2742 | 2743 |
| 2743 View* viewport = new View; | 2744 View* viewport = new View; |
| 2744 widget->SetContentsView(viewport); | 2745 widget->SetContentsView(viewport); |
| 2745 View* contents = new View; | 2746 View* contents = new View; |
| 2746 viewport->AddChildView(contents); | 2747 viewport->AddChildView(contents); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2828 view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); | 2829 view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
| 2829 EXPECT_TRUE(view.scheduled_paint_rects_.empty()); | 2830 EXPECT_TRUE(view.scheduled_paint_rects_.empty()); |
| 2830 } | 2831 } |
| 2831 | 2832 |
| 2832 // Verifies AddChildView() and RemoveChildView() schedule appropriate paints. | 2833 // Verifies AddChildView() and RemoveChildView() schedule appropriate paints. |
| 2833 TEST_F(ViewTest, AddAndRemoveSchedulePaints) { | 2834 TEST_F(ViewTest, AddAndRemoveSchedulePaints) { |
| 2834 gfx::Rect viewport_bounds(0, 0, 100, 100); | 2835 gfx::Rect viewport_bounds(0, 0, 100, 100); |
| 2835 | 2836 |
| 2836 // We have to put the View hierarchy into a Widget or no paints will be | 2837 // We have to put the View hierarchy into a Widget or no paints will be |
| 2837 // scheduled. | 2838 // scheduled. |
| 2838 scoped_ptr<Widget> widget(new Widget); | 2839 std::unique_ptr<Widget> widget(new Widget); |
| 2839 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 2840 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 2840 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2841 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 2841 params.bounds = viewport_bounds; | 2842 params.bounds = viewport_bounds; |
| 2842 widget->Init(params); | 2843 widget->Init(params); |
| 2843 widget->GetRootView()->SetBoundsRect(viewport_bounds); | 2844 widget->GetRootView()->SetBoundsRect(viewport_bounds); |
| 2844 | 2845 |
| 2845 TestView* parent_view = new TestView; | 2846 TestView* parent_view = new TestView; |
| 2846 widget->SetContentsView(parent_view); | 2847 widget->SetContentsView(parent_view); |
| 2847 parent_view->SetBoundsRect(viewport_bounds); | 2848 parent_view->SetBoundsRect(viewport_bounds); |
| 2848 parent_view->scheduled_paint_rects_.clear(); | 2849 parent_view->scheduled_paint_rects_.clear(); |
| 2849 | 2850 |
| 2850 View* child_view = new View; | 2851 View* child_view = new View; |
| 2851 child_view->SetBoundsRect(gfx::Rect(0, 0, 20, 20)); | 2852 child_view->SetBoundsRect(gfx::Rect(0, 0, 20, 20)); |
| 2852 parent_view->AddChildView(child_view); | 2853 parent_view->AddChildView(child_view); |
| 2853 ASSERT_EQ(1U, parent_view->scheduled_paint_rects_.size()); | 2854 ASSERT_EQ(1U, parent_view->scheduled_paint_rects_.size()); |
| 2854 EXPECT_EQ(child_view->bounds(), parent_view->scheduled_paint_rects_.front()); | 2855 EXPECT_EQ(child_view->bounds(), parent_view->scheduled_paint_rects_.front()); |
| 2855 | 2856 |
| 2856 parent_view->scheduled_paint_rects_.clear(); | 2857 parent_view->scheduled_paint_rects_.clear(); |
| 2857 parent_view->RemoveChildView(child_view); | 2858 parent_view->RemoveChildView(child_view); |
| 2858 scoped_ptr<View> child_deleter(child_view); | 2859 std::unique_ptr<View> child_deleter(child_view); |
| 2859 ASSERT_EQ(1U, parent_view->scheduled_paint_rects_.size()); | 2860 ASSERT_EQ(1U, parent_view->scheduled_paint_rects_.size()); |
| 2860 EXPECT_EQ(child_view->bounds(), parent_view->scheduled_paint_rects_.front()); | 2861 EXPECT_EQ(child_view->bounds(), parent_view->scheduled_paint_rects_.front()); |
| 2861 | 2862 |
| 2862 widget->CloseNow(); | 2863 widget->CloseNow(); |
| 2863 } | 2864 } |
| 2864 | 2865 |
| 2865 // Tests conversion methods with a transform. | 2866 // Tests conversion methods with a transform. |
| 2866 TEST_F(ViewTest, ConversionsWithTransform) { | 2867 TEST_F(ViewTest, ConversionsWithTransform) { |
| 2867 TestView top_view; | 2868 TestView top_view; |
| 2868 | 2869 |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3044 View::ConvertRectToTarget(&top_view, child_2, &rect); | 3045 View::ConvertRectToTarget(&top_view, child_2, &rect); |
| 3045 EXPECT_FLOAT_EQ(50.0f, rect.x()); | 3046 EXPECT_FLOAT_EQ(50.0f, rect.x()); |
| 3046 EXPECT_FLOAT_EQ(55.0f, rect.y()); | 3047 EXPECT_FLOAT_EQ(55.0f, rect.y()); |
| 3047 EXPECT_FLOAT_EQ(20.0f, rect.width()); | 3048 EXPECT_FLOAT_EQ(20.0f, rect.width()); |
| 3048 EXPECT_FLOAT_EQ(30.0f, rect.height()); | 3049 EXPECT_FLOAT_EQ(30.0f, rect.height()); |
| 3049 } | 3050 } |
| 3050 } | 3051 } |
| 3051 | 3052 |
| 3052 // Tests conversion methods to and from screen coordinates. | 3053 // Tests conversion methods to and from screen coordinates. |
| 3053 TEST_F(ViewTest, ConversionsToFromScreen) { | 3054 TEST_F(ViewTest, ConversionsToFromScreen) { |
| 3054 scoped_ptr<Widget> widget(new Widget); | 3055 std::unique_ptr<Widget> widget(new Widget); |
| 3055 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 3056 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 3056 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 3057 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 3057 params.bounds = gfx::Rect(50, 50, 650, 650); | 3058 params.bounds = gfx::Rect(50, 50, 650, 650); |
| 3058 widget->Init(params); | 3059 widget->Init(params); |
| 3059 | 3060 |
| 3060 View* child = new View; | 3061 View* child = new View; |
| 3061 widget->GetRootView()->AddChildView(child); | 3062 widget->GetRootView()->AddChildView(child); |
| 3062 child->SetBounds(10, 10, 100, 200); | 3063 child->SetBounds(10, 10, 100, 200); |
| 3063 gfx::Transform t; | 3064 gfx::Transform t; |
| 3064 t.Scale(0.5, 0.5); | 3065 t.Scale(0.5, 0.5); |
| 3065 child->SetTransform(t); | 3066 child->SetTransform(t); |
| 3066 | 3067 |
| 3067 gfx::Point point_in_screen(100, 90); | 3068 gfx::Point point_in_screen(100, 90); |
| 3068 gfx::Point point_in_child(80, 60); | 3069 gfx::Point point_in_child(80, 60); |
| 3069 | 3070 |
| 3070 gfx::Point point = point_in_screen; | 3071 gfx::Point point = point_in_screen; |
| 3071 View::ConvertPointFromScreen(child, &point); | 3072 View::ConvertPointFromScreen(child, &point); |
| 3072 EXPECT_EQ(point_in_child.ToString(), point.ToString()); | 3073 EXPECT_EQ(point_in_child.ToString(), point.ToString()); |
| 3073 | 3074 |
| 3074 View::ConvertPointToScreen(child, &point); | 3075 View::ConvertPointToScreen(child, &point); |
| 3075 EXPECT_EQ(point_in_screen.ToString(), point.ToString()); | 3076 EXPECT_EQ(point_in_screen.ToString(), point.ToString()); |
| 3076 } | 3077 } |
| 3077 | 3078 |
| 3078 // Tests conversion methods for rectangles. | 3079 // Tests conversion methods for rectangles. |
| 3079 TEST_F(ViewTest, ConvertRectWithTransform) { | 3080 TEST_F(ViewTest, ConvertRectWithTransform) { |
| 3080 scoped_ptr<Widget> widget(new Widget); | 3081 std::unique_ptr<Widget> widget(new Widget); |
| 3081 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 3082 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 3082 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 3083 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 3083 params.bounds = gfx::Rect(50, 50, 650, 650); | 3084 params.bounds = gfx::Rect(50, 50, 650, 650); |
| 3084 widget->Init(params); | 3085 widget->Init(params); |
| 3085 View* root = widget->GetRootView(); | 3086 View* root = widget->GetRootView(); |
| 3086 | 3087 |
| 3087 TestView* v1 = new TestView; | 3088 TestView* v1 = new TestView; |
| 3088 TestView* v2 = new TestView; | 3089 TestView* v2 = new TestView; |
| 3089 root->AddChildView(v1); | 3090 root->AddChildView(v1); |
| 3090 v1->AddChildView(v2); | 3091 v1->AddChildView(v2); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3185 // v1 | 3186 // v1 |
| 3186 // +-- v2 | 3187 // +-- v2 |
| 3187 // +-- v3 | 3188 // +-- v3 |
| 3188 // +-- v4 (starts here, then get reparented to v1) | 3189 // +-- v4 (starts here, then get reparented to v1) |
| 3189 TEST_F(ViewTest, ViewHierarchyChanged) { | 3190 TEST_F(ViewTest, ViewHierarchyChanged) { |
| 3190 ObserverView v1; | 3191 ObserverView v1; |
| 3191 | 3192 |
| 3192 ObserverView* v3 = new ObserverView(); | 3193 ObserverView* v3 = new ObserverView(); |
| 3193 | 3194 |
| 3194 // Add |v3| to |v2|. | 3195 // Add |v3| to |v2|. |
| 3195 scoped_ptr<ObserverView> v2(new ObserverView()); | 3196 std::unique_ptr<ObserverView> v2(new ObserverView()); |
| 3196 v2->AddChildView(v3); | 3197 v2->AddChildView(v3); |
| 3197 | 3198 |
| 3198 // Make sure both |v2| and |v3| receive the ViewHierarchyChanged() | 3199 // Make sure both |v2| and |v3| receive the ViewHierarchyChanged() |
| 3199 // notification. | 3200 // notification. |
| 3200 EXPECT_TRUE(v2->has_add_details()); | 3201 EXPECT_TRUE(v2->has_add_details()); |
| 3201 EXPECT_FALSE(v2->has_remove_details()); | 3202 EXPECT_FALSE(v2->has_remove_details()); |
| 3202 EXPECT_EQ(v2.get(), v2->add_details().parent); | 3203 EXPECT_EQ(v2.get(), v2->add_details().parent); |
| 3203 EXPECT_EQ(v3, v2->add_details().child); | 3204 EXPECT_EQ(v3, v2->add_details().child); |
| 3204 EXPECT_EQ(NULL, v2->add_details().move_view); | 3205 EXPECT_EQ(NULL, v2->add_details().move_view); |
| 3205 | 3206 |
| (...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4200 // Move c1 to the front. The layers should have moved too. | 4201 // Move c1 to the front. The layers should have moved too. |
| 4201 content->ReorderChildView(c1, -1); | 4202 content->ReorderChildView(c1, -1); |
| 4202 EXPECT_EQ(c1->layer(), parent_layer->children()[1]); | 4203 EXPECT_EQ(c1->layer(), parent_layer->children()[1]); |
| 4203 EXPECT_EQ(c2->layer(), parent_layer->children()[0]); | 4204 EXPECT_EQ(c2->layer(), parent_layer->children()[0]); |
| 4204 } | 4205 } |
| 4205 | 4206 |
| 4206 // Verifies that the layer of a view can be acquired properly. | 4207 // Verifies that the layer of a view can be acquired properly. |
| 4207 TEST_F(ViewLayerTest, AcquireLayer) { | 4208 TEST_F(ViewLayerTest, AcquireLayer) { |
| 4208 View* content = new View; | 4209 View* content = new View; |
| 4209 widget()->SetContentsView(content); | 4210 widget()->SetContentsView(content); |
| 4210 scoped_ptr<View> c1(new View); | 4211 std::unique_ptr<View> c1(new View); |
| 4211 c1->SetPaintToLayer(true); | 4212 c1->SetPaintToLayer(true); |
| 4212 EXPECT_TRUE(c1->layer()); | 4213 EXPECT_TRUE(c1->layer()); |
| 4213 content->AddChildView(c1.get()); | 4214 content->AddChildView(c1.get()); |
| 4214 | 4215 |
| 4215 scoped_ptr<ui::Layer> layer(c1->AcquireLayer()); | 4216 std::unique_ptr<ui::Layer> layer(c1->AcquireLayer()); |
| 4216 EXPECT_EQ(layer.get(), c1->layer()); | 4217 EXPECT_EQ(layer.get(), c1->layer()); |
| 4217 | 4218 |
| 4218 scoped_ptr<ui::Layer> layer2(c1->RecreateLayer()); | 4219 std::unique_ptr<ui::Layer> layer2(c1->RecreateLayer()); |
| 4219 EXPECT_NE(c1->layer(), layer2.get()); | 4220 EXPECT_NE(c1->layer(), layer2.get()); |
| 4220 | 4221 |
| 4221 // Destroy view before destroying layer. | 4222 // Destroy view before destroying layer. |
| 4222 c1.reset(); | 4223 c1.reset(); |
| 4223 } | 4224 } |
| 4224 | 4225 |
| 4225 // Verify the z-order of the layers as a result of calling RecreateLayer(). | 4226 // Verify the z-order of the layers as a result of calling RecreateLayer(). |
| 4226 TEST_F(ViewLayerTest, RecreateLayerZOrder) { | 4227 TEST_F(ViewLayerTest, RecreateLayerZOrder) { |
| 4227 scoped_ptr<View> v(new View()); | 4228 std::unique_ptr<View> v(new View()); |
| 4228 v->SetPaintToLayer(true); | 4229 v->SetPaintToLayer(true); |
| 4229 | 4230 |
| 4230 View* v1 = new View(); | 4231 View* v1 = new View(); |
| 4231 v1->SetPaintToLayer(true); | 4232 v1->SetPaintToLayer(true); |
| 4232 v->AddChildView(v1); | 4233 v->AddChildView(v1); |
| 4233 View* v2 = new View(); | 4234 View* v2 = new View(); |
| 4234 v2->SetPaintToLayer(true); | 4235 v2->SetPaintToLayer(true); |
| 4235 v->AddChildView(v2); | 4236 v->AddChildView(v2); |
| 4236 | 4237 |
| 4237 // Test the initial z-order. | 4238 // Test the initial z-order. |
| 4238 const std::vector<ui::Layer*>& child_layers_pre = v->layer()->children(); | 4239 const std::vector<ui::Layer*>& child_layers_pre = v->layer()->children(); |
| 4239 ASSERT_EQ(2u, child_layers_pre.size()); | 4240 ASSERT_EQ(2u, child_layers_pre.size()); |
| 4240 EXPECT_EQ(v1->layer(), child_layers_pre[0]); | 4241 EXPECT_EQ(v1->layer(), child_layers_pre[0]); |
| 4241 EXPECT_EQ(v2->layer(), child_layers_pre[1]); | 4242 EXPECT_EQ(v2->layer(), child_layers_pre[1]); |
| 4242 | 4243 |
| 4243 scoped_ptr<ui::Layer> v1_old_layer(v1->RecreateLayer()); | 4244 std::unique_ptr<ui::Layer> v1_old_layer(v1->RecreateLayer()); |
| 4244 | 4245 |
| 4245 // Test the new layer order. We expect: |v1| |v1_old_layer| |v2|. | 4246 // Test the new layer order. We expect: |v1| |v1_old_layer| |v2|. |
| 4246 // for |v1| and |v2|. | 4247 // for |v1| and |v2|. |
| 4247 const std::vector<ui::Layer*>& child_layers_post = v->layer()->children(); | 4248 const std::vector<ui::Layer*>& child_layers_post = v->layer()->children(); |
| 4248 ASSERT_EQ(3u, child_layers_post.size()); | 4249 ASSERT_EQ(3u, child_layers_post.size()); |
| 4249 EXPECT_EQ(v1->layer(), child_layers_post[0]); | 4250 EXPECT_EQ(v1->layer(), child_layers_post[0]); |
| 4250 EXPECT_EQ(v1_old_layer.get(), child_layers_post[1]); | 4251 EXPECT_EQ(v1_old_layer.get(), child_layers_post[1]); |
| 4251 EXPECT_EQ(v2->layer(), child_layers_post[2]); | 4252 EXPECT_EQ(v2->layer(), child_layers_post[2]); |
| 4252 } | 4253 } |
| 4253 | 4254 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 4265 v->AddChildView(v2); | 4266 v->AddChildView(v2); |
| 4266 | 4267 |
| 4267 ui::Layer* root_layer = GetRootLayer(); | 4268 ui::Layer* root_layer = GetRootLayer(); |
| 4268 | 4269 |
| 4269 // Test the initial z-order. | 4270 // Test the initial z-order. |
| 4270 const std::vector<ui::Layer*>& child_layers_pre = root_layer->children(); | 4271 const std::vector<ui::Layer*>& child_layers_pre = root_layer->children(); |
| 4271 ASSERT_EQ(2u, child_layers_pre.size()); | 4272 ASSERT_EQ(2u, child_layers_pre.size()); |
| 4272 EXPECT_EQ(v1->layer(), child_layers_pre[0]); | 4273 EXPECT_EQ(v1->layer(), child_layers_pre[0]); |
| 4273 EXPECT_EQ(v2->layer(), child_layers_pre[1]); | 4274 EXPECT_EQ(v2->layer(), child_layers_pre[1]); |
| 4274 | 4275 |
| 4275 scoped_ptr<ui::Layer> v1_old_layer(v1->RecreateLayer()); | 4276 std::unique_ptr<ui::Layer> v1_old_layer(v1->RecreateLayer()); |
| 4276 | 4277 |
| 4277 // Test the new layer order. We expect: |v1| |v1_old_layer| |v2|. | 4278 // Test the new layer order. We expect: |v1| |v1_old_layer| |v2|. |
| 4278 const std::vector<ui::Layer*>& child_layers_post = root_layer->children(); | 4279 const std::vector<ui::Layer*>& child_layers_post = root_layer->children(); |
| 4279 ASSERT_EQ(3u, child_layers_post.size()); | 4280 ASSERT_EQ(3u, child_layers_post.size()); |
| 4280 EXPECT_EQ(v1->layer(), child_layers_post[0]); | 4281 EXPECT_EQ(v1->layer(), child_layers_post[0]); |
| 4281 EXPECT_EQ(v1_old_layer.get(), child_layers_post[1]); | 4282 EXPECT_EQ(v1_old_layer.get(), child_layers_post[1]); |
| 4282 EXPECT_EQ(v2->layer(), child_layers_post[2]); | 4283 EXPECT_EQ(v2->layer(), child_layers_post[2]); |
| 4283 } | 4284 } |
| 4284 | 4285 |
| 4285 // Verifies RecreateLayer() moves all Layers over, even those that don't have | 4286 // Verifies RecreateLayer() moves all Layers over, even those that don't have |
| 4286 // a View. | 4287 // a View. |
| 4287 TEST_F(ViewLayerTest, RecreateLayerMovesNonViewChildren) { | 4288 TEST_F(ViewLayerTest, RecreateLayerMovesNonViewChildren) { |
| 4288 View v; | 4289 View v; |
| 4289 v.SetPaintToLayer(true); | 4290 v.SetPaintToLayer(true); |
| 4290 View child; | 4291 View child; |
| 4291 child.SetPaintToLayer(true); | 4292 child.SetPaintToLayer(true); |
| 4292 v.AddChildView(&child); | 4293 v.AddChildView(&child); |
| 4293 ASSERT_TRUE(v.layer() != NULL); | 4294 ASSERT_TRUE(v.layer() != NULL); |
| 4294 ASSERT_EQ(1u, v.layer()->children().size()); | 4295 ASSERT_EQ(1u, v.layer()->children().size()); |
| 4295 EXPECT_EQ(v.layer()->children()[0], child.layer()); | 4296 EXPECT_EQ(v.layer()->children()[0], child.layer()); |
| 4296 | 4297 |
| 4297 ui::Layer layer(ui::LAYER_NOT_DRAWN); | 4298 ui::Layer layer(ui::LAYER_NOT_DRAWN); |
| 4298 v.layer()->Add(&layer); | 4299 v.layer()->Add(&layer); |
| 4299 v.layer()->StackAtBottom(&layer); | 4300 v.layer()->StackAtBottom(&layer); |
| 4300 | 4301 |
| 4301 scoped_ptr<ui::Layer> old_layer(v.RecreateLayer()); | 4302 std::unique_ptr<ui::Layer> old_layer(v.RecreateLayer()); |
| 4302 | 4303 |
| 4303 // All children should be moved from old layer to new layer. | 4304 // All children should be moved from old layer to new layer. |
| 4304 ASSERT_TRUE(old_layer.get() != NULL); | 4305 ASSERT_TRUE(old_layer.get() != NULL); |
| 4305 EXPECT_TRUE(old_layer->children().empty()); | 4306 EXPECT_TRUE(old_layer->children().empty()); |
| 4306 | 4307 |
| 4307 // And new layer should have the two children. | 4308 // And new layer should have the two children. |
| 4308 ASSERT_TRUE(v.layer() != NULL); | 4309 ASSERT_TRUE(v.layer() != NULL); |
| 4309 ASSERT_EQ(2u, v.layer()->children().size()); | 4310 ASSERT_EQ(2u, v.layer()->children().size()); |
| 4310 EXPECT_EQ(v.layer()->children()[0], &layer); | 4311 EXPECT_EQ(v.layer()->children()[0], &layer); |
| 4311 EXPECT_EQ(v.layer()->children()[1], child.layer()); | 4312 EXPECT_EQ(v.layer()->children()[1], child.layer()); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4397 TEST_F(ViewTest, OnNativeThemeChanged) { | 4398 TEST_F(ViewTest, OnNativeThemeChanged) { |
| 4398 TestView* test_view = new TestView(); | 4399 TestView* test_view = new TestView(); |
| 4399 EXPECT_FALSE(test_view->native_theme_); | 4400 EXPECT_FALSE(test_view->native_theme_); |
| 4400 TestView* test_view_child = new TestView(); | 4401 TestView* test_view_child = new TestView(); |
| 4401 EXPECT_FALSE(test_view_child->native_theme_); | 4402 EXPECT_FALSE(test_view_child->native_theme_); |
| 4402 | 4403 |
| 4403 // Child view added before the widget hierarchy exists should get the | 4404 // Child view added before the widget hierarchy exists should get the |
| 4404 // new native theme notification. | 4405 // new native theme notification. |
| 4405 test_view->AddChildView(test_view_child); | 4406 test_view->AddChildView(test_view_child); |
| 4406 | 4407 |
| 4407 scoped_ptr<Widget> widget(new Widget); | 4408 std::unique_ptr<Widget> widget(new Widget); |
| 4408 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); | 4409 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); |
| 4409 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 4410 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 4410 widget->Init(params); | 4411 widget->Init(params); |
| 4411 | 4412 |
| 4412 widget->GetRootView()->AddChildView(test_view); | 4413 widget->GetRootView()->AddChildView(test_view); |
| 4413 EXPECT_TRUE(test_view->native_theme_); | 4414 EXPECT_TRUE(test_view->native_theme_); |
| 4414 EXPECT_EQ(widget->GetNativeTheme(), test_view->native_theme_); | 4415 EXPECT_EQ(widget->GetNativeTheme(), test_view->native_theme_); |
| 4415 EXPECT_TRUE(test_view_child->native_theme_); | 4416 EXPECT_TRUE(test_view_child->native_theme_); |
| 4416 EXPECT_EQ(widget->GetNativeTheme(), test_view_child->native_theme_); | 4417 EXPECT_EQ(widget->GetNativeTheme(), test_view_child->native_theme_); |
| 4417 | 4418 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 4437 } | 4438 } |
| 4438 | 4439 |
| 4439 TestView* view_; | 4440 TestView* view_; |
| 4440 bool had_mouse_event_; | 4441 bool had_mouse_event_; |
| 4441 }; | 4442 }; |
| 4442 | 4443 |
| 4443 TEST_F(ViewTest, ScopedTargetHandlerReceivesEvents) { | 4444 TEST_F(ViewTest, ScopedTargetHandlerReceivesEvents) { |
| 4444 TestView* v = new TestView(); | 4445 TestView* v = new TestView(); |
| 4445 v->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); | 4446 v->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); |
| 4446 | 4447 |
| 4447 scoped_ptr<Widget> widget(new Widget); | 4448 std::unique_ptr<Widget> widget(new Widget); |
| 4448 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 4449 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 4449 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 4450 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 4450 params.bounds = gfx::Rect(50, 50, 350, 350); | 4451 params.bounds = gfx::Rect(50, 50, 350, 350); |
| 4451 widget->Init(params); | 4452 widget->Init(params); |
| 4452 View* root = widget->GetRootView(); | 4453 View* root = widget->GetRootView(); |
| 4453 root->AddChildView(v); | 4454 root->AddChildView(v); |
| 4454 v->Reset(); | 4455 v->Reset(); |
| 4455 { | 4456 { |
| 4456 TestEventHandler handler(v); | 4457 TestEventHandler handler(v); |
| 4457 ui::ScopedTargetHandler scoped_target_handler(v, &handler); | 4458 ui::ScopedTargetHandler scoped_target_handler(v, &handler); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4564 widget.Init(params); | 4565 widget.Init(params); |
| 4565 | 4566 |
| 4566 AddViewWithChildLayer(widget.GetRootView()); | 4567 AddViewWithChildLayer(widget.GetRootView()); |
| 4567 ViewThatAddsViewInOnNativeThemeChanged* v = | 4568 ViewThatAddsViewInOnNativeThemeChanged* v = |
| 4568 new ViewThatAddsViewInOnNativeThemeChanged; | 4569 new ViewThatAddsViewInOnNativeThemeChanged; |
| 4569 widget.GetRootView()->AddChildView(v); | 4570 widget.GetRootView()->AddChildView(v); |
| 4570 EXPECT_TRUE(v->on_native_theme_changed_called()); | 4571 EXPECT_TRUE(v->on_native_theme_changed_called()); |
| 4571 } | 4572 } |
| 4572 | 4573 |
| 4573 } // namespace views | 4574 } // namespace views |
| OLD | NEW |