Index: chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc |
diff --git a/chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc b/chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc |
deleted file mode 100644 |
index 235588eda88d64eba3ad49a146d4523aecec74f5..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc |
+++ /dev/null |
@@ -1,831 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/chromeos/login/wallpaper_manager.h" |
- |
-#include "ash/desktop_background/desktop_background_controller.h" |
-#include "ash/desktop_background/desktop_background_controller_observer.h" |
-#include "ash/desktop_background/desktop_background_controller_test_api.h" |
-#include "ash/display/display_manager.h" |
-#include "ash/shell.h" |
-#include "ash/test/ash_test_base.h" |
-#include "ash/test/ash_test_helper.h" |
-#include "ash/test/display_manager_test_api.h" |
-#include "ash/test/test_user_wallpaper_delegate.h" |
-#include "base/command_line.h" |
-#include "base/compiler_specific.h" |
-#include "base/file_util.h" |
-#include "base/files/file_path.h" |
-#include "base/macros.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/path_service.h" |
-#include "base/prefs/scoped_user_pref_update.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/time/time.h" |
-#include "base/values.h" |
-#include "chrome/browser/chromeos/login/user.h" |
-#include "chrome/browser/chromeos/login/user_manager.h" |
-#include "chrome/browser/chromeos/login/wallpaper_manager_test_utils.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/test/base/in_process_browser_test.h" |
-#include "chrome/test/base/testing_browser_process.h" |
-#include "chromeos/chromeos_switches.h" |
-#include "content/public/test/test_utils.h" |
-#include "ui/aura/env.h" |
-#include "ui/gfx/image/image_skia.h" |
-#include "ui/gfx/point.h" |
-#include "ui/gfx/rect.h" |
- |
-using namespace ash; |
- |
-namespace chromeos { |
- |
-namespace { |
- |
-int kLargeWallpaperWidth = 256; |
-int kLargeWallpaperHeight = chromeos::kLargeWallpaperMaxHeight; |
-int kSmallWallpaperWidth = 256; |
-int kSmallWallpaperHeight = chromeos::kSmallWallpaperMaxHeight; |
- |
-const char kTestUser1[] = "test1@domain.com"; |
-const char kTestUser1Hash[] = "test1@domain.com-hash"; |
-const char kTestUser2[] = "test2@domain.com"; |
-const char kTestUser2Hash[] = "test2@domain.com-hash"; |
- |
-} // namespace |
- |
-class WallpaperManagerBrowserTest : public InProcessBrowserTest, |
- public testing::WithParamInterface<bool> { |
- public: |
- WallpaperManagerBrowserTest () : controller_(NULL), |
- local_state_(NULL) { |
- } |
- |
- virtual ~WallpaperManagerBrowserTest () {} |
- |
- virtual void SetUpOnMainThread() OVERRIDE { |
- controller_ = ash::Shell::GetInstance()->desktop_background_controller(); |
- local_state_ = g_browser_process->local_state(); |
- DesktopBackgroundController::TestAPI(controller_) |
- .set_wallpaper_reload_delay_for_test(0); |
- UpdateDisplay("800x600"); |
- } |
- |
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
- command_line->AppendSwitch(switches::kLoginManager); |
- command_line->AppendSwitchASCII(switches::kLoginProfile, "user"); |
- if (GetParam()) |
- command_line->AppendSwitch(::switches::kMultiProfiles); |
- } |
- |
- virtual void CleanUpOnMainThread() OVERRIDE { |
- controller_ = NULL; |
- } |
- |
- // Update the display configuration as given in |display_specs|. See |
- // ash::test::DisplayManagerTestApi::UpdateDisplay for more details. |
- void UpdateDisplay(const std::string& display_specs) { |
- ash::test::DisplayManagerTestApi display_manager_test_api( |
- ash::Shell::GetInstance()->display_manager()); |
- display_manager_test_api.UpdateDisplay(display_specs); |
- } |
- |
- void WaitAsyncWallpaperLoadStarted() { |
- base::RunLoop().RunUntilIdle(); |
- } |
- |
- protected: |
- |
- // Return custom wallpaper path. Create directory if not exist. |
- base::FilePath GetCustomWallpaperPath(const char* sub_dir, |
- const std::string& username_hash, |
- const std::string& id) { |
- base::FilePath wallpaper_path = |
- WallpaperManager::Get()->GetCustomWallpaperPath(sub_dir, |
- username_hash, |
- id); |
- if (!base::DirectoryExists(wallpaper_path.DirName())) |
- base::CreateDirectory(wallpaper_path.DirName()); |
- |
- return wallpaper_path; |
- } |
- |
- // Logs in |username|. |
- void LogIn(const std::string& username, const std::string& username_hash) { |
- UserManager::Get()->UserLoggedIn(username, username_hash, false); |
- WaitAsyncWallpaperLoadStarted(); |
- } |
- |
- int LoadedWallpapers() { |
- return WallpaperManager::Get()->loaded_wallpapers(); |
- } |
- |
- void ClearDisposableWallpaperCache() { |
- WallpaperManager::Get()->ClearDisposableWallpaperCache(); |
- } |
- |
- // Initializes default wallpaper paths "*default_*file" and writes JPEG |
- // wallpaper images to them. |
- // Only needs to be called (once) by tests that want to test loading of |
- // default wallpapers. |
- void CreateCmdlineWallpapers() { |
- wallpaper_dir_.reset(new base::ScopedTempDir); |
- ASSERT_TRUE(wallpaper_dir_->CreateUniqueTempDir()); |
- wallpaper_manager_test_utils::CreateCmdlineWallpapers( |
- *wallpaper_dir_, &wallpaper_manager_command_line_); |
- } |
- |
- DesktopBackgroundController* controller_; |
- PrefService* local_state_; |
- scoped_ptr<base::CommandLine> wallpaper_manager_command_line_; |
- |
- // Directory created by CreateCmdlineWallpapers () to store default |
- // wallpaper images. |
- scoped_ptr<base::ScopedTempDir> wallpaper_dir_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(WallpaperManagerBrowserTest); |
-}; |
- |
-// Tests that the appropriate custom wallpaper (large vs. small) is loaded |
-// depending on the desktop resolution. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- LoadCustomLargeWallpaperForLargeExternalScreen) { |
- WallpaperManager* wallpaper_manager = WallpaperManager::Get(); |
- LogIn(kTestUser1, kTestUser1Hash); |
- std::string id = base::Int64ToString(base::Time::Now().ToInternalValue()); |
- base::FilePath small_wallpaper_path = GetCustomWallpaperPath( |
- kSmallWallpaperSubDir, |
- kTestUser1Hash, |
- id); |
- base::FilePath large_wallpaper_path = GetCustomWallpaperPath( |
- kLargeWallpaperSubDir, |
- kTestUser1Hash, |
- id); |
- |
- // Saves the small/large resolution wallpapers to small/large custom |
- // wallpaper paths. |
- ASSERT_TRUE(wallpaper_manager_test_utils::WriteJPEGFile( |
- small_wallpaper_path, |
- kSmallWallpaperWidth, |
- kSmallWallpaperHeight, |
- wallpaper_manager_test_utils::kSmallDefaultWallpaperColor)); |
- ASSERT_TRUE(wallpaper_manager_test_utils::WriteJPEGFile( |
- large_wallpaper_path, |
- kLargeWallpaperWidth, |
- kLargeWallpaperHeight, |
- wallpaper_manager_test_utils::kLargeDefaultWallpaperColor)); |
- |
- std::string relative_path = base::FilePath(kTestUser1Hash).Append(id).value(); |
- // Saves wallpaper info to local state for user |kTestUser1|. |
- WallpaperInfo info = { |
- relative_path, |
- WALLPAPER_LAYOUT_CENTER_CROPPED, |
- User::CUSTOMIZED, |
- base::Time::Now().LocalMidnight() |
- }; |
- wallpaper_manager->SetUserWallpaperInfo(kTestUser1, info, true); |
- |
- // Set the wallpaper for |kTestUser1|. |
- wallpaper_manager->SetUserWallpaperNow(kTestUser1); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- gfx::ImageSkia wallpaper = controller_->GetWallpaper(); |
- |
- // Display is initialized to 800x600. The small resolution custom wallpaper is |
- // expected. |
- EXPECT_EQ(kSmallWallpaperWidth, wallpaper.width()); |
- EXPECT_EQ(kSmallWallpaperHeight, wallpaper.height()); |
- |
- // Hook up another 800x600 display. This shouldn't trigger a reload. |
- UpdateDisplay("800x600,800x600"); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // The small resolution custom wallpaper is expected. |
- EXPECT_EQ(kSmallWallpaperWidth, wallpaper.width()); |
- EXPECT_EQ(kSmallWallpaperHeight, wallpaper.height()); |
- |
- // Detach the secondary display. |
- UpdateDisplay("800x600"); |
- // Hook up a 2000x2000 display. The large resolution custom wallpaper should |
- // be loaded. |
- UpdateDisplay("800x600,2000x2000"); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- wallpaper = controller_->GetWallpaper(); |
- |
- // The large resolution custom wallpaper is expected. |
- EXPECT_EQ(kLargeWallpaperWidth, wallpaper.width()); |
- EXPECT_EQ(kLargeWallpaperHeight, wallpaper.height()); |
- |
- // Detach the secondary display. |
- UpdateDisplay("800x600"); |
- // Hook up the 2000x2000 display again. The large resolution default wallpaper |
- // should persist. Test for crbug/165788. |
- UpdateDisplay("800x600,2000x2000"); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- wallpaper = controller_->GetWallpaper(); |
- |
- // The large resolution custom wallpaper is expected. |
- EXPECT_EQ(kLargeWallpaperWidth, wallpaper.width()); |
- EXPECT_EQ(kLargeWallpaperHeight, wallpaper.height()); |
-} |
- |
-// If chrome tries to reload the same wallpaper twice, the latter request should |
-// be prevented. Otherwise, there are some strange animation issues as |
-// described in crbug.com/158383. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- PreventReloadingSameWallpaper) { |
- WallpaperManager* wallpaper_manager = WallpaperManager::Get(); |
- // New user log in, a default wallpaper is loaded. |
- LogIn(kTestUser1, kTestUser1Hash); |
- EXPECT_EQ(1, LoadedWallpapers()); |
- // Loads the same wallpaper before the initial one finished. It should be |
- // prevented. |
- wallpaper_manager->SetUserWallpaperNow(kTestUser1); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(1, LoadedWallpapers()); |
- // Loads the same wallpaper after the initial one finished. It should be |
- // prevented. |
- wallpaper_manager->SetUserWallpaperNow(kTestUser1); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(1, LoadedWallpapers()); |
- ClearDisposableWallpaperCache(); |
- |
- // Change wallpaper to a custom wallpaper. |
- std::string id = base::Int64ToString(base::Time::Now().ToInternalValue()); |
- base::FilePath small_wallpaper_path = GetCustomWallpaperPath( |
- kSmallWallpaperSubDir, |
- kTestUser1Hash, |
- id); |
- ASSERT_TRUE(wallpaper_manager_test_utils::WriteJPEGFile( |
- small_wallpaper_path, |
- kSmallWallpaperWidth, |
- kSmallWallpaperHeight, |
- wallpaper_manager_test_utils::kSmallDefaultWallpaperColor)); |
- |
- std::string relative_path = base::FilePath(kTestUser1Hash).Append(id).value(); |
- // Saves wallpaper info to local state for user |kTestUser1|. |
- WallpaperInfo info = { |
- relative_path, |
- WALLPAPER_LAYOUT_CENTER_CROPPED, |
- User::CUSTOMIZED, |
- base::Time::Now().LocalMidnight() |
- }; |
- wallpaper_manager->SetUserWallpaperInfo(kTestUser1, info, true); |
- |
- wallpaper_manager->SetUserWallpaperNow(kTestUser1); |
- WaitAsyncWallpaperLoadStarted(); |
- EXPECT_EQ(2, LoadedWallpapers()); |
- // Loads the same wallpaper before the initial one finished. It should be |
- // prevented. |
- wallpaper_manager->SetUserWallpaperNow(kTestUser1); |
- WaitAsyncWallpaperLoadStarted(); |
- EXPECT_EQ(2, LoadedWallpapers()); |
- wallpaper_manager->SetUserWallpaperNow(kTestUser1); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(2, LoadedWallpapers()); |
-} |
- |
-// Some users have old user profiles which may have legacy wallpapers. And these |
-// lagacy wallpapers should migrate to new wallpaper picker version seamlessly. |
-// This tests make sure we compatible with migrated old wallpapers. |
-// crosbug.com/38429 |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- PRE_UseMigratedWallpaperInfo) { |
- // New user log in, a default wallpaper is loaded. |
- LogIn(kTestUser1, kTestUser1Hash); |
- // Old wallpaper migration code doesn't exist in codebase anymore. Modify user |
- // wallpaper info directly to simulate the wallpaper migration. See |
- // crosbug.com/38429 for details about why we modify wallpaper info this way. |
- WallpaperInfo info = { |
- "123", |
- WALLPAPER_LAYOUT_CENTER_CROPPED, |
- User::DEFAULT, |
- base::Time::Now().LocalMidnight() |
- }; |
- base::FilePath user_data_dir; |
- ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)); |
- ASSERT_TRUE(wallpaper_manager_test_utils::WriteJPEGFile( |
- user_data_dir.Append("123"), |
- wallpaper_manager_test_utils::kWallpaperSize, |
- wallpaper_manager_test_utils::kWallpaperSize, |
- wallpaper_manager_test_utils::kLargeDefaultWallpaperColor)); |
- WallpaperManager::Get()->SetUserWallpaperInfo(kTestUser1, info, true); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- UseMigratedWallpaperInfo) { |
- LogIn(kTestUser1, kTestUser1Hash); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // This test should finish normally. If timeout, it is probably because |
- // migrated wallpaper is somehow not loaded. Bad things can happen if |
- // wallpaper is not loaded at login screen. One example is: crosbug.com/38429. |
-} |
- |
-// Some users have old user profiles which may never get a chance to migrate. |
-// This tests make sure we compatible with these profiles. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- PRE_UsePreMigrationWallpaperInfo) { |
- // New user log in, a default wallpaper is loaded. |
- LogIn(kTestUser1, kTestUser1Hash); |
- // Old wallpaper migration code doesn't exist in codebase anymore. So if |
- // user's profile is not migrated, it is the same as no wallpaper info. To |
- // simulate this, we remove user's wallpaper info here. |
- WallpaperManager::Get()->RemoveUserWallpaperInfo(kTestUser1); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- UsePreMigrationWallpaperInfo) { |
- LogIn(kTestUser1, kTestUser1Hash); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // This test should finish normally. If timeout, it is probably because chrome |
- // can not handle pre migrated user profile (M21 profile or older). |
-} |
- |
-// Test for http://crbug.com/265689. When hooked up a large external monitor, |
-// the default large resolution wallpaper should load. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- HotPlugInScreenAtGAIALoginScreen) { |
- UpdateDisplay("800x600"); |
- // Set initial wallpaper to the default wallpaper. |
- WallpaperManager::Get()->SetDefaultWallpaperNow(UserManager::kStubUser); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- |
- // Hook up a 2000x2000 display. The large resolution custom wallpaper should |
- // be loaded. |
- UpdateDisplay("800x600,2000x2000"); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
-} |
- |
-class WallpaperManagerBrowserTestNoAnimation |
- : public WallpaperManagerBrowserTest { |
- public: |
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
- command_line->AppendSwitch(switches::kLoginManager); |
- command_line->AppendSwitchASCII(switches::kLoginProfile, "user"); |
- command_line->AppendSwitch(chromeos::switches::kDisableLoginAnimations); |
- command_line->AppendSwitch(chromeos::switches::kDisableBootAnimation); |
- } |
-}; |
- |
-// Same test as WallpaperManagerBrowserTest.UseMigratedWallpaperInfo. But |
-// disabled boot and login animation. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTestNoAnimation, |
- PRE_UseMigratedWallpaperInfo) { |
- // New user log in, a default wallpaper is loaded. |
- LogIn(kTestUser1, kTestUser1Hash); |
- // Old wallpaper migration code doesn't exist in codebase anymore. Modify user |
- // wallpaper info directly to simulate the wallpaper migration. See |
- // crosbug.com/38429 for details about why we modify wallpaper info this way. |
- WallpaperInfo info = { |
- "123", |
- WALLPAPER_LAYOUT_CENTER_CROPPED, |
- User::DEFAULT, |
- base::Time::Now().LocalMidnight() |
- }; |
- base::FilePath user_data_dir; |
- ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)); |
- ASSERT_TRUE(wallpaper_manager_test_utils::WriteJPEGFile( |
- user_data_dir.Append("123"), |
- wallpaper_manager_test_utils::kWallpaperSize, |
- wallpaper_manager_test_utils::kWallpaperSize, |
- wallpaper_manager_test_utils::kLargeDefaultWallpaperColor)); |
- WallpaperManager::Get()->SetUserWallpaperInfo(kTestUser1, info, true); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTestNoAnimation, |
- UseMigratedWallpaperInfo) { |
- LogIn(kTestUser1, kTestUser1Hash); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // This test should finish normally. If timeout, it is probably because |
- // migrated wallpaper is somehow not loaded. Bad things can happen if |
- // wallpaper is not loaded at login screen. One example is: crosbug.com/38429. |
-} |
- |
-// Same test as WallpaperManagerBrowserTest.UsePreMigrationWallpaperInfo. But |
-// disabled boot and login animation. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTestNoAnimation, |
- PRE_UsePreMigrationWallpaperInfo) { |
- // New user log in, a default wallpaper is loaded. |
- LogIn(kTestUser1, kTestUser1Hash); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // Old wallpaper migration code doesn't exist in codebase anymore. So if |
- // user's profile is not migrated, it is the same as no wallpaper info. To |
- // simulate this, we remove user's wallpaper info here. |
- WallpaperManager::Get()->RemoveUserWallpaperInfo(kTestUser1); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTestNoAnimation, |
- UsePreMigrationWallpaperInfo) { |
- LogIn(kTestUser1, kTestUser1Hash); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // This test should finish normally. If timeout, it is probably because chrome |
- // can not handle pre migrated user profile (M21 profile or older). |
-} |
- |
-class WallpaperManagerBrowserTestCrashRestore |
- : public WallpaperManagerBrowserTest { |
- public: |
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
- command_line->AppendSwitch(chromeos::switches::kDisableLoginAnimations); |
- command_line->AppendSwitch(chromeos::switches::kDisableBootAnimation); |
- command_line->AppendSwitch(::switches::kMultiProfiles); |
- command_line->AppendSwitchASCII(switches::kLoginUser, kTestUser1); |
- command_line->AppendSwitchASCII(switches::kLoginProfile, "user"); |
- } |
-}; |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTestCrashRestore, |
- PRE_RestoreWallpaper) { |
- LogIn(kTestUser1, kTestUser1Hash); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
-} |
- |
-// Test for crbug.com/270278. It simulates a browser crash and verifies if user |
-// wallpaper is loaded. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTestCrashRestore, |
- RestoreWallpaper) { |
- EXPECT_EQ(1, LoadedWallpapers()); |
-} |
- |
-class WallpaperManagerBrowserTestCacheUpdate |
- : public WallpaperManagerBrowserTest { |
- public: |
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
- command_line->AppendSwitch(::switches::kMultiProfiles); |
- command_line->AppendSwitchASCII(switches::kLoginUser, kTestUser1); |
- command_line->AppendSwitchASCII(switches::kLoginProfile, "user"); |
- } |
- protected: |
- // Creates a test image of size 1x1. |
- gfx::ImageSkia CreateTestImage(SkColor color) { |
- return wallpaper_manager_test_utils::CreateTestImage(1, 1, color); |
- } |
-}; |
- |
-// Sets kTestUser1's wallpaper to a custom wallpaper. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTestCacheUpdate, |
- PRE_VerifyWallpaperCache) { |
- // Add kTestUser1 to user list. kTestUser1 is the default login profile. |
- LogIn(kTestUser1, kTestUser1Hash); |
- |
- std::string id = base::Int64ToString(base::Time::Now().ToInternalValue()); |
- WallpaperManager* wallpaper_manager = WallpaperManager::Get(); |
- base::FilePath small_wallpaper_path = GetCustomWallpaperPath( |
- kSmallWallpaperSubDir, |
- kTestUser1Hash, |
- id); |
- base::FilePath large_wallpaper_path = GetCustomWallpaperPath( |
- kLargeWallpaperSubDir, |
- kTestUser1Hash, |
- id); |
- |
- // Saves the small/large resolution wallpapers to small/large custom |
- // wallpaper paths. |
- ASSERT_TRUE(wallpaper_manager_test_utils::WriteJPEGFile( |
- small_wallpaper_path, |
- kSmallWallpaperWidth, |
- kSmallWallpaperHeight, |
- wallpaper_manager_test_utils::kSmallDefaultWallpaperColor)); |
- ASSERT_TRUE(wallpaper_manager_test_utils::WriteJPEGFile( |
- large_wallpaper_path, |
- kLargeWallpaperWidth, |
- kLargeWallpaperHeight, |
- wallpaper_manager_test_utils::kLargeDefaultWallpaperColor)); |
- |
- std::string relative_path = base::FilePath(kTestUser1Hash).Append(id).value(); |
- // Saves wallpaper info to local state for user |kTestUser1|. |
- WallpaperInfo info = { |
- relative_path, |
- WALLPAPER_LAYOUT_CENTER_CROPPED, |
- User::CUSTOMIZED, |
- base::Time::Now().LocalMidnight() |
- }; |
- wallpaper_manager->SetUserWallpaperInfo(kTestUser1, info, true); |
- wallpaper_manager->SetUserWallpaperNow(kTestUser1); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- scoped_ptr<WallpaperManager::TestApi> test_api; |
- test_api.reset(new WallpaperManager::TestApi(wallpaper_manager)); |
- // Verify SetUserWallpaperNow updates wallpaper cache. |
- gfx::ImageSkia cached_wallpaper; |
- EXPECT_TRUE(test_api->GetWallpaperFromCache(kTestUser1, &cached_wallpaper)); |
-} |
- |
-// Tests for crbug.com/339576. Wallpaper cache should be updated in |
-// multi-profile mode when user: |
-// 1. chooses an online wallpaper from wallpaper |
-// picker (calls SetWallpaperFromImageSkia); |
-// 2. chooses a custom wallpaper from wallpaper |
-// picker (calls SetCustomWallpaper); |
-// 3. reverts to a default wallpaper. |
-// Also, when user login at multi-profile mode, previous logged in users' |
-// wallpaper cache should not be deleted. |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTestCacheUpdate, |
- VerifyWallpaperCache) { |
- WallpaperManager* wallpaper_manager = WallpaperManager::Get(); |
- |
- // Force load initial wallpaper |
- // (simulate DesktopBackgroundController::UpdateDisplay()). |
- wallpaper_manager->UpdateWallpaper(true); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- scoped_ptr<WallpaperManager::TestApi> test_api; |
- test_api.reset(new WallpaperManager::TestApi(wallpaper_manager)); |
- gfx::ImageSkia cached_wallpaper; |
- // Previous custom wallpaper should be cached after user login. |
- EXPECT_TRUE(test_api->GetWallpaperFromCache(kTestUser1, &cached_wallpaper)); |
- |
- LogIn(kTestUser2, kTestUser2Hash); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // Login another user should not delete logged in user's wallpaper cache. |
- // Note active user is still kTestUser1. |
- EXPECT_TRUE(test_api->GetWallpaperFromCache(kTestUser1, &cached_wallpaper)); |
- |
- gfx::ImageSkia red_wallpaper = CreateTestImage(SK_ColorRED); |
- wallpaper_manager->SetWallpaperFromImageSkia(kTestUser1, |
- red_wallpaper, |
- WALLPAPER_LAYOUT_CENTER, |
- true); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // SetWallpaperFromImageSkia should update wallpaper cache when multi-profile |
- // is turned on. |
- EXPECT_TRUE(test_api->GetWallpaperFromCache(kTestUser1, &cached_wallpaper)); |
- EXPECT_TRUE(cached_wallpaper.BackedBySameObjectAs(red_wallpaper)); |
- |
- gfx::ImageSkia green_wallpaper = CreateTestImage(SK_ColorGREEN); |
- wallpaper_manager->SetCustomWallpaper(kTestUser1, |
- kTestUser1Hash, |
- "dummy", // dummy file name |
- WALLPAPER_LAYOUT_CENTER, |
- User::CUSTOMIZED, |
- green_wallpaper, |
- true); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // SetCustomWallpaper should also update wallpaper cache when multi-profile is |
- // turned on. |
- EXPECT_TRUE(test_api->GetWallpaperFromCache(kTestUser1, &cached_wallpaper)); |
- EXPECT_TRUE(cached_wallpaper.BackedBySameObjectAs(green_wallpaper)); |
- |
- wallpaper_manager->SetDefaultWallpaperNow(kTestUser1); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- // SetDefaultWallpaper should invalidate the user's wallpaper cache. |
- EXPECT_FALSE(test_api->GetWallpaperFromCache(kTestUser1, &cached_wallpaper)); |
-} |
- |
-INSTANTIATE_TEST_CASE_P(WallpaperManagerBrowserTestInstantiation, |
- WallpaperManagerBrowserTest, |
- testing::Bool()); |
- |
-INSTANTIATE_TEST_CASE_P(WallpaperManagerBrowserTestNoAnimationInstantiation, |
- WallpaperManagerBrowserTestNoAnimation, |
- testing::Bool()); |
- |
-INSTANTIATE_TEST_CASE_P(WallpaperManagerBrowserTestCrashRestoreInstantiation, |
- WallpaperManagerBrowserTestCrashRestore, |
- testing::Bool()); |
- |
-INSTANTIATE_TEST_CASE_P(WallpaperManagerBrowserTestCacheUpdateInstantiation, |
- WallpaperManagerBrowserTestCacheUpdate, |
- testing::Bool()); |
- |
-// ---------------------------------------------------------------------- |
-// Test default wallpapers. |
- |
-class TestObserver : public WallpaperManager::Observer { |
- public: |
- explicit TestObserver(WallpaperManager* wallpaper_manager) |
- : update_wallpaper_count_(0), wallpaper_manager_(wallpaper_manager) { |
- DCHECK(wallpaper_manager_); |
- wallpaper_manager_->AddObserver(this); |
- } |
- |
- virtual ~TestObserver() { |
- wallpaper_manager_->RemoveObserver(this); |
- } |
- |
- virtual void OnWallpaperAnimationFinished(const std::string&) OVERRIDE { |
- } |
- |
- virtual void OnUpdateWallpaperForTesting() OVERRIDE { |
- ++update_wallpaper_count_; |
- } |
- |
- int GetUpdateWallpaperCountAndReset() { |
- const size_t old = update_wallpaper_count_; |
- update_wallpaper_count_ = 0; |
- return old; |
- } |
- |
- private: |
- int update_wallpaper_count_; |
- WallpaperManager* wallpaper_manager_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestObserver); |
-}; |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, DisplayChange) { |
- // TODO(derat|oshima|bshe): Host windows can't be resized on Win8. |
- if (!ash::test::AshTestHelper::SupportsHostWindowResize()) |
- return; |
- |
- TestObserver observer(WallpaperManager::Get()); |
- |
- // Set the wallpaper to ensure that UpdateWallpaper() will be called when the |
- // display configuration changes. |
- gfx::ImageSkia image = wallpaper_manager_test_utils::CreateTestImage( |
- 640, 480, wallpaper_manager_test_utils::kCustomWallpaperColor); |
- controller_->SetWallpaperImage(image, WALLPAPER_LAYOUT_STRETCH); |
- |
- // Small wallpaper images should be used for configurations less than or |
- // equal to kSmallWallpaperMaxWidth by kSmallWallpaperMaxHeight, even if |
- // multiple displays are connected. |
- UpdateDisplay("800x600"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_SMALL, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(0, observer.GetUpdateWallpaperCountAndReset()); |
- |
- UpdateDisplay("800x600,800x600"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_SMALL, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(0, observer.GetUpdateWallpaperCountAndReset()); |
- |
- UpdateDisplay("1366x800"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_SMALL, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(1, observer.GetUpdateWallpaperCountAndReset()); |
- |
- // At larger sizes, large wallpapers should be used. |
- UpdateDisplay("1367x800"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_LARGE, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(1, observer.GetUpdateWallpaperCountAndReset()); |
- |
- UpdateDisplay("1367x801"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_LARGE, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(1, observer.GetUpdateWallpaperCountAndReset()); |
- |
- UpdateDisplay("2560x1700"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_LARGE, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(1, observer.GetUpdateWallpaperCountAndReset()); |
- |
- // Rotated smaller screen may use larger image. |
- UpdateDisplay("800x600/r"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_SMALL, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(1, observer.GetUpdateWallpaperCountAndReset()); |
- |
- UpdateDisplay("800x600/r,800x600"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_SMALL, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(1, observer.GetUpdateWallpaperCountAndReset()); |
- UpdateDisplay("1366x800/r"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(WallpaperManager::WALLPAPER_RESOLUTION_LARGE, |
- WallpaperManager::Get()->GetAppropriateResolution()); |
- EXPECT_EQ(1, observer.GetUpdateWallpaperCountAndReset()); |
- |
- // Max display size didn't chagne. |
- UpdateDisplay("900x800/r,400x1366"); |
- // Wait for asynchronous DisplayBackgroundController::UpdateDisplay() call. |
- base::RunLoop().RunUntilIdle(); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_EQ(0, observer.GetUpdateWallpaperCountAndReset()); |
-} |
- |
-// Test that WallpaperManager loads the appropriate wallpaper |
-// images as specified via command-line flags in various situations. |
-// Splitting these into separate tests avoids needing to run animations. |
-// TODO(derat): Combine these into a single test |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, SmallDefaultWallpaper) { |
- if (!ash::test::AshTestHelper::SupportsMultipleDisplays()) |
- return; |
- |
- CreateCmdlineWallpapers(); |
- |
- // At 800x600, the small wallpaper should be loaded. |
- UpdateDisplay("800x600"); |
- WallpaperManager::Get()->SetDefaultWallpaperNow(std::string()); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( |
- controller_->GetWallpaper(), |
- wallpaper_manager_test_utils::kSmallDefaultWallpaperColor)); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, LargeDefaultWallpaper) { |
- if (!ash::test::AshTestHelper::SupportsMultipleDisplays()) |
- return; |
- |
- CreateCmdlineWallpapers(); |
- UpdateDisplay("1600x1200"); |
- WallpaperManager::Get()->SetDefaultWallpaperNow(std::string()); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( |
- controller_->GetWallpaper(), |
- wallpaper_manager_test_utils::kLargeDefaultWallpaperColor)); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- LargeDefaultWallpaperWhenRotated) { |
- if (!ash::test::AshTestHelper::SupportsMultipleDisplays()) |
- return; |
- CreateCmdlineWallpapers(); |
- |
- UpdateDisplay("1200x800/r"); |
- WallpaperManager::Get()->SetDefaultWallpaperNow(std::string()); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( |
- controller_->GetWallpaper(), |
- wallpaper_manager_test_utils::kLargeDefaultWallpaperColor)); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, SmallGuestWallpaper) { |
- if (!ash::test::AshTestHelper::SupportsMultipleDisplays()) |
- return; |
- CreateCmdlineWallpapers(); |
- UserManager::Get()->UserLoggedIn( |
- UserManager::kGuestUserName, UserManager::kGuestUserName, false); |
- UpdateDisplay("800x600"); |
- WallpaperManager::Get()->SetDefaultWallpaperNow(std::string()); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( |
- controller_->GetWallpaper(), |
- wallpaper_manager_test_utils::kSmallGuestWallpaperColor)); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, LargeGuestWallpaper) { |
- if (!ash::test::AshTestHelper::SupportsMultipleDisplays()) |
- return; |
- |
- CreateCmdlineWallpapers(); |
- UserManager::Get()->UserLoggedIn( |
- UserManager::kGuestUserName, UserManager::kGuestUserName, false); |
- UpdateDisplay("1600x1200"); |
- WallpaperManager::Get()->SetDefaultWallpaperNow(std::string()); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( |
- controller_->GetWallpaper(), |
- wallpaper_manager_test_utils::kLargeGuestWallpaperColor)); |
-} |
- |
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, |
- SwitchBetweenDefaultAndCustom) { |
- // Start loading the default wallpaper. |
- UpdateDisplay("640x480"); |
- CreateCmdlineWallpapers(); |
- UserManager::Get()->UserLoggedIn(UserManager::kStubUser, "test_hash", false); |
- |
- WallpaperManager::Get()->SetDefaultWallpaperNow(std::string()); |
- |
- // Custom wallpaper should be applied immediately, canceling the default |
- // wallpaper load task. |
- gfx::ImageSkia image = wallpaper_manager_test_utils::CreateTestImage( |
- 640, 480, wallpaper_manager_test_utils::kCustomWallpaperColor); |
- WallpaperManager::Get()->SetCustomWallpaper(UserManager::kStubUser, |
- "test_hash", |
- "test-nofile.jpeg", |
- WALLPAPER_LAYOUT_STRETCH, |
- User::CUSTOMIZED, |
- image, |
- true); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- |
- EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( |
- controller_->GetWallpaper(), |
- wallpaper_manager_test_utils::kCustomWallpaperColor)); |
- |
- WallpaperManager::Get()->SetDefaultWallpaperNow(std::string()); |
- wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); |
- |
- EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( |
- controller_->GetWallpaper(), |
- wallpaper_manager_test_utils::kSmallDefaultWallpaperColor)); |
-} |
- |
-} // namespace chromeos |