blob: 9108e255faa663206ef4289d5119d3c80483e184 [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/ash/test_wallpaper_controller.h"
#include <optional>
#include <string>
#include "ash/public/cpp/wallpaper/online_wallpaper_params.h"
#include "ash/public/cpp/wallpaper/wallpaper_controller_observer.h"
#include "ash/public/cpp/wallpaper/wallpaper_drivefs_delegate.h"
#include "ash/public/cpp/wallpaper/wallpaper_info.h"
#include "ash/public/cpp/wallpaper/wallpaper_types.h"
#include "ash/wallpaper/wallpaper_drag_drop_delegate.h"
#include "ash/webui/common/mojom/sea_pen.mojom.h"
#include "base/containers/adapters.h"
#include "base/ranges/algorithm.h"
#include "base/strings/string_number_conversions.h"
#include "base/task/sequenced_task_runner.h"
#include "components/account_id/account_id.h"
#include "components/user_manager/user_type.h"
#include "test_wallpaper_controller.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_skia.h"
TestWallpaperController::TestWallpaperController() : id_cache_(0) {
ClearCounts();
}
TestWallpaperController::~TestWallpaperController() = default;
void TestWallpaperController::ShowWallpaperImage(const gfx::ImageSkia& image) {
current_wallpaper = image;
for (auto& observer : observers_)
observer.OnWallpaperChanged();
}
void TestWallpaperController::ClearCounts() {
set_online_wallpaper_count_ = 0;
set_google_photos_wallpaper_count_ = 0;
show_override_wallpaper_count_[/*always_on_top=*/false] = 0;
show_override_wallpaper_count_[/*always_on_top=*/true] = 0;
remove_override_wallpaper_count_ = 0;
remove_user_wallpaper_count_ = 0;
wallpaper_info_ = std::nullopt;
update_current_wallpaper_layout_count_ = 0;
update_current_wallpaper_layout_layout_ = std::nullopt;
update_daily_refresh_wallpaper_count_ = 0;
one_shot_wallpaper_count_ = 0;
sea_pen_wallpaper_count_ = 0;
}
void TestWallpaperController::SetClient(
ash::WallpaperControllerClient* client) {
was_client_set_ = true;
}
ash::WallpaperDragDropDelegate* TestWallpaperController::GetDragDropDelegate() {
return nullptr;
}
void TestWallpaperController::SetDragDropDelegate(
std::unique_ptr<ash::WallpaperDragDropDelegate> delegate) {
NOTIMPLEMENTED_LOG_ONCE();
}
void TestWallpaperController::SetDriveFsDelegate(
std::unique_ptr<ash::WallpaperDriveFsDelegate> drivefs_delegate) {
NOTIMPLEMENTED_LOG_ONCE();
}
void TestWallpaperController::Init(
const base::FilePath& user_data,
const base::FilePath& wallpapers,
const base::FilePath& custom_wallpapers,
const base::FilePath& device_policy_wallpaper) {
NOTIMPLEMENTED();
}
bool TestWallpaperController::CanSetUserWallpaper(
const AccountId& account_id) const {
return can_set_user_wallpaper_;
}
void TestWallpaperController::SetCustomWallpaper(
const AccountId& account_id,
const base::FilePath& file_path,
ash::WallpaperLayout layout,
bool preview_mode,
SetWallpaperCallback callback) {
++set_custom_wallpaper_count_;
std::move(callback).Run(true);
}
void TestWallpaperController::SetDecodedCustomWallpaper(
const AccountId& account_id,
const std::string& file_name,
ash::WallpaperLayout layout,
bool preview_mode,
SetWallpaperCallback callback,
const std::string& file_path,
const gfx::ImageSkia& image) {
++set_custom_wallpaper_count_;
}
void TestWallpaperController::SetOnlineWallpaper(
const ash::OnlineWallpaperParams& params,
SetWallpaperCallback callback) {
++set_online_wallpaper_count_;
CHECK(!params.variants.empty());
wallpaper_info_ = ash::WallpaperInfo(params, params.variants.front());
std::move(callback).Run(/*success=*/true);
}
void TestWallpaperController::ShowOobeWallpaper() {
++set_oobe_wallpaper_count_;
}
void TestWallpaperController::SetGooglePhotosWallpaper(
const ash::GooglePhotosWallpaperParams& params,
SetWallpaperCallback callback) {
++set_google_photos_wallpaper_count_;
wallpaper_info_ = ash::WallpaperInfo(params);
std::move(callback).Run(/*success=*/true);
}
void TestWallpaperController::SetGooglePhotosDailyRefreshAlbumId(
const AccountId& account_id,
const std::string& album_id) {
if (!wallpaper_info_)
wallpaper_info_ = ash::WallpaperInfo();
wallpaper_info_->type = ash::WallpaperType::kDailyGooglePhotos;
wallpaper_info_->collection_id = album_id;
}
std::string TestWallpaperController::GetGooglePhotosDailyRefreshAlbumId(
const AccountId& account_id) const {
if (!wallpaper_info_.has_value() ||
wallpaper_info_->type != ash::WallpaperType::kDailyGooglePhotos) {
return std::string();
}
return wallpaper_info_->collection_id;
}
bool TestWallpaperController::SetDailyGooglePhotosWallpaperIdCache(
const AccountId& account_id,
const DailyGooglePhotosIdCache& ids) {
id_cache_.ShrinkToSize(0);
base::ranges::for_each(base::Reversed(ids),
[&](uint id) { id_cache_.Put(std::move(id)); });
return true;
}
bool TestWallpaperController::GetDailyGooglePhotosWallpaperIdCache(
const AccountId& account_id,
DailyGooglePhotosIdCache& ids_out) const {
base::ranges::for_each(base::Reversed(id_cache_),
[&](uint id) { ids_out.Put(std::move(id)); });
return true;
}
void TestWallpaperController::SetTimeOfDayWallpaper(
const AccountId& account_id,
SetWallpaperCallback callback) {
++set_default_time_of_day_wallpaper_count_;
std::move(callback).Run(/*success=*/true);
}
void TestWallpaperController::SetDefaultWallpaper(
const AccountId& account_id,
bool show_wallpaper,
SetWallpaperCallback callback) {
++set_default_wallpaper_count_;
std::move(callback).Run(/*success=*/true);
}
base::FilePath TestWallpaperController::GetDefaultWallpaperPath(
user_manager::UserType) {
return base::FilePath();
}
void TestWallpaperController::SetCustomizedDefaultWallpaperPaths(
const base::FilePath& customized_default_small_path,
const base::FilePath& customized_default_large_path) {
NOTIMPLEMENTED();
}
void TestWallpaperController::SetPolicyWallpaper(
const AccountId& account_id,
user_manager::UserType user_type,
const std::string& data) {
NOTIMPLEMENTED();
}
void TestWallpaperController::SetDevicePolicyWallpaperPath(
const base::FilePath& device_policy_wallpaper_path) {
NOTIMPLEMENTED();
}
void TestWallpaperController::SetCurrentUser(const AccountId& account_id) {
current_account_id = account_id;
}
bool TestWallpaperController::SetThirdPartyWallpaper(
const AccountId& account_id,
const std::string& file_name,
ash::WallpaperLayout layout,
const gfx::ImageSkia& image) {
if (current_account_id != account_id) {
return false;
}
ShowWallpaperImage(image);
++third_party_wallpaper_count_;
return true;
}
void TestWallpaperController::SetSeaPenWallpaper(
const AccountId& account_id,
const uint32_t image_id,
SetWallpaperCallback callback) {
++sea_pen_wallpaper_count_;
wallpaper_info_ = ash::WallpaperInfo();
wallpaper_info_->type = ash::WallpaperType::kSeaPen;
wallpaper_info_->location = base::NumberToString(image_id);
std::move(callback).Run(/*success=*/true);
}
void TestWallpaperController::ConfirmPreviewWallpaper() {
NOTIMPLEMENTED();
}
void TestWallpaperController::CancelPreviewWallpaper() {
NOTIMPLEMENTED();
}
void TestWallpaperController::UpdateCurrentWallpaperLayout(
const AccountId& account_id,
ash::WallpaperLayout layout) {
++update_current_wallpaper_layout_count_;
update_current_wallpaper_layout_layout_ = layout;
}
void TestWallpaperController::ShowUserWallpaper(const AccountId& account_id) {
NOTIMPLEMENTED();
}
void TestWallpaperController::ShowUserWallpaper(
const AccountId& account_id,
user_manager::UserType user_type) {
NOTIMPLEMENTED();
}
void TestWallpaperController::ShowSigninWallpaper() {
NOTIMPLEMENTED();
}
void TestWallpaperController::ShowOneShotWallpaper(
const gfx::ImageSkia& image) {
++one_shot_wallpaper_count_;
ShowWallpaperImage(image);
}
void TestWallpaperController::ShowOverrideWallpaper(
const base::FilePath& image_path,
bool always_on_top) {
++show_override_wallpaper_count_[always_on_top];
}
void TestWallpaperController::RemoveOverrideWallpaper() {
++remove_override_wallpaper_count_;
}
void TestWallpaperController::RemoveUserWallpaper(
const AccountId& account_id,
base::OnceClosure on_removed) {
++remove_user_wallpaper_count_;
}
void TestWallpaperController::RemovePolicyWallpaper(
const AccountId& account_id) {
NOTIMPLEMENTED();
}
void TestWallpaperController::SetAnimationDuration(
base::TimeDelta animation_duration) {
NOTIMPLEMENTED();
}
void TestWallpaperController::OpenWallpaperPickerIfAllowed() {
NOTIMPLEMENTED();
}
void TestWallpaperController::MinimizeInactiveWindows(
const std::string& user_id_hash) {
NOTIMPLEMENTED();
}
void TestWallpaperController::RestoreMinimizedWindows(
const std::string& user_id_hash) {
NOTIMPLEMENTED();
}
void TestWallpaperController::AddObserver(
ash::WallpaperControllerObserver* observer) {
observers_.AddObserver(observer);
}
void TestWallpaperController::RemoveObserver(
ash::WallpaperControllerObserver* observer) {
observers_.RemoveObserver(observer);
}
gfx::ImageSkia TestWallpaperController::GetWallpaperImage() {
return current_wallpaper;
}
void TestWallpaperController::LoadPreviewImage(
LoadPreviewImageCallback callback) {
current_wallpaper.MakeThreadSafe();
std::move(callback).Run(gfx::Image(current_wallpaper).As1xPNGBytes());
}
bool TestWallpaperController::IsWallpaperBlurredForLockState() const {
NOTIMPLEMENTED();
return false;
}
bool TestWallpaperController::IsActiveUserWallpaperControlledByPolicy() {
NOTIMPLEMENTED();
return false;
}
bool TestWallpaperController::IsWallpaperControlledByPolicy(
const AccountId& account_id) const {
NOTIMPLEMENTED_LOG_ONCE();
return false;
}
std::optional<ash::WallpaperInfo>
TestWallpaperController::GetActiveUserWallpaperInfo() const {
return wallpaper_info_;
}
bool TestWallpaperController::ShouldShowWallpaperSetting() {
NOTIMPLEMENTED();
return false;
}
void TestWallpaperController::SetDailyRefreshCollectionId(
const AccountId& account_id,
const std::string& collection_id) {
if (!wallpaper_info_)
wallpaper_info_ = ash::WallpaperInfo();
wallpaper_info_->type = ash::WallpaperType::kDaily;
wallpaper_info_->collection_id = collection_id;
}
std::string TestWallpaperController::GetDailyRefreshCollectionId(
const AccountId& account_id) const {
if (!wallpaper_info_.has_value() ||
wallpaper_info_->type != ash::WallpaperType::kDaily) {
return std::string();
}
return wallpaper_info_->collection_id;
}
void TestWallpaperController::UpdateDailyRefreshWallpaper(
RefreshWallpaperCallback callback) {
update_daily_refresh_wallpaper_count_++;
base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), /*success=*/true));
}
void TestWallpaperController::SyncLocalAndRemotePrefs(
const AccountId& account_id) {
NOTIMPLEMENTED();
}