| 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 "ash/desktop_background/desktop_background_controller.h" | 5 #include "ash/desktop_background/desktop_background_controller.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <cstdlib> | 8 #include <cstdlib> |
| 9 | 9 |
| 10 #include "ash/ash_switches.h" | 10 #include "ash/ash_switches.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 } | 122 } |
| 123 | 123 |
| 124 protected: | 124 protected: |
| 125 // Colors used for different default wallpapers by | 125 // Colors used for different default wallpapers by |
| 126 // WriteWallpapersAndSetFlags(). | 126 // WriteWallpapersAndSetFlags(). |
| 127 static const SkColor kLargeWallpaperColor = SK_ColorRED; | 127 static const SkColor kLargeWallpaperColor = SK_ColorRED; |
| 128 static const SkColor kSmallWallpaperColor = SK_ColorGREEN; | 128 static const SkColor kSmallWallpaperColor = SK_ColorGREEN; |
| 129 static const SkColor kLargeGuestWallpaperColor = SK_ColorBLUE; | 129 static const SkColor kLargeGuestWallpaperColor = SK_ColorBLUE; |
| 130 static const SkColor kSmallGuestWallpaperColor = SK_ColorYELLOW; | 130 static const SkColor kSmallGuestWallpaperColor = SK_ColorYELLOW; |
| 131 | 131 |
| 132 // A color that can be passed to CreateImage(). Specifically chosen to not |
| 133 // conflict with any of the default wallpaper colors. |
| 134 static const SkColor kCustomWallpaperColor = SK_ColorMAGENTA; |
| 135 |
| 132 // Dimension used for width and height of default wallpaper images. A | 136 // Dimension used for width and height of default wallpaper images. A |
| 133 // small value is used to minimize the amount of time spent compressing | 137 // small value is used to minimize the amount of time spent compressing |
| 134 // and writing images. | 138 // and writing images. |
| 135 static const int kWallpaperSize = 2; | 139 static const int kWallpaperSize = 2; |
| 136 | 140 |
| 137 // Creates an image of size |size|. | 141 // Creates an image of size |size|. |
| 138 gfx::ImageSkia CreateImage(int width, int height) { | 142 gfx::ImageSkia CreateImage(int width, int height, SkColor color) { |
| 139 SkBitmap bitmap; | 143 SkBitmap bitmap; |
| 140 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); | 144 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); |
| 141 bitmap.allocPixels(); | 145 bitmap.allocPixels(); |
| 146 bitmap.eraseColor(color); |
| 142 gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); | 147 gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); |
| 143 return image; | 148 return image; |
| 144 } | 149 } |
| 145 | 150 |
| 146 // Runs kAnimatingDesktopController's animation to completion. | 151 // Runs kAnimatingDesktopController's animation to completion. |
| 147 // TODO(bshe): Don't require tests to run animations; it's slow. | 152 // TODO(bshe): Don't require tests to run animations; it's slow. |
| 148 void RunDesktopControllerAnimation() { | 153 void RunDesktopControllerAnimation() { |
| 149 internal::DesktopBackgroundWidgetController* controller = | 154 internal::DesktopBackgroundWidgetController* controller = |
| 150 Shell::GetPrimaryRootWindowController()-> | 155 Shell::GetPrimaryRootWindowController()-> |
| 151 animating_wallpaper_controller()->GetController(false); | 156 animating_wallpaper_controller()->GetController(false); |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 root_window_controller->wallpaper_controller()); | 438 root_window_controller->wallpaper_controller()); |
| 434 } | 439 } |
| 435 | 440 |
| 436 TEST_F(DesktopBackgroundControllerTest, DisplayChange) { | 441 TEST_F(DesktopBackgroundControllerTest, DisplayChange) { |
| 437 // TODO(derat|oshima|bshe): Host windows can't be resized on Win8. | 442 // TODO(derat|oshima|bshe): Host windows can't be resized on Win8. |
| 438 if (!SupportsHostWindowResize()) | 443 if (!SupportsHostWindowResize()) |
| 439 return; | 444 return; |
| 440 | 445 |
| 441 // Set the wallpaper to ensure that UpdateWallpaper() will be called when the | 446 // Set the wallpaper to ensure that UpdateWallpaper() will be called when the |
| 442 // display configuration changes. | 447 // display configuration changes. |
| 443 gfx::ImageSkia image = CreateImage(640, 480); | 448 gfx::ImageSkia image = CreateImage(640, 480, kCustomWallpaperColor); |
| 444 wallpaper_delegate_->set_custom_wallpaper(image); | 449 wallpaper_delegate_->set_custom_wallpaper(image); |
| 445 controller_->SetCustomWallpaper(image, WALLPAPER_LAYOUT_STRETCH); | 450 controller_->SetCustomWallpaper(image, WALLPAPER_LAYOUT_STRETCH); |
| 446 | 451 |
| 447 // Small wallpaper images should be used for configurations less than or | 452 // Small wallpaper images should be used for configurations less than or |
| 448 // equal to kSmallWallpaperMaxWidth by kSmallWallpaperMaxHeight, even if | 453 // equal to kSmallWallpaperMaxWidth by kSmallWallpaperMaxHeight, even if |
| 449 // multiple displays are connected. | 454 // multiple displays are connected. |
| 450 test::DisplayManagerTestApi display_manager_test_api( | 455 test::DisplayManagerTestApi display_manager_test_api( |
| 451 Shell::GetInstance()->display_manager()); | 456 Shell::GetInstance()->display_manager()); |
| 452 display_manager_test_api.UpdateDisplay("800x600"); | 457 display_manager_test_api.UpdateDisplay("800x600"); |
| 453 RunAllPendingInMessageLoop(); | 458 RunAllPendingInMessageLoop(); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 } | 601 } |
| 597 | 602 |
| 598 TEST_F(DesktopBackgroundControllerTest, ResizeCustomWallpaper) { | 603 TEST_F(DesktopBackgroundControllerTest, ResizeCustomWallpaper) { |
| 599 if (!SupportsMultipleDisplays()) | 604 if (!SupportsMultipleDisplays()) |
| 600 return; | 605 return; |
| 601 | 606 |
| 602 test::DisplayManagerTestApi display_manager_test_api( | 607 test::DisplayManagerTestApi display_manager_test_api( |
| 603 Shell::GetInstance()->display_manager()); | 608 Shell::GetInstance()->display_manager()); |
| 604 display_manager_test_api.UpdateDisplay("320x200"); | 609 display_manager_test_api.UpdateDisplay("320x200"); |
| 605 | 610 |
| 606 gfx::ImageSkia image = CreateImage(640, 480); | 611 gfx::ImageSkia image = CreateImage(640, 480, kCustomWallpaperColor); |
| 607 | 612 |
| 608 // Set the image as custom wallpaper, wait for the resize to finish, and check | 613 // Set the image as custom wallpaper, wait for the resize to finish, and check |
| 609 // that the resized image is the expected size. | 614 // that the resized image is the expected size. |
| 610 controller_->SetCustomWallpaper(image, WALLPAPER_LAYOUT_STRETCH); | 615 controller_->SetCustomWallpaper(image, WALLPAPER_LAYOUT_STRETCH); |
| 611 EXPECT_TRUE(image.BackedBySameObjectAs(controller_->GetWallpaper())); | 616 EXPECT_TRUE(image.BackedBySameObjectAs(controller_->GetWallpaper())); |
| 612 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 617 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 613 content::RunAllPendingInMessageLoop(); | 618 content::RunAllPendingInMessageLoop(); |
| 614 gfx::ImageSkia resized_image = controller_->GetWallpaper(); | 619 gfx::ImageSkia resized_image = controller_->GetWallpaper(); |
| 615 EXPECT_FALSE(image.BackedBySameObjectAs(resized_image)); | 620 EXPECT_FALSE(image.BackedBySameObjectAs(resized_image)); |
| 616 EXPECT_EQ(gfx::Size(320, 200).ToString(), resized_image.size().ToString()); | 621 EXPECT_EQ(gfx::Size(320, 200).ToString(), resized_image.size().ToString()); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 "500x600", | 663 "500x600", |
| 659 DesktopBackgroundController::GetMaxDisplaySizeInNative().ToString()); | 664 DesktopBackgroundController::GetMaxDisplaySizeInNative().ToString()); |
| 660 | 665 |
| 661 // Maximum width and height belongs to different displays. | 666 // Maximum width and height belongs to different displays. |
| 662 UpdateDisplay("400x300,100x500"); | 667 UpdateDisplay("400x300,100x500"); |
| 663 EXPECT_EQ( | 668 EXPECT_EQ( |
| 664 "400x500", | 669 "400x500", |
| 665 DesktopBackgroundController::GetMaxDisplaySizeInNative().ToString()); | 670 DesktopBackgroundController::GetMaxDisplaySizeInNative().ToString()); |
| 666 } | 671 } |
| 667 | 672 |
| 673 TEST_F(DesktopBackgroundControllerTest, SwitchBetweenDefaultAndCustom) { |
| 674 // Start loading the default wallpaper. |
| 675 UpdateDisplay("640x480"); |
| 676 WriteWallpapersAndSetFlags(); |
| 677 ASSERT_TRUE(controller_->SetDefaultWallpaper(false)); |
| 678 |
| 679 // Custom wallpaper should be applied immediately, canceling the default |
| 680 // wallpaper load task. |
| 681 gfx::ImageSkia image = CreateImage(640, 480, kCustomWallpaperColor); |
| 682 controller_->SetCustomWallpaper(image, WALLPAPER_LAYOUT_STRETCH); |
| 683 EXPECT_TRUE(ImageIsNearColor(controller_->GetWallpaper(), |
| 684 kCustomWallpaperColor)); |
| 685 |
| 686 // A call to SetDefaultWallpaper() should return true now, indicating that a |
| 687 // new load task was started (since the previous one was interrupted by |
| 688 // SetCustomWallpaper()). See http://crbug.com/327443. |
| 689 TestObserver observer(controller_); |
| 690 ASSERT_TRUE(controller_->SetDefaultWallpaper(false)); |
| 691 observer.WaitForWallpaperDataChanged(); |
| 692 EXPECT_TRUE(ImageIsNearColor(controller_->GetWallpaper(), |
| 693 kSmallWallpaperColor)); |
| 694 } |
| 695 |
| 668 } // namespace ash | 696 } // namespace ash |
| OLD | NEW |