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

Side by Side Diff: ash/system/web_notification/web_notification_tray_unittest.cc

Issue 369573004: Separate the logic of popup alignment and workarea handling as delegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 5 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
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/system/web_notification/web_notification_tray.h" 5 #include "ash/system/web_notification/web_notification_tray.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/display/display_manager.h" 9 #include "ash/display/display_manager.h"
10 #include "ash/root_window_controller.h" 10 #include "ash/root_window_controller.h"
11 #include "ash/shelf/shelf_layout_manager.h" 11 #include "ash/shelf/shelf_layout_manager.h"
12 #include "ash/shelf/shelf_widget.h" 12 #include "ash/shelf/shelf_widget.h"
13 #include "ash/shell.h" 13 #include "ash/shell.h"
14 #include "ash/system/status_area_widget.h" 14 #include "ash/system/status_area_widget.h"
15 #include "ash/system/tray/system_tray.h" 15 #include "ash/system/tray/system_tray.h"
16 #include "ash/system/tray/system_tray_item.h" 16 #include "ash/system/tray/system_tray_item.h"
17 #include "ash/system/web_notification/ash_popup_alignment_delegate.h"
17 #include "ash/test/ash_test_base.h" 18 #include "ash/test/ash_test_base.h"
18 #include "ash/test/status_area_widget_test_helper.h" 19 #include "ash/test/status_area_widget_test_helper.h"
19 #include "ash/test/test_system_tray_delegate.h" 20 #include "ash/test/test_system_tray_delegate.h"
20 #include "ash/wm/window_state.h" 21 #include "ash/wm/window_state.h"
21 #include "base/strings/stringprintf.h" 22 #include "base/strings/stringprintf.h"
22 #include "base/strings/utf_string_conversions.h" 23 #include "base/strings/utf_string_conversions.h"
23 #include "ui/aura/client/aura_constants.h" 24 #include "ui/aura/client/aura_constants.h"
24 #include "ui/aura/test/event_generator.h" 25 #include "ui/aura/test/event_generator.h"
25 #include "ui/aura/window.h" 26 #include "ui/aura/window.h"
26 #include "ui/gfx/display.h" 27 #include "ui/gfx/display.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 } 128 }
128 129
129 void RemoveNotification(const std::string& id) { 130 void RemoveNotification(const std::string& id) {
130 GetMessageCenter()->RemoveNotification(id, false); 131 GetMessageCenter()->RemoveNotification(id, false);
131 } 132 }
132 133
133 views::Widget* GetWidget() { 134 views::Widget* GetWidget() {
134 return GetTray()->GetWidget(); 135 return GetTray()->GetWidget();
135 } 136 }
136 137
137 gfx::Rect GetPopupWorkArea() { 138 int GetPopupWorkAreaBottom() {
138 return GetPopupWorkAreaForTray(GetTray()); 139 return GetPopupWorkAreaBottomForTray(GetTray());
139 } 140 }
140 141
141 gfx::Rect GetPopupWorkAreaForTray(WebNotificationTray* tray) { 142 int GetPopupWorkAreaBottomForTray(WebNotificationTray* tray) {
142 return tray->popup_collection_->work_area_; 143 return tray->popup_alignment_delegate_->GetWorkAreaBottom();
143 } 144 }
144 145
145 bool IsPopupVisible() { 146 bool IsPopupVisible() {
146 return GetTray()->IsPopupVisible(); 147 return GetTray()->IsPopupVisible();
147 } 148 }
148 149
149 private: 150 private:
150 DISALLOW_COPY_AND_ASSIGN(WebNotificationTrayTest); 151 DISALLOW_COPY_AND_ASSIGN(WebNotificationTrayTest);
151 }; 152 };
152 153
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 #define MAYBE_PopupAndAutoHideShelf DISABLED_PopupAndAutoHideShelf 313 #define MAYBE_PopupAndAutoHideShelf DISABLED_PopupAndAutoHideShelf
313 #define MAYBE_PopupAndFullscreen DISABLED_PopupAndFullscreen 314 #define MAYBE_PopupAndFullscreen DISABLED_PopupAndFullscreen
314 #endif 315 #endif
315 316
316 TEST_F(WebNotificationTrayTest, MAYBE_PopupAndSystemTray) { 317 TEST_F(WebNotificationTrayTest, MAYBE_PopupAndSystemTray) {
317 TestItem* test_item = new TestItem; 318 TestItem* test_item = new TestItem;
318 GetSystemTray()->AddTrayItem(test_item); 319 GetSystemTray()->AddTrayItem(test_item);
319 320
320 AddNotification("test_id"); 321 AddNotification("test_id");
321 EXPECT_TRUE(GetTray()->IsPopupVisible()); 322 EXPECT_TRUE(GetTray()->IsPopupVisible());
322 gfx::Rect work_area = GetPopupWorkArea(); 323 int bottom = GetPopupWorkAreaBottom();
323 324
324 // System tray is created, the popup's work area should be narrowed but still 325 // System tray is created, the popup's work area should be narrowed but still
325 // visible. 326 // visible.
326 GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW); 327 GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW);
327 EXPECT_TRUE(GetTray()->IsPopupVisible()); 328 EXPECT_TRUE(GetTray()->IsPopupVisible());
328 gfx::Rect work_area_with_tray = GetPopupWorkArea(); 329 int bottom_with_tray = GetPopupWorkAreaBottom();
329 EXPECT_GT(work_area.size().GetArea(), work_area_with_tray.size().GetArea()); 330 EXPECT_GT(bottom, bottom_with_tray);
330 331
331 // System tray notification is also created, the popup's work area is narrowed 332 // System tray notification is also created, the popup's work area is narrowed
332 // even more, but still visible. 333 // even more, but still visible.
333 GetSystemTray()->ShowNotificationView(test_item); 334 GetSystemTray()->ShowNotificationView(test_item);
334 EXPECT_TRUE(GetTray()->IsPopupVisible()); 335 EXPECT_TRUE(GetTray()->IsPopupVisible());
335 gfx::Rect work_area_with_tray_notification = GetPopupWorkArea(); 336 int bottom_with_tray_notification = GetPopupWorkAreaBottom();
336 EXPECT_GT(work_area.size().GetArea(), 337 EXPECT_GT(bottom, bottom_with_tray_notification);
337 work_area_with_tray_notification.size().GetArea()); 338 EXPECT_GT(bottom_with_tray, bottom_with_tray_notification);
338 EXPECT_GT(work_area_with_tray.size().GetArea(),
339 work_area_with_tray_notification.size().GetArea());
340 339
341 // Close system tray, only system tray notifications. 340 // Close system tray, only system tray notifications.
342 GetSystemTray()->ClickedOutsideBubble(); 341 GetSystemTray()->ClickedOutsideBubble();
343 EXPECT_TRUE(GetTray()->IsPopupVisible()); 342 EXPECT_TRUE(GetTray()->IsPopupVisible());
344 gfx::Rect work_area_with_notification = GetPopupWorkArea(); 343 int bottom_with_notification = GetPopupWorkAreaBottom();
345 EXPECT_GT(work_area.size().GetArea(), 344 EXPECT_GT(bottom, bottom_with_notification);
346 work_area_with_notification.size().GetArea()); 345 EXPECT_LT(bottom_with_tray_notification, bottom_with_notification);
347 EXPECT_LT(work_area_with_tray_notification.size().GetArea(),
348 work_area_with_notification.size().GetArea());
349 346
350 // Close the system tray notifications. 347 // Close the system tray notifications.
351 GetSystemTray()->HideNotificationView(test_item); 348 GetSystemTray()->HideNotificationView(test_item);
352 EXPECT_TRUE(GetTray()->IsPopupVisible()); 349 EXPECT_TRUE(GetTray()->IsPopupVisible());
353 EXPECT_EQ(work_area.ToString(), GetPopupWorkArea().ToString()); 350 EXPECT_EQ(bottom, GetPopupWorkAreaBottom());
354 } 351 }
355 352
356 TEST_F(WebNotificationTrayTest, MAYBE_PopupAndAutoHideShelf) { 353 TEST_F(WebNotificationTrayTest, MAYBE_PopupAndAutoHideShelf) {
357 AddNotification("test_id"); 354 AddNotification("test_id");
358 EXPECT_TRUE(GetTray()->IsPopupVisible()); 355 EXPECT_TRUE(GetTray()->IsPopupVisible());
359 gfx::Rect work_area = GetPopupWorkArea(); 356 int bottom = GetPopupWorkAreaBottom();
360 357
361 // Shelf's auto-hide state won't be HIDDEN unless window exists. 358 // Shelf's auto-hide state won't be HIDDEN unless window exists.
362 scoped_ptr<aura::Window> window( 359 scoped_ptr<aura::Window> window(
363 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); 360 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4)));
364 ShelfLayoutManager* shelf = 361 ShelfLayoutManager* shelf =
365 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); 362 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager();
366 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); 363 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS);
367 364
368 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); 365 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
369 gfx::Rect work_area_auto_hidden = GetPopupWorkArea(); 366 int bottom_auto_hidden = GetPopupWorkAreaBottom();
370 EXPECT_LT(work_area.size().GetArea(), work_area_auto_hidden.size().GetArea()); 367 EXPECT_LT(bottom, bottom_auto_hidden);
371 368
372 // Close the window, which shows the shelf. 369 // Close the window, which shows the shelf.
373 window.reset(); 370 window.reset();
374 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); 371 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state());
375 gfx::Rect work_area_auto_shown = GetPopupWorkArea(); 372 int bottom_auto_shown = GetPopupWorkAreaBottom();
376 EXPECT_EQ(work_area.ToString(), work_area_auto_shown.ToString()); 373 EXPECT_EQ(bottom, bottom_auto_shown);
377 374
378 // Create the system tray during auto-hide. 375 // Create the system tray during auto-hide.
379 window.reset(CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); 376 window.reset(CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4)));
380 TestItem* test_item = new TestItem; 377 TestItem* test_item = new TestItem;
381 GetSystemTray()->AddTrayItem(test_item); 378 GetSystemTray()->AddTrayItem(test_item);
382 GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW); 379 GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW);
383 380
384 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); 381 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state());
385 EXPECT_TRUE(GetTray()->IsPopupVisible()); 382 EXPECT_TRUE(GetTray()->IsPopupVisible());
386 gfx::Rect work_area_with_tray = GetPopupWorkArea(); 383 int bottom_with_tray = GetPopupWorkAreaBottom();
387 EXPECT_GT(work_area_auto_shown.size().GetArea(), 384 EXPECT_GT(bottom_auto_shown, bottom_with_tray);
388 work_area_with_tray.size().GetArea());
389 385
390 // Create tray notification. 386 // Create tray notification.
391 GetSystemTray()->ShowNotificationView(test_item); 387 GetSystemTray()->ShowNotificationView(test_item);
392 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); 388 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state());
393 gfx::Rect work_area_with_tray_notification = GetPopupWorkArea(); 389 int bottom_with_tray_notification = GetPopupWorkAreaBottom();
394 EXPECT_GT(work_area_with_tray.size().GetArea(), 390 EXPECT_GT(bottom_with_tray, bottom_with_tray_notification);
395 work_area_with_tray_notification.size().GetArea());
396 391
397 // Close the system tray. 392 // Close the system tray.
398 GetSystemTray()->ClickedOutsideBubble(); 393 GetSystemTray()->ClickedOutsideBubble();
399 shelf->UpdateAutoHideState(); 394 shelf->UpdateAutoHideState();
400 RunAllPendingInMessageLoop(); 395 RunAllPendingInMessageLoop();
401 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); 396 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
402 gfx::Rect work_area_hidden_with_tray_notification = GetPopupWorkArea(); 397 int bottom_hidden_with_tray_notification = GetPopupWorkAreaBottom();
403 EXPECT_LT(work_area_with_tray_notification.size().GetArea(), 398 EXPECT_LT(bottom_with_tray_notification,
404 work_area_hidden_with_tray_notification.size().GetArea()); 399 bottom_hidden_with_tray_notification);
405 EXPECT_GT(work_area_auto_hidden.size().GetArea(), 400 EXPECT_GT(bottom_auto_hidden, bottom_hidden_with_tray_notification);
406 work_area_hidden_with_tray_notification.size().GetArea());
407 401
408 // Close the window again, which shows the shelf. 402 // Close the window again, which shows the shelf.
409 window.reset(); 403 window.reset();
410 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); 404 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state());
411 gfx::Rect work_area_shown_with_tray_notification = GetPopupWorkArea(); 405 int bottom_shown_with_tray_notification = GetPopupWorkAreaBottom();
412 EXPECT_GT(work_area_hidden_with_tray_notification.size().GetArea(), 406 EXPECT_GT(bottom_hidden_with_tray_notification,
413 work_area_shown_with_tray_notification.size().GetArea()); 407 bottom_shown_with_tray_notification);
414 EXPECT_GT(work_area_auto_shown.size().GetArea(), 408 EXPECT_GT(bottom_auto_shown, bottom_shown_with_tray_notification);
415 work_area_shown_with_tray_notification.size().GetArea());
416 } 409 }
417 410
418 TEST_F(WebNotificationTrayTest, MAYBE_PopupAndFullscreen) { 411 TEST_F(WebNotificationTrayTest, MAYBE_PopupAndFullscreen) {
419 AddNotification("test_id"); 412 AddNotification("test_id");
420 EXPECT_TRUE(IsPopupVisible()); 413 EXPECT_TRUE(IsPopupVisible());
421 gfx::Rect work_area = GetPopupWorkArea(); 414 int bottom = GetPopupWorkAreaBottom();
422 415
423 // Checks the work area for normal auto-hidden state. 416 // Checks the work area for normal auto-hidden state.
424 scoped_ptr<aura::Window> window( 417 scoped_ptr<aura::Window> window(
425 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); 418 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4)));
426 ShelfLayoutManager* shelf = 419 ShelfLayoutManager* shelf =
427 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); 420 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager();
428 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); 421 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS);
429 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); 422 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
430 gfx::Rect work_area_auto_hidden = GetPopupWorkArea(); 423 int bottom_auto_hidden = GetPopupWorkAreaBottom();
431 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); 424 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER);
432 425
433 // Put |window| into fullscreen without forcing the shelf to hide. Currently, 426 // Put |window| into fullscreen without forcing the shelf to hide. Currently,
434 // this is used by immersive fullscreen and forces the shelf to be auto 427 // this is used by immersive fullscreen and forces the shelf to be auto
435 // hidden. 428 // hidden.
436 wm::GetWindowState(window.get())->set_hide_shelf_when_fullscreen(false); 429 wm::GetWindowState(window.get())->set_hide_shelf_when_fullscreen(false);
437 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); 430 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN);
438 RunAllPendingInMessageLoop(); 431 RunAllPendingInMessageLoop();
439 432
440 // The work area for auto-hidden status of fullscreen is a bit larger 433 // The work area for auto-hidden status of fullscreen is a bit larger
441 // since it doesn't even have the 3-pixel width. 434 // since it doesn't even have the 3-pixel width.
442 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); 435 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
443 gfx::Rect work_area_fullscreen_hidden = GetPopupWorkArea(); 436 int bottom_fullscreen_hidden = GetPopupWorkAreaBottom();
444 EXPECT_EQ(work_area_auto_hidden.ToString(), 437 EXPECT_EQ(bottom_auto_hidden, bottom_fullscreen_hidden);
445 work_area_fullscreen_hidden.ToString());
446 438
447 // Move the mouse cursor at the bottom, which shows the shelf. 439 // Move the mouse cursor at the bottom, which shows the shelf.
448 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); 440 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
449 gfx::Point bottom_right = 441 gfx::Point bottom_right =
450 Shell::GetScreen()->GetPrimaryDisplay().bounds().bottom_right(); 442 Shell::GetScreen()->GetPrimaryDisplay().bounds().bottom_right();
451 bottom_right.Offset(-1, -1); 443 bottom_right.Offset(-1, -1);
452 generator.MoveMouseTo(bottom_right); 444 generator.MoveMouseTo(bottom_right);
453 shelf->UpdateAutoHideStateNow(); 445 shelf->UpdateAutoHideStateNow();
454 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); 446 EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state());
455 EXPECT_EQ(work_area.ToString(), GetPopupWorkArea().ToString()); 447 EXPECT_EQ(bottom, GetPopupWorkAreaBottom());
456 448
457 generator.MoveMouseTo(work_area.CenterPoint()); 449 generator.MoveMouseTo(
450 Shell::GetScreen()->GetPrimaryDisplay().bounds().CenterPoint());
458 shelf->UpdateAutoHideStateNow(); 451 shelf->UpdateAutoHideStateNow();
459 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); 452 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
460 EXPECT_EQ(work_area_auto_hidden.ToString(), GetPopupWorkArea().ToString()); 453 EXPECT_EQ(bottom_auto_hidden, GetPopupWorkAreaBottom());
461 } 454 }
462 455
463 TEST_F(WebNotificationTrayTest, MAYBE_PopupAndSystemTrayMultiDisplay) { 456 TEST_F(WebNotificationTrayTest, MAYBE_PopupAndSystemTrayMultiDisplay) {
464 UpdateDisplay("800x600,600x400"); 457 UpdateDisplay("800x600,600x400");
465 458
466 AddNotification("test_id"); 459 AddNotification("test_id");
467 gfx::Rect work_area = GetPopupWorkArea(); 460 int bottom = GetPopupWorkAreaBottom();
468 gfx::Rect work_area_second = GetPopupWorkAreaForTray(GetSecondaryTray()); 461 int bottom_second = GetPopupWorkAreaBottomForTray(GetSecondaryTray());
469 462
470 // System tray is created on the primary display. The popups in the secondary 463 // System tray is created on the primary display. The popups in the secondary
471 // tray aren't affected. 464 // tray aren't affected.
472 GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW); 465 GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW);
473 EXPECT_GT(work_area.size().GetArea(), GetPopupWorkArea().size().GetArea()); 466 EXPECT_GT(bottom, GetPopupWorkAreaBottom());
474 EXPECT_EQ(work_area_second.ToString(), 467 EXPECT_EQ(bottom_second, GetPopupWorkAreaBottomForTray(GetSecondaryTray()));
475 GetPopupWorkAreaForTray(GetSecondaryTray()).ToString());
476 } 468 }
477 469
478 } // namespace ash 470 } // namespace ash
OLDNEW
« no previous file with comments | « ash/system/web_notification/web_notification_tray.cc ('k') | chrome/browser/ui/views/message_center/web_notification_tray.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698