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

Unified Diff: chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc

Issue 286933002: [cros login] Split login related classes into subfolders. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix includes in new tests Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698