blob: 531d70742a297b38dd0b90a86deb9881bb373f85 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/services/app_service/public/cpp/app.h"
namespace apps {
App::App(AppType app_type, const std::string& app_id)
: app_type(app_type), app_id(app_id) {}
App::~App() = default;
bool App::operator==(const App& other) const {
if (this->app_id != other.app_id || this->app_type != other.app_type ||
this->readiness != other.readiness ||
this->install_reason != other.install_reason ||
this->install_source != other.install_source ||
this->window_mode != other.window_mode) {
return false;
}
if (this->name != other.name) {
return false;
}
if (this->short_name != other.short_name) {
return false;
}
if (this->publisher_id != other.publisher_id) {
return false;
}
if (this->installer_package_id != other.installer_package_id) {
return false;
}
if (this->description != other.description) {
return false;
}
if (this->version != other.version) {
return false;
}
if (this->icon_key != other.icon_key) {
return false;
}
if (this->last_launch_time != other.last_launch_time) {
return false;
}
if (this->install_time != other.install_time) {
return false;
}
if (this->is_platform_app != other.is_platform_app) {
return false;
}
if (this->recommendable != other.recommendable) {
return false;
}
if (this->searchable != other.searchable) {
return false;
}
if (this->show_in_launcher != other.show_in_launcher) {
return false;
}
if (this->show_in_shelf != other.show_in_shelf) {
return false;
}
if (this->show_in_search != other.show_in_search) {
return false;
}
if (this->show_in_management != other.show_in_management) {
return false;
}
if (this->handles_intents != other.handles_intents) {
return false;
}
if (this->allow_uninstall != other.allow_uninstall) {
return false;
}
if (this->has_badge != other.has_badge) {
return false;
}
if (this->paused != other.paused) {
return false;
}
if (this->resize_locked != other.resize_locked) {
return false;
}
if (this->run_on_os_login != other.run_on_os_login) {
return false;
}
if (this->allow_close != other.allow_close) {
return false;
}
if (this->allow_window_mode_selection != other.allow_window_mode_selection) {
return false;
}
if (this->app_size_in_bytes != other.app_size_in_bytes) {
return false;
}
if (this->data_size_in_bytes != other.data_size_in_bytes) {
return false;
}
IS_VECTOR_VALUE_EQUAL(additional_search_terms);
IS_VECTOR_VALUE_EQUAL(policy_ids);
if (!IsEqual(this->permissions, other.permissions)) {
return false;
}
if (!IsEqual(this->intent_filters, other.intent_filters)) {
return false;
}
IS_VECTOR_VALUE_EQUAL(supported_locales);
if (this->selected_locale != other.selected_locale) {
return false;
}
if (this->extra != other.extra) {
return false;
}
return true;
}
AppPtr App::Clone() const {
auto app = std::make_unique<App>(app_type, app_id);
app->readiness = readiness;
app->name = name;
app->short_name = short_name;
app->publisher_id = publisher_id;
app->description = description;
app->version = version;
app->additional_search_terms = additional_search_terms;
if (icon_key.has_value()) {
app->icon_key = std::move(*icon_key->Clone());
}
app->last_launch_time = last_launch_time;
app->install_time = install_time;
app->permissions = ClonePermissions(permissions);
app->install_reason = install_reason;
app->install_source = install_source;
app->policy_ids = policy_ids;
app->installer_package_id = installer_package_id;
app->is_platform_app = is_platform_app;
app->recommendable = recommendable;
app->searchable = searchable;
app->show_in_launcher = show_in_launcher;
app->show_in_shelf = show_in_shelf;
app->show_in_search = show_in_search;
app->show_in_management = show_in_management;
app->handles_intents = handles_intents;
app->allow_uninstall = allow_uninstall;
app->has_badge = has_badge;
app->paused = paused;
app->intent_filters = CloneIntentFilters(intent_filters);
app->resize_locked = resize_locked;
app->window_mode = window_mode;
app->allow_window_mode_selection = allow_window_mode_selection;
if (run_on_os_login.has_value()) {
app->run_on_os_login = apps::RunOnOsLogin(run_on_os_login->login_mode,
run_on_os_login->is_managed);
}
app->allow_close = allow_close;
app->app_size_in_bytes = app_size_in_bytes;
app->data_size_in_bytes = data_size_in_bytes;
app->supported_locales = supported_locales;
app->selected_locale = selected_locale;
if (extra.has_value()) {
app->extra = extra->Clone();
}
return app;
}
bool IsEqual(const std::vector<AppPtr>& source,
const std::vector<AppPtr>& target) {
if (source.size() != target.size()) {
return false;
}
for (size_t i = 0; i < source.size(); i++) {
if (*source[i] != *target[i]) {
return false;
}
}
return true;
}
} // namespace apps