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

Side by Side Diff: ash/wm/drag_window_resizer_unittest.cc

Issue 93873013: Make sure the dragged window is smaller than work area in the target display (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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
OLDNEW
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 "ash/wm/drag_window_resizer.h" 5 #include "ash/wm/drag_window_resizer.h"
6 6
7 #include "ash/display/mouse_cursor_event_filter.h" 7 #include "ash/display/mouse_cursor_event_filter.h"
8 #include "ash/root_window_controller.h" 8 #include "ash/root_window_controller.h"
9 #include "ash/shelf/shelf_layout_manager.h" 9 #include "ash/shelf/shelf_layout_manager.h"
10 #include "ash/shell.h" 10 #include "ash/shell.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 scoped_ptr<aura::Window> system_modal_window_; 149 scoped_ptr<aura::Window> system_modal_window_;
150 scoped_ptr<aura::Window> panel_window_; 150 scoped_ptr<aura::Window> panel_window_;
151 aura::Window* transient_child_; 151 aura::Window* transient_child_;
152 scoped_ptr<aura::Window> transient_parent_; 152 scoped_ptr<aura::Window> transient_parent_;
153 153
154 private: 154 private:
155 DISALLOW_COPY_AND_ASSIGN(DragWindowResizerTest); 155 DISALLOW_COPY_AND_ASSIGN(DragWindowResizerTest);
156 }; 156 };
157 157
158 // Verifies a window can be moved from the primary display to another. 158 // Verifies a window can be moved from the primary display to another.
159 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplays) { 159 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplays) {
varkha 2013/12/12 16:20:46 nit: This test too could be quoted in the CL TEST
oshima 2013/12/12 19:07:14 Done.
160 if (!SupportsMultipleDisplays()) 160 if (!SupportsMultipleDisplays())
161 return; 161 return;
162 162
163 // The secondary display is logically on the right, but on the system (e.g. X) 163 // The secondary display is logically on the right, but on the system (e.g. X)
164 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. 164 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc.
165 UpdateDisplay("800x600,800x600"); 165 UpdateDisplay("800x600,400x300");
166 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); 166 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
167 ASSERT_EQ(2U, root_windows.size()); 167 ASSERT_EQ(2U, root_windows.size());
168 168
169 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), 169 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60),
170 Shell::GetScreen()->GetPrimaryDisplay()); 170 Shell::GetScreen()->GetPrimaryDisplay());
171 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); 171 EXPECT_EQ(root_windows[0], window_->GetRootWindow());
172 { 172 {
173 // Grab (0, 0) of the window. 173 // Grab (0, 0) of the window.
174 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( 174 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer(
175 window_.get(), gfx::Point(), HTCAPTION)); 175 window_.get(), gfx::Point(), HTCAPTION));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 resizer->CompleteDrag(0); 216 resizer->CompleteDrag(0);
217 // Since the pointer is on the secondary, the parent should be changed 217 // Since the pointer is on the secondary, the parent should be changed
218 // even though only small fraction of the window is within the secondary 218 // even though only small fraction of the window is within the secondary
219 // root window's bounds. 219 // root window's bounds.
220 EXPECT_EQ(root_windows[1], window_->GetRootWindow()); 220 EXPECT_EQ(root_windows[1], window_->GetRootWindow());
221 // Window origin should be adjusted for minimum visibility (10px). 221 // Window origin should be adjusted for minimum visibility (10px).
222 int expected_x = -50 + 10; 222 int expected_x = -50 + 10;
223 EXPECT_EQ(base::IntToString(expected_x) + ",10 50x60", 223 EXPECT_EQ(base::IntToString(expected_x) + ",10 50x60",
224 window_->bounds().ToString()); 224 window_->bounds().ToString());
225 } 225 }
226 // Dropping a window that is larger than the destination work area
227 // will shrink to fit to the work area.
228 window_->SetBoundsInScreen(gfx::Rect(0, 0, 700, 500),
229 Shell::GetScreen()->GetPrimaryDisplay());
230 EXPECT_EQ(root_windows[0], window_->GetRootWindow());
231 {
232 // Grab the top-right edge of the window and move the pointer to (0, 10)
233 // in the secondary root window's coordinates.
234 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer(
235 window_.get(), gfx::Point(699, 0), HTCAPTION));
236 ASSERT_TRUE(resizer.get());
237 resizer->Drag(CalculateDragPoint(*resizer, 101, 10), ui::EF_CONTROL_DOWN);
238 resizer->CompleteDrag(0);
239 EXPECT_EQ(root_windows[1], window_->GetRootWindow());
240 // Window size should be adjusted to fit to the work area
241 EXPECT_EQ("400x253", window_->bounds().size().ToString());
242 gfx::Rect window_bounds_in_screen = window_->GetBoundsInScreen();
243 gfx::Rect intersect(window_->GetRootWindow()->GetBoundsInScreen());
244 intersect.Intersect(window_bounds_in_screen);
245 EXPECT_LE(10, intersect.width());
246 EXPECT_LE(10, intersect.height());
247 EXPECT_TRUE(window_bounds_in_screen.Contains(gfx::Point(800, 10)));
248 }
249
250 // Dropping a window that is larger than the destination work area
251 // will shrink to fit to the work area.
252 window_->SetBoundsInScreen(gfx::Rect(0, 0, 700, 500),
253 Shell::GetScreen()->GetPrimaryDisplay());
254 EXPECT_EQ(root_windows[0], window_->GetRootWindow());
255 {
256 // Grab the top-left edge of the window and move the pointer to (150, 10)
257 // in the secondary root window's coordinates. Make sure the window is
258 // shrink in such a way that it keeps the cursor within.
259 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer(
260 window_.get(), gfx::Point(0, 0), HTCAPTION));
261 ASSERT_TRUE(resizer.get());
262 resizer->Drag(CalculateDragPoint(*resizer, 799, 10), ui::EF_CONTROL_DOWN);
263 resizer->Drag(CalculateDragPoint(*resizer, 850, 10), ui::EF_CONTROL_DOWN);
264 resizer->CompleteDrag(0);
265 EXPECT_EQ(root_windows[1], window_->GetRootWindow());
266 // Window size should be adjusted to fit to the work area
267 EXPECT_EQ("400x253", window_->bounds().size().ToString());
268 gfx::Rect window_bounds_in_screen = window_->GetBoundsInScreen();
269 gfx::Rect intersect(window_->GetRootWindow()->GetBoundsInScreen());
270 intersect.Intersect(window_bounds_in_screen);
271 EXPECT_LE(10, intersect.width());
272 EXPECT_LE(10, intersect.height());
273 EXPECT_TRUE(window_bounds_in_screen.Contains(gfx::Point(850, 10)));
274 }
226 } 275 }
227 276
228 // Verifies that dragging the active window to another display makes the new 277 // Verifies that dragging the active window to another display makes the new
229 // root window the active root window. 278 // root window the active root window.
230 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplaysActiveRoot) { 279 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplaysActiveRoot) {
231 if (!SupportsMultipleDisplays()) 280 if (!SupportsMultipleDisplays())
232 return; 281 return;
233 282
234 // The secondary display is logically on the right, but on the system (e.g. X) 283 // The secondary display is logically on the right, but on the system (e.g. X)
235 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. 284 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc.
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 resizer->CompleteDrag(0); 714 resizer->CompleteDrag(0);
666 EXPECT_EQ(1, session_delegate->num_transfer_to_desktop_of_user_calls()); 715 EXPECT_EQ(1, session_delegate->num_transfer_to_desktop_of_user_calls());
667 EXPECT_NE(initial_bounds.ToString(), window->bounds().ToString()); 716 EXPECT_NE(initial_bounds.ToString(), window->bounds().ToString());
668 } 717 }
669 } 718 }
670 #endif 719 #endif
671 720
672 721
673 } // namespace internal 722 } // namespace internal
674 } // namespace ash 723 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698