blob: 0b3ecbf3db0c739e9e40e3c10ba004605fd10782 [file] [log] [blame]
// Copyright 2015 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 "components/arc/test/fake_app_instance.h"
#include <stdint.h>
#include <string>
#include <utility>
#include <vector>
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/memory/ptr_util.h"
#include "base/path_service.h"
#include "base/run_loop.h"
namespace mojo {
template <>
struct TypeConverter<arc::mojom::AppInfoPtr, arc::mojom::AppInfo> {
static arc::mojom::AppInfoPtr Convert(const arc::mojom::AppInfo& app_info) {
return app_info.Clone();
}
};
template <>
struct TypeConverter<arc::mojom::ArcPackageInfoPtr,
arc::mojom::ArcPackageInfo> {
static arc::mojom::ArcPackageInfoPtr Convert(
const arc::mojom::ArcPackageInfo& package_info) {
return package_info.Clone();
}
};
} // namespace mojo
namespace arc {
FakeAppInstance::FakeAppInstance(mojom::AppHost* app_host)
: app_host_(app_host) {}
FakeAppInstance::~FakeAppInstance() {}
void FakeAppInstance::RefreshAppList() {
++refresh_app_list_count_;
}
void FakeAppInstance::LaunchApp(const std::string& package_name,
const std::string& activity,
const base::Optional<gfx::Rect>& dimension) {
launch_requests_.push_back(base::MakeUnique<Request>(package_name, activity));
}
void FakeAppInstance::RequestAppIcon(const std::string& package_name,
const std::string& activity,
mojom::ScaleFactor scale_factor) {
icon_requests_.push_back(
base::MakeUnique<IconRequest>(package_name, activity, scale_factor));
}
void FakeAppInstance::SendRefreshAppList(
const std::vector<mojom::AppInfo>& apps) {
std::vector<mojom::AppInfoPtr> v;
for (const auto& app : apps)
v.emplace_back(app.Clone());
app_host_->OnAppListRefreshed(std::move(v));
}
void FakeAppInstance::SendPackageAppListRefreshed(
const std::string& package_name,
const std::vector<mojom::AppInfo>& apps) {
std::vector<mojom::AppInfoPtr> v;
for (const auto& app : apps)
v.emplace_back(app.Clone());
app_host_->OnPackageAppListRefreshed(package_name, std::move(v));
}
void FakeAppInstance::SendInstallShortcuts(
const std::vector<mojom::ShortcutInfo>& shortcuts) {
for (auto& shortcut : shortcuts)
SendInstallShortcut(shortcut);
}
void FakeAppInstance::SendInstallShortcut(const mojom::ShortcutInfo& shortcut) {
app_host_->OnInstallShortcut(shortcut.Clone());
}
void FakeAppInstance::SendUninstallShortcut(const std::string& package_name,
const std::string& intent_uri) {
app_host_->OnUninstallShortcut(package_name, intent_uri);
}
void FakeAppInstance::SendAppAdded(const mojom::AppInfo& app) {
app_host_->OnAppAddedDeprecated(mojom::AppInfo::From(app));
}
void FakeAppInstance::SendTaskCreated(int32_t taskId,
const mojom::AppInfo& app,
const std::string& intent) {
app_host_->OnTaskCreated(taskId,
app.package_name,
app.activity,
app.name,
intent);
}
void FakeAppInstance::SendTaskDescription(
int32_t taskId,
const std::string& label,
const std::string& icon_png_data_as_string) {
app_host_->OnTaskDescriptionUpdated(
taskId, label,
std::vector<uint8_t>(icon_png_data_as_string.begin(),
icon_png_data_as_string.end()));
}
void FakeAppInstance::SendTaskDestroyed(int32_t taskId) {
app_host_->OnTaskDestroyed(taskId);
}
bool FakeAppInstance::GenerateAndSendIcon(const mojom::AppInfo& app,
mojom::ScaleFactor scale_factor,
std::string* png_data_as_string) {
if (!GetFakeIcon(scale_factor, png_data_as_string)) {
return false;
}
app_host_->OnAppIcon(app.package_name, app.activity, scale_factor,
std::vector<uint8_t>(png_data_as_string->begin(),
png_data_as_string->end()));
return true;
}
void FakeAppInstance::GenerateAndSendBadIcon(const mojom::AppInfo& app,
mojom::ScaleFactor scale_factor) {
std::vector<uint8_t> badIcon(10, 1);
app_host_->OnAppIcon(app.package_name, app.activity, scale_factor, badIcon);
}
bool FakeAppInstance::GetFakeIcon(mojom::ScaleFactor scale_factor,
std::string* png_data_as_string) {
CHECK(png_data_as_string != nullptr);
std::string icon_file_name;
switch (scale_factor) {
case mojom::ScaleFactor::SCALE_FACTOR_100P:
icon_file_name = "icon_100p.png";
break;
case mojom::ScaleFactor::SCALE_FACTOR_125P:
icon_file_name = "icon_125p.png";
break;
case mojom::ScaleFactor::SCALE_FACTOR_133P:
icon_file_name = "icon_133p.png";
break;
case mojom::ScaleFactor::SCALE_FACTOR_140P:
icon_file_name = "icon_140p.png";
break;
case mojom::ScaleFactor::SCALE_FACTOR_150P:
icon_file_name = "icon_150p.png";
break;
case mojom::ScaleFactor::SCALE_FACTOR_180P:
icon_file_name = "icon_180p.png";
break;
case mojom::ScaleFactor::SCALE_FACTOR_200P:
icon_file_name = "icon_200p.png";
break;
case mojom::ScaleFactor::SCALE_FACTOR_250P:
icon_file_name = "icon_250p.png";
break;
case mojom::ScaleFactor::SCALE_FACTOR_300P:
icon_file_name = "icon_300p.png";
break;
default:
NOTREACHED();
return false;
}
base::FilePath base_path;
CHECK(PathService::Get(base::DIR_SOURCE_ROOT, &base_path));
base::FilePath icon_file_path = base_path.AppendASCII("components")
.AppendASCII("test")
.AppendASCII("data")
.AppendASCII("arc")
.AppendASCII(icon_file_name);
CHECK(base::PathExists(icon_file_path));
CHECK(base::ReadFileToString(icon_file_path, png_data_as_string));
return true;
}
void FakeAppInstance::SetTaskInfo(int32_t task_id,
const std::string& package_name,
const std::string& activity) {
task_id_to_info_[task_id].reset(new Request(package_name, activity));
}
void FakeAppInstance::SendRefreshPackageList(
const std::vector<mojom::ArcPackageInfo>& packages) {
std::vector<mojom::ArcPackageInfoPtr> v;
for (const auto& package : packages)
v.emplace_back(package.Clone());
app_host_->OnPackageListRefreshed(std::move(v));
}
void FakeAppInstance::SendPackageAdded(const mojom::ArcPackageInfo& package) {
app_host_->OnPackageAdded(mojom::ArcPackageInfoPtr(package.Clone()));
}
void FakeAppInstance::SendPackageUninstalled(const std::string& package_name) {
app_host_->OnPackageRemoved(package_name);
}
void FakeAppInstance::SendInstallationStarted(const std::string& package_name) {
app_host_->OnInstallationStarted(package_name);
}
void FakeAppInstance::SendInstallationFinished(const std::string& package_name,
bool success) {
mojom::InstallationResult result;
result.package_name = package_name;
result.success = success;
app_host_->OnInstallationFinished(
mojom::InstallationResultPtr(result.Clone()));
}
void FakeAppInstance::CanHandleResolution(
const std::string& package_name,
const std::string& activity,
const gfx::Rect& dimension,
const CanHandleResolutionCallback& callback) {
callback.Run(true);
}
void FakeAppInstance::UninstallPackage(const std::string& package_name) {
app_host_->OnPackageRemoved(package_name);
}
void FakeAppInstance::GetTaskInfo(int32_t task_id,
const GetTaskInfoCallback& callback) {
TaskIdToInfo::const_iterator it = task_id_to_info_.find(task_id);
if (it != task_id_to_info_.end())
callback.Run(it->second->package_name(), it->second->activity());
else
callback.Run(std::string(), std::string());
}
void FakeAppInstance::SetTaskActive(int32_t task_id) {
}
void FakeAppInstance::CloseTask(int32_t task_id) {
}
void FakeAppInstance::ShowPackageInfoDeprecated(
const std::string& package_name,
const gfx::Rect& dimension_on_screen) {}
void FakeAppInstance::ShowPackageInfoOnPage(
const std::string& package_name,
mojom::ShowPackageInfoPage page,
const gfx::Rect& dimension_on_screen) {}
void FakeAppInstance::SetNotificationsEnabled(const std::string& package_name,
bool enabled) {}
void FakeAppInstance::InstallPackage(mojom::ArcPackageInfoPtr arcPackageInfo) {
app_host_->OnPackageAdded(std::move(arcPackageInfo));
}
void FakeAppInstance::LaunchIntent(
const std::string& intent_uri,
const base::Optional<gfx::Rect>& dimension_on_screen) {
launch_intents_.push_back(intent_uri);
}
void FakeAppInstance::RequestIcon(const std::string& icon_resource_id,
arc::mojom::ScaleFactor scale_factor,
const RequestIconCallback& callback) {
shortcut_icon_requests_.push_back(
base::MakeUnique<ShortcutIconRequest>(icon_resource_id, scale_factor));
std::string png_data_as_string;
if (GetFakeIcon(scale_factor, &png_data_as_string)) {
callback.Run(std::vector<uint8_t>(png_data_as_string.begin(),
png_data_as_string.end()));
}
}
void FakeAppInstance::RemoveCachedIcon(const std::string& icon_resource_id) {}
} // namespace arc