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

Side by Side Diff: chrome/browser/ui/panels/panel_drag_browsertest.cc

Issue 9546001: Support detaching/attaching panels via inter-strip drags. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Patch to land Created 8 years, 9 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/panels/base_panel_browser_test.h"
6 #include "chrome/browser/ui/panels/detached_panel_strip.h"
7 #include "chrome/browser/ui/panels/docked_panel_strip.h"
8 #include "chrome/browser/ui/panels/overflow_panel_strip.h"
9 #include "chrome/browser/ui/panels/native_panel.h"
10 #include "chrome/browser/ui/panels/panel.h"
11 #include "chrome/browser/ui/panels/panel_drag_controller.h"
12 #include "chrome/browser/ui/panels/panel_manager.h"
13
14 class PanelDragBrowserTest : public BasePanelBrowserTest {
15 public:
16 PanelDragBrowserTest() : BasePanelBrowserTest() {
17 }
18
19 virtual ~PanelDragBrowserTest() {
20 }
21
22 virtual void SetUpOnMainThread() OVERRIDE {
23 BasePanelBrowserTest::SetUpOnMainThread();
24
25 // All the tests here assume 800x600 work area. Do the check now.
26 DCHECK(PanelManager::GetInstance()->work_area().width() == 800);
27 DCHECK(PanelManager::GetInstance()->work_area().height() == 600);
28 }
29
30 // Drag |panel| from its origin by the offset |delta|.
31 void DragPanelByDelta(Panel* panel, const gfx::Point& delta) {
32 scoped_ptr<NativePanelTesting> panel_testing(
33 NativePanelTesting::Create(panel->native_panel()));
34 gfx::Point mouse_location(panel->GetBounds().origin());
35 panel_testing->PressLeftMouseButtonTitlebar(mouse_location);
36 panel_testing->DragTitlebar(mouse_location.Add(delta));
37 panel_testing->FinishDragTitlebar();
38 }
39
40 // Drag |panel| from its origin to |new_mouse_location|.
41 void DragPanelToMouseLocation(Panel* panel,
42 const gfx::Point& new_mouse_location) {
43 scoped_ptr<NativePanelTesting> panel_testing(
44 NativePanelTesting::Create(panel->native_panel()));
45 gfx::Point mouse_location(panel->GetBounds().origin());
46 panel_testing->PressLeftMouseButtonTitlebar(panel->GetBounds().origin());
47 panel_testing->DragTitlebar(new_mouse_location);
48 panel_testing->FinishDragTitlebar();
49 }
50
51 static gfx::Point GetDragDeltaToRemainDocked() {
52 return gfx::Point(
53 -5,
54 -(PanelDragController::GetDetachDockedPanelThreshold() / 2));
55 }
56
57 static gfx::Point GetDragDeltaToDetach() {
58 return gfx::Point(
59 -20,
60 -(PanelDragController::GetDetachDockedPanelThreshold() + 20));
61 }
62
63 static gfx::Point GetDragDeltaToRemainDetached(Panel* panel) {
64 int distance = panel->manager()->docked_strip()->display_area().bottom() -
65 panel->GetBounds().bottom();
66 return gfx::Point(
67 -5,
68 distance - PanelDragController::GetDockDetachedPanelThreshold() * 2);
69 }
70
71 static gfx::Point GetDragDeltaToAttach(Panel* panel) {
72 int distance = panel->manager()->docked_strip()->display_area().bottom() -
73 panel->GetBounds().bottom();
74 return gfx::Point(
75 -20,
76 distance - PanelDragController::GetDockDetachedPanelThreshold() / 2);
77 }
78 };
79
80 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, Detach) {
81 PanelManager* panel_manager = PanelManager::GetInstance();
82 DockedPanelStrip* docked_strip = panel_manager->docked_strip();
83 DetachedPanelStrip* detached_strip = panel_manager->detached_strip();
84
85 // Create one docked panel.
86 Panel* panel = CreateDockedPanel("1", gfx::Rect(0, 0, 100, 100));
87 ASSERT_EQ(1, docked_strip->num_panels());
88 ASSERT_EQ(0, detached_strip->num_panels());
89
90 gfx::Rect panel_old_bounds = panel->GetBounds();
91
92 // Press on title-bar.
93 scoped_ptr<NativePanelTesting> panel_testing(
94 NativePanelTesting::Create(panel->native_panel()));
95 gfx::Point mouse_location(panel->GetBounds().origin());
96 panel_testing->PressLeftMouseButtonTitlebar(mouse_location);
97
98 // Drag up the panel in a small offset that does not trigger the detach.
99 // Expect that the panel is still docked and only x coordinate of its position
100 // is changed.
101 gfx::Point drag_delta_to_remain_docked = GetDragDeltaToRemainDocked();
102 mouse_location = mouse_location.Add(drag_delta_to_remain_docked);
103 panel_testing->DragTitlebar(mouse_location);
104 ASSERT_EQ(1, docked_strip->num_panels());
105 ASSERT_EQ(0, detached_strip->num_panels());
106 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
107 gfx::Rect panel_new_bounds = panel_old_bounds;
108 panel_new_bounds.Offset(drag_delta_to_remain_docked.x(), 0);
109 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
110
111 // Continue dragging up the panel in big offset that triggers the detach.
112 // Expect that the panel is previewed as detached.
113 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach();
114 mouse_location = mouse_location.Add(drag_delta_to_detach);
115 panel_testing->DragTitlebar(mouse_location);
116 ASSERT_EQ(0, docked_strip->num_panels());
117 ASSERT_EQ(1, detached_strip->num_panels());
118 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
119 panel_new_bounds.Offset(
120 drag_delta_to_detach.x(),
121 drag_delta_to_detach.y() + drag_delta_to_remain_docked.y());
122 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
123
124 // Finish the drag.
125 // Expect that the panel stays as detached.
126 panel_testing->FinishDragTitlebar();
127 ASSERT_EQ(0, docked_strip->num_panels());
128 ASSERT_EQ(1, detached_strip->num_panels());
129 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
130 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
131
132 panel_manager->CloseAll();
133 }
134
135 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, DetachAndCancel) {
136 PanelManager* panel_manager = PanelManager::GetInstance();
137 DockedPanelStrip* docked_strip = panel_manager->docked_strip();
138 DetachedPanelStrip* detached_strip = panel_manager->detached_strip();
139
140 // Create one docked panel.
141 Panel* panel = CreateDockedPanel("1", gfx::Rect(0, 0, 100, 100));
142 ASSERT_EQ(1, docked_strip->num_panels());
143 ASSERT_EQ(0, detached_strip->num_panels());
144
145 gfx::Rect panel_old_bounds = panel->GetBounds();
146
147 // Press on title-bar.
148 scoped_ptr<NativePanelTesting> panel_testing(
149 NativePanelTesting::Create(panel->native_panel()));
150 gfx::Point mouse_location(panel->GetBounds().origin());
151 panel_testing->PressLeftMouseButtonTitlebar(mouse_location);
152
153 // Drag up the panel in a small offset that does not trigger the detach.
154 // Expect that the panel is still docked and only x coordinate of its position
155 // is changed.
156 gfx::Point drag_delta_to_remain_docked = GetDragDeltaToRemainDocked();
157 mouse_location = mouse_location.Add(drag_delta_to_remain_docked);
158 panel_testing->DragTitlebar(mouse_location);
159 ASSERT_EQ(1, docked_strip->num_panels());
160 ASSERT_EQ(0, detached_strip->num_panels());
161 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
162 gfx::Rect panel_new_bounds = panel_old_bounds;
163 panel_new_bounds.Offset(drag_delta_to_remain_docked.x(), 0);
164 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
165
166 // Continue dragging up the panel in big offset that triggers the detach.
167 // Expect that the panel is previewed as detached.
168 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach();
169 mouse_location = mouse_location.Add(drag_delta_to_detach);
170 panel_testing->DragTitlebar(mouse_location);
171 ASSERT_EQ(0, docked_strip->num_panels());
172 ASSERT_EQ(1, detached_strip->num_panels());
173 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
174 panel_new_bounds.Offset(
175 drag_delta_to_detach.x(),
176 drag_delta_to_detach.y() + drag_delta_to_remain_docked.y());
177 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
178
179 // Cancel the drag.
180 // Expect that the panel is back as docked.
181 panel_testing->CancelDragTitlebar();
182 ASSERT_EQ(1, docked_strip->num_panels());
183 ASSERT_EQ(0, detached_strip->num_panels());
184 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
185 EXPECT_EQ(panel_old_bounds, panel->GetBounds());
186
187 panel_manager->CloseAll();
188 }
189
190 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, Attach) {
191 PanelManager* panel_manager = PanelManager::GetInstance();
192 DockedPanelStrip* docked_strip = panel_manager->docked_strip();
193 DetachedPanelStrip* detached_strip = panel_manager->detached_strip();
194
195 // Create one detached panel.
196 Panel* panel = CreateDetachedPanel("1", gfx::Rect(400, 300, 100, 100));
197 ASSERT_EQ(0, docked_strip->num_panels());
198 ASSERT_EQ(1, detached_strip->num_panels());
199 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
200
201 gfx::Rect panel_old_bounds = panel->GetBounds();
202
203 // Press on title-bar.
204 scoped_ptr<NativePanelTesting> panel_testing(
205 NativePanelTesting::Create(panel->native_panel()));
206 gfx::Point mouse_location(panel->GetBounds().origin());
207 panel_testing->PressLeftMouseButtonTitlebar(mouse_location);
208
209 // Drag down the panel but not close enough to the bottom of work area.
210 // Expect that the panel is still detached.
211 gfx::Point drag_delta_to_remain_detached =
212 GetDragDeltaToRemainDetached(panel);
213 mouse_location = mouse_location.Add(drag_delta_to_remain_detached);
214 panel_testing->DragTitlebar(mouse_location);
215 ASSERT_EQ(0, docked_strip->num_panels());
216 ASSERT_EQ(1, detached_strip->num_panels());
217 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
218 gfx::Rect panel_new_bounds = panel_old_bounds;
219 panel_new_bounds.Offset(drag_delta_to_remain_detached);
220 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
221
222 // Continue dragging down the panel to make it close enough to the bottom of
223 // work area.
224 // Expect that the panel is previewed as docked.
225 gfx::Point drag_delta_to_attach = GetDragDeltaToAttach(panel);
226 mouse_location = mouse_location.Add(drag_delta_to_attach);
227 panel_testing->DragTitlebar(mouse_location);
228 ASSERT_EQ(1, docked_strip->num_panels());
229 ASSERT_EQ(0, detached_strip->num_panels());
230 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
231 panel_new_bounds.Offset(drag_delta_to_attach);
232 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
233
234 // Finish the drag.
235 // Expect that the panel stays as docked and moves to the final position.
236 panel_testing->FinishDragTitlebar();
237 ASSERT_EQ(1, docked_strip->num_panels());
238 ASSERT_EQ(0, detached_strip->num_panels());
239 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
240 panel_new_bounds.set_x(
241 docked_strip->StartingRightPosition() - panel_new_bounds.width());
242 panel_new_bounds.set_y(
243 docked_strip->display_area().bottom() - panel_new_bounds.height());
244 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
245
246 panel_manager->CloseAll();
247 }
248
249 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, AttachAndCancel) {
250 PanelManager* panel_manager = PanelManager::GetInstance();
251 DockedPanelStrip* docked_strip = panel_manager->docked_strip();
252 DetachedPanelStrip* detached_strip = panel_manager->detached_strip();
253
254 // Create one detached panel.
255 Panel* panel = CreateDetachedPanel("1", gfx::Rect(400, 300, 100, 100));
256 ASSERT_EQ(0, docked_strip->num_panels());
257 ASSERT_EQ(1, detached_strip->num_panels());
258 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
259
260 gfx::Rect panel_old_bounds = panel->GetBounds();
261
262 // Press on title-bar.
263 scoped_ptr<NativePanelTesting> panel_testing(
264 NativePanelTesting::Create(panel->native_panel()));
265 gfx::Point mouse_location(panel->GetBounds().origin());
266 panel_testing->PressLeftMouseButtonTitlebar(mouse_location);
267
268 // Drag down the panel but not close enough to the bottom of work area.
269 // Expect that the panel is still detached.
270 gfx::Point drag_delta_to_remain_detached =
271 GetDragDeltaToRemainDetached(panel);
272 mouse_location = mouse_location.Add(drag_delta_to_remain_detached);
273 panel_testing->DragTitlebar(mouse_location);
274 ASSERT_EQ(0, docked_strip->num_panels());
275 ASSERT_EQ(1, detached_strip->num_panels());
276 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
277 gfx::Rect panel_new_bounds = panel_old_bounds;
278 panel_new_bounds.Offset(drag_delta_to_remain_detached);
279 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
280
281 // Continue dragging down the panel to make it close enough to the bottom of
282 // work area.
283 // Expect that the panel is previewed as docked.
284 gfx::Point drag_delta_to_attach = GetDragDeltaToAttach(panel);
285 mouse_location = mouse_location.Add(drag_delta_to_attach);
286 panel_testing->DragTitlebar(mouse_location);
287 ASSERT_EQ(1, docked_strip->num_panels());
288 ASSERT_EQ(0, detached_strip->num_panels());
289 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
290 panel_new_bounds.Offset(drag_delta_to_attach);
291 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
292
293 // Cancel the drag.
294 // Expect that the panel is back as detached.
295 panel_testing->CancelDragTitlebar();
296 ASSERT_EQ(0, docked_strip->num_panels());
297 ASSERT_EQ(1, detached_strip->num_panels());
298 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
299 EXPECT_EQ(panel_old_bounds, panel->GetBounds());
300
301 panel_manager->CloseAll();
302 }
303
304 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, DetachAttachAndCancel) {
305 PanelManager* panel_manager = PanelManager::GetInstance();
306 DockedPanelStrip* docked_strip = panel_manager->docked_strip();
307 DetachedPanelStrip* detached_strip = panel_manager->detached_strip();
308
309 // Create one docked panel.
310 Panel* panel = CreateDockedPanel("1", gfx::Rect(0, 0, 100, 100));
311 ASSERT_EQ(1, docked_strip->num_panels());
312 ASSERT_EQ(0, detached_strip->num_panels());
313
314 gfx::Rect panel_old_bounds = panel->GetBounds();
315
316 // Press on title-bar.
317 scoped_ptr<NativePanelTesting> panel_testing(
318 NativePanelTesting::Create(panel->native_panel()));
319 gfx::Point mouse_location(panel->GetBounds().origin());
320 panel_testing->PressLeftMouseButtonTitlebar(mouse_location);
321
322 // Drag up the panel to trigger the detach.
323 // Expect that the panel is previewed as detached.
324 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach();
325 mouse_location = mouse_location.Add(drag_delta_to_detach);
326 panel_testing->DragTitlebar(mouse_location);
327 ASSERT_EQ(0, docked_strip->num_panels());
328 ASSERT_EQ(1, detached_strip->num_panels());
329 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
330 gfx::Rect panel_new_bounds = panel_old_bounds;
331 panel_new_bounds.Offset(drag_delta_to_detach);
332 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
333
334 // Continue dragging down the panel to trigger the re-attach.
335 gfx::Point drag_delta_to_reattach = GetDragDeltaToAttach(panel);
336 mouse_location = mouse_location.Add(drag_delta_to_reattach);
337 panel_testing->DragTitlebar(mouse_location);
338 ASSERT_EQ(1, docked_strip->num_panels());
339 ASSERT_EQ(0, detached_strip->num_panels());
340 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
341 panel_new_bounds.Offset(drag_delta_to_reattach);
342 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
343
344 // Continue dragging up the panel to trigger the detach again.
345 gfx::Point drag_delta_to_detach_again = GetDragDeltaToDetach();
346 mouse_location = mouse_location.Add(drag_delta_to_detach_again);
347 panel_testing->DragTitlebar(mouse_location);
348 ASSERT_EQ(0, docked_strip->num_panels());
349 ASSERT_EQ(1, detached_strip->num_panels());
350 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
351 panel_new_bounds.Offset(drag_delta_to_detach_again);
352 EXPECT_EQ(panel_new_bounds, panel->GetBounds());
353
354 // Cancel the drag.
355 // Expect that the panel stays as docked.
356 panel_testing->CancelDragTitlebar();
357 ASSERT_EQ(1, docked_strip->num_panels());
358 ASSERT_EQ(0, detached_strip->num_panels());
359 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
360 EXPECT_EQ(panel_old_bounds, panel->GetBounds());
361
362 panel_manager->CloseAll();
363 }
364
365 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, DetachWithOverflow) {
366 PanelManager* panel_manager = PanelManager::GetInstance();
367 DockedPanelStrip* docked_strip = panel_manager->docked_strip();
368 DetachedPanelStrip* detached_strip = panel_manager->detached_strip();
369 OverflowPanelStrip* overflow_strip = panel_manager->overflow_strip();
370
371 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach();
372
373 // Create some docked and overflow panels.
374 // docked: P1 P2 P3
375 // overflow: P4 P5
376 Panel* panel1 = CreateDockedPanel("1", gfx::Rect(0, 0, 200, 100));
377 Panel* panel2 = CreateDockedPanel("2", gfx::Rect(0, 0, 200, 100));
378 Panel* panel3 = CreateDockedPanel("3", gfx::Rect(0, 0, 200, 100));
379 Panel* panel4 = CreateOverflowPanel("4", gfx::Rect(0, 0, 200, 100));
380 Panel* panel5 = CreateOverflowPanel("5", gfx::Rect(0, 0, 200, 100));
381 ASSERT_EQ(0, detached_strip->num_panels());
382 ASSERT_EQ(3, docked_strip->num_panels());
383 ASSERT_EQ(2, overflow_strip->num_panels());
384
385 gfx::Point docked_position1 = panel1->GetBounds().origin();
386 gfx::Point docked_position2 = panel2->GetBounds().origin();
387 gfx::Point docked_position3 = panel3->GetBounds().origin();
388
389 // Drag to detach the middle docked panel.
390 // Expect to have:
391 // detached: P2
392 // docked: P1 P3 P4
393 // overflow: P5
394 DragPanelByDelta(panel2, drag_delta_to_detach);
395 ASSERT_EQ(1, detached_strip->num_panels());
396 ASSERT_EQ(3, docked_strip->num_panels());
397 ASSERT_EQ(1, overflow_strip->num_panels());
398 EXPECT_EQ(PanelStrip::DOCKED, panel1->panel_strip()->type());
399 EXPECT_EQ(PanelStrip::DETACHED, panel2->panel_strip()->type());
400 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type());
401 EXPECT_EQ(PanelStrip::DOCKED, panel4->panel_strip()->type());
402 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel5->panel_strip()->type());
403 EXPECT_EQ(docked_position1, panel1->GetBounds().origin());
404 gfx::Point panel2_new_position = docked_position2.Add(drag_delta_to_detach);
405 EXPECT_EQ(panel2_new_position, panel2->GetBounds().origin());
406 EXPECT_EQ(docked_position2, panel3->GetBounds().origin());
407 EXPECT_EQ(docked_position3, panel4->GetBounds().origin());
408
409 // Drag to detach the left-most docked panel.
410 // Expect to have:
411 // detached: P2 P4
412 // docked: P1 P3 P5
413 DragPanelByDelta(panel4, drag_delta_to_detach);
414 ASSERT_EQ(2, detached_strip->num_panels());
415 ASSERT_EQ(3, docked_strip->num_panels());
416 ASSERT_EQ(0, overflow_strip->num_panels());
417 EXPECT_EQ(PanelStrip::DOCKED, panel1->panel_strip()->type());
418 EXPECT_EQ(PanelStrip::DETACHED, panel2->panel_strip()->type());
419 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type());
420 EXPECT_EQ(PanelStrip::DETACHED, panel4->panel_strip()->type());
421 EXPECT_EQ(PanelStrip::DOCKED, panel5->panel_strip()->type());
422 EXPECT_EQ(docked_position1, panel1->GetBounds().origin());
423 EXPECT_EQ(panel2_new_position, panel2->GetBounds().origin());
424 EXPECT_EQ(docked_position2, panel3->GetBounds().origin());
425 gfx::Point panel4_new_position = docked_position3.Add(drag_delta_to_detach);
426 EXPECT_EQ(panel4_new_position, panel4->GetBounds().origin());
427 EXPECT_EQ(docked_position3, panel5->GetBounds().origin());
428
429 // Drag to detach the right-most docked panel.
430 // Expect to have:
431 // detached: P1 P2 P4
432 // docked: P3 P5
433 DragPanelByDelta(panel1, drag_delta_to_detach);
434 ASSERT_EQ(3, detached_strip->num_panels());
435 ASSERT_EQ(2, docked_strip->num_panels());
436 ASSERT_EQ(0, overflow_strip->num_panels());
437 EXPECT_EQ(PanelStrip::DETACHED, panel1->panel_strip()->type());
438 EXPECT_EQ(PanelStrip::DETACHED, panel2->panel_strip()->type());
439 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type());
440 EXPECT_EQ(PanelStrip::DETACHED, panel4->panel_strip()->type());
441 EXPECT_EQ(PanelStrip::DOCKED, panel5->panel_strip()->type());
442 gfx::Point panel1_new_position = docked_position1.Add(drag_delta_to_detach);
443 EXPECT_EQ(panel1_new_position, panel1->GetBounds().origin());
444 EXPECT_EQ(panel2_new_position, panel2->GetBounds().origin());
445 EXPECT_EQ(docked_position1, panel3->GetBounds().origin());
446 EXPECT_EQ(panel4_new_position, panel4->GetBounds().origin());
447 EXPECT_EQ(docked_position2, panel5->GetBounds().origin());
448
449 panel_manager->CloseAll();
450 }
451
452 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, AttachWithOverflow) {
453 PanelManager* panel_manager = PanelManager::GetInstance();
454 DockedPanelStrip* docked_strip = panel_manager->docked_strip();
455 DetachedPanelStrip* detached_strip = panel_manager->detached_strip();
456 OverflowPanelStrip* overflow_strip = panel_manager->overflow_strip();
457
458 // Create some detached, docked and overflow panels.
459 // detached: P1 P2 P3
460 // docked: P4 P5 P6
461 // overflow: P7
462 Panel* panel1 = CreateDetachedPanel("1", gfx::Rect(100, 300, 200, 100));
463 Panel* panel2 = CreateDetachedPanel("2", gfx::Rect(200, 300, 200, 100));
464 Panel* panel3 = CreateDetachedPanel("3", gfx::Rect(400, 300, 200, 100));
465 Panel* panel4 = CreateDockedPanel("4", gfx::Rect(0, 0, 200, 100));
466 Panel* panel5 = CreateDockedPanel("5", gfx::Rect(0, 0, 200, 100));
467 Panel* panel6 = CreateDockedPanel("6", gfx::Rect(0, 0, 200, 100));
468 Panel* panel7 = CreateOverflowPanel("7", gfx::Rect(0, 0, 200, 100));
469 ASSERT_EQ(3, detached_strip->num_panels());
470 ASSERT_EQ(3, docked_strip->num_panels());
471 ASSERT_EQ(1, overflow_strip->num_panels());
472
473 gfx::Point detached_position1 = panel1->GetBounds().origin();
474 gfx::Point detached_position2 = panel2->GetBounds().origin();
475 gfx::Point detached_position3 = panel3->GetBounds().origin();
476 gfx::Point docked_position1 = panel4->GetBounds().origin();
477 gfx::Point docked_position2 = panel5->GetBounds().origin();
478 gfx::Point docked_position3 = panel6->GetBounds().origin();
479
480 // Drag to attach a detached panel between 2 docked panels.
481 // Expect to have:
482 // detached: P1 P2
483 // docked: P4 P3 P5
484 // overflow: P6 P7
485 gfx::Point drag_to_location(panel5->GetBounds().x() + 10,
486 panel5->GetBounds().bottom());
487 DragPanelToMouseLocation(panel3, drag_to_location);
488 ASSERT_EQ(2, detached_strip->num_panels());
489 ASSERT_EQ(3, docked_strip->num_panels());
490 ASSERT_EQ(2, overflow_strip->num_panels());
491 EXPECT_EQ(PanelStrip::DETACHED, panel1->panel_strip()->type());
492 EXPECT_EQ(PanelStrip::DETACHED, panel2->panel_strip()->type());
493 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type());
494 EXPECT_EQ(PanelStrip::DOCKED, panel4->panel_strip()->type());
495 EXPECT_EQ(PanelStrip::DOCKED, panel5->panel_strip()->type());
496 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel6->panel_strip()->type());
497 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel7->panel_strip()->type());
498 EXPECT_EQ(detached_position1, panel1->GetBounds().origin());
499 EXPECT_EQ(detached_position2, panel2->GetBounds().origin());
500 EXPECT_EQ(docked_position2, panel3->GetBounds().origin());
501 EXPECT_EQ(docked_position1, panel4->GetBounds().origin());
502 EXPECT_EQ(docked_position3, panel5->GetBounds().origin());
503
504 // Drag to attach a detached panel to most-right.
505 // Expect to have:
506 // detached: P1
507 // docked: P2 P4 P3
508 // overflow: P5 P6 P7
509 gfx::Point drag_to_location2(panel4->GetBounds().right() + 10,
510 panel4->GetBounds().bottom());
511 DragPanelToMouseLocation(panel2, drag_to_location2);
512 ASSERT_EQ(1, detached_strip->num_panels());
513 ASSERT_EQ(3, docked_strip->num_panels());
514 ASSERT_EQ(3, overflow_strip->num_panels());
515 EXPECT_EQ(PanelStrip::DETACHED, panel1->panel_strip()->type());
516 EXPECT_EQ(PanelStrip::DOCKED, panel2->panel_strip()->type());
517 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type());
518 EXPECT_EQ(PanelStrip::DOCKED, panel4->panel_strip()->type());
519 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel5->panel_strip()->type());
520 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel6->panel_strip()->type());
521 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel7->panel_strip()->type());
522 EXPECT_EQ(detached_position1, panel1->GetBounds().origin());
523 EXPECT_EQ(docked_position1, panel2->GetBounds().origin());
524 EXPECT_EQ(docked_position3, panel3->GetBounds().origin());
525 EXPECT_EQ(docked_position2, panel4->GetBounds().origin());
526
527 // Drag to attach a detached panel to most-left.
528 // Expect to have:
529 // docked: P2 P4 P1
530 // overflow: P3 P5 P6 P7
531 gfx::Point drag_to_location3(panel3->GetBounds().x() - 10,
532 panel3->GetBounds().bottom());
533 DragPanelToMouseLocation(panel1, drag_to_location3);
534 ASSERT_EQ(0, detached_strip->num_panels());
535 ASSERT_EQ(3, docked_strip->num_panels());
536 ASSERT_EQ(4, overflow_strip->num_panels());
537 EXPECT_EQ(PanelStrip::DOCKED, panel1->panel_strip()->type());
538 EXPECT_EQ(PanelStrip::DOCKED, panel2->panel_strip()->type());
539 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel3->panel_strip()->type());
540 EXPECT_EQ(PanelStrip::DOCKED, panel4->panel_strip()->type());
541 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel5->panel_strip()->type());
542 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel6->panel_strip()->type());
543 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel7->panel_strip()->type());
544 EXPECT_EQ(docked_position3, panel1->GetBounds().origin());
545 EXPECT_EQ(docked_position1, panel2->GetBounds().origin());
546 EXPECT_EQ(docked_position2, panel4->GetBounds().origin());
547
548 panel_manager->CloseAll();
549 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/panels/panel_browsertest.cc ('k') | chrome/browser/ui/panels/panel_drag_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698