blob: 4557cad5739472ace60ddaf2bfd3100ae6dabe07 [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.
#ifndef COMPONENTS_ARC_TEST_FAKE_APP_INSTANCE_H_
#define COMPONENTS_ARC_TEST_FAKE_APP_INSTANCE_H_
#include <map>
#include <memory>
#include <string>
#include <vector>
#include "base/macros.h"
#include "components/arc/common/app.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
namespace arc {
class FakeAppInstance : public mojom::AppInstance {
public:
class Request {
public:
Request(const std::string& package_name, const std::string& activity)
: package_name_(package_name), activity_(activity) {}
~Request() {}
const std::string& package_name() const { return package_name_; }
const std::string& activity() const { return activity_; }
bool IsForApp(const mojom::AppInfo& app_info) const {
return package_name_ == app_info.package_name &&
activity_ == app_info.activity;
}
private:
std::string package_name_;
std::string activity_;
DISALLOW_COPY_AND_ASSIGN(Request);
};
class IconRequest : public Request {
public:
IconRequest(const std::string& package_name,
const std::string& activity,
mojom::ScaleFactor scale_factor)
: Request(package_name, activity),
scale_factor_(static_cast<int>(scale_factor)) {}
~IconRequest() {}
int scale_factor() const { return scale_factor_; }
private:
int scale_factor_;
DISALLOW_COPY_AND_ASSIGN(IconRequest);
};
class ShortcutIconRequest {
public:
ShortcutIconRequest(const std::string& icon_resource_id,
mojom::ScaleFactor scale_factor)
: icon_resource_id_(icon_resource_id),
scale_factor_(static_cast<int>(scale_factor)) {}
~ShortcutIconRequest() {}
const std::string& icon_resource_id() const { return icon_resource_id_; }
int scale_factor() const { return scale_factor_; }
private:
std::string icon_resource_id_;
int scale_factor_;
DISALLOW_COPY_AND_ASSIGN(ShortcutIconRequest);
};
explicit FakeAppInstance(mojom::AppHost* app_host);
~FakeAppInstance() override;
// mojom::AppInstance overrides:
void Init(mojom::AppHostPtr host_ptr) override {}
void RefreshAppList() override;
void LaunchApp(const std::string& package_name,
const std::string& activity,
const base::Optional<gfx::Rect>& dimension) override;
void RequestAppIcon(const std::string& package_name,
const std::string& activity,
mojom::ScaleFactor scale_factor) override;
void LaunchIntent(
const std::string& intent_uri,
const base::Optional<gfx::Rect>& dimension_on_screen) override;
void RequestIcon(const std::string& icon_resource_id,
mojom::ScaleFactor scale_factor,
const RequestIconCallback& callback) override;
void RemoveCachedIcon(const std::string& icon_resource_id) override;
void CanHandleResolution(
const std::string& package_name,
const std::string& activity,
const gfx::Rect& dimension,
const CanHandleResolutionCallback& callback) override;
void UninstallPackage(const std::string& package_name) override;
void GetTaskInfo(int32_t task_id,
const GetTaskInfoCallback& callback) override;
void SetTaskActive(int32_t task_id) override;
void CloseTask(int32_t task_id) override;
void ShowPackageInfoDeprecated(const std::string& package_name,
const gfx::Rect& dimension_on_screen) override;
void ShowPackageInfoOnPage(const std::string& package_name,
mojom::ShowPackageInfoPage page,
const gfx::Rect& dimension_on_screen) override;
void SetNotificationsEnabled(const std::string& package_name,
bool enabled) override;
void InstallPackage(mojom::ArcPackageInfoPtr arcPackageInfo) override;
// Methods to reply messages.
void SendRefreshAppList(const std::vector<mojom::AppInfo>& apps);
void SendAppAdded(const mojom::AppInfo& app);
void SendPackageAppListRefreshed(const std::string& package_name,
const std::vector<mojom::AppInfo>& apps);
void SendTaskCreated(int32_t taskId,
const mojom::AppInfo& app,
const std::string& intent);
void SendTaskDestroyed(int32_t taskId);
bool GenerateAndSendIcon(const mojom::AppInfo& app,
mojom::ScaleFactor scale_factor,
std::string* png_data_as_string);
void SendInstallShortcut(const mojom::ShortcutInfo& shortcuts);
void SendInstallShortcuts(const std::vector<mojom::ShortcutInfo>& shortcuts);
void SetTaskInfo(int32_t task_id,
const std::string& package_name,
const std::string& activity);
void SendRefreshPackageList(
const std::vector<mojom::ArcPackageInfo>& packages);
void SendPackageAdded(const mojom::ArcPackageInfo& package);
void SendPackageUninstalled(const std::string& pacakge_name);
void SendInstallationStarted(const std::string& package_name);
void SendInstallationFinished(const std::string& package_name,
bool success);
int refresh_app_list_count() const { return refresh_app_list_count_; }
const std::vector<std::unique_ptr<Request>>& launch_requests() const {
return launch_requests_;
}
const std::vector<std::string>& launch_intents() const {
return launch_intents_;
}
const std::vector<std::unique_ptr<IconRequest>>& icon_requests() const {
return icon_requests_;
}
const std::vector<std::unique_ptr<ShortcutIconRequest>>&
shortcut_icon_requests() const {
return shortcut_icon_requests_;
}
private:
using TaskIdToInfo = std::map<int32_t, std::unique_ptr<Request>>;
// Mojo endpoints.
mojom::AppHost* app_host_;
// Number of RefreshAppList calls.
int refresh_app_list_count_ = 0;
// Keeps information about launch requests.
std::vector<std::unique_ptr<Request>> launch_requests_;
// Keeps information about launch intents.
std::vector<std::string> launch_intents_;
// Keeps information about icon load requests.
std::vector<std::unique_ptr<IconRequest>> icon_requests_;
// Keeps information about shortcut icon load requests.
std::vector<std::unique_ptr<ShortcutIconRequest>> shortcut_icon_requests_;
// Keeps information for running tasks.
TaskIdToInfo task_id_to_info_;
bool GetFakeIcon(mojom::ScaleFactor scale_factor,
std::string* png_data_as_string);
DISALLOW_COPY_AND_ASSIGN(FakeAppInstance);
};
} // namespace arc
#endif // COMPONENTS_ARC_TEST_FAKE_APP_INSTANCE_H_