#ifndef ASH_PUBLIC_CPP_DESK_TEMPLATE_H_
#define ASH_PUBLIC_CPP_DESK_TEMPLATE_H_
#include <optional>
#include <string>
#include "ash/public/cpp/ash_public_export.h"
#include "base/time/time.h"
#include "base/uuid.h"
#include "base/values.h"
#include "chromeos/ash/services/coral/public/mojom/coral_service.mojom.h"
#include "components/app_restore/restore_data.h"
#include "components/sync_device_info/device_info.h"
namespace aura {
class Window;
}
namespace ash {
enum class ASH_PUBLIC_EXPORT DeskTemplateSource {
kUnknownSource = 0,
kUser,
kPolicy
};
enum class ASH_PUBLIC_EXPORT DeskTemplateType {
kTemplate = 0,
kSaveAndRecall,
kCoral,
kFloatingWorkspace,
kUnknown,
};
class ASH_PUBLIC_EXPORT DeskTemplate {
public:
DeskTemplate(base::Uuid uuid,
DeskTemplateSource source,
const std::string& name,
const base::Time created_time,
DeskTemplateType type);
DeskTemplate(base::Uuid uuid,
DeskTemplateSource source,
const std::string& name,
const base::Time created_time,
DeskTemplateType type,
bool should_launch_on_startup,
base::Value policy);
DeskTemplate(const DeskTemplate&) = delete;
DeskTemplate& operator=(const DeskTemplate&) = delete;
~DeskTemplate();
static bool IsAppTypeSupported(aura::Window* window);
static constexpr char kIncognitoWindowIdentifier[] = "incognito_window";
const base::Uuid& uuid() const { return uuid_; }
void set_uuid(base::Uuid uuid) { uuid_ = std::move(uuid); }
DeskTemplateSource source() const { return source_; }
base::Time created_time() const { return created_time_; }
void set_updated_time(base::Time updated_time) {
updated_time_ = updated_time;
}
void clear_updated_time() { updated_time_ = base::Time(); }
const std::u16string& template_name() const { return template_name_; }
void set_template_name(const std::u16string& template_name) {
template_name_ = template_name;
}
DeskTemplateType type() const { return type_; }
const ::app_restore::RestoreData* desk_restore_data() const {
return desk_restore_data_.get();
}
::app_restore::RestoreData* mutable_desk_restore_data() {
return desk_restore_data_.get();
}
void set_desk_restore_data(
std::unique_ptr<::app_restore::RestoreData> restore_data) {
desk_restore_data_ = std::move(restore_data);
}
void set_client_cache_guid(std::string client_cache_guid) {
client_cache_guid_ = client_cache_guid;
}
const std::string& client_cache_guid() const { return client_cache_guid_; }
const syncer::DeviceInfo::FormFactor& device_form_factor() const {
return device_form_factor_;
}
void set_device_form_factor(
const syncer::DeviceInfo::FormFactor& device_form_factor) {
device_form_factor_ = device_form_factor;
}
void set_lacros_profile_id(uint64_t lacros_profile_id) {
lacros_profile_id_ = lacros_profile_id;
}
uint64_t lacros_profile_id() const { return lacros_profile_id_; }
std::unique_ptr<DeskTemplate> Clone() const;
base::Time GetLastUpdatedTime() const {
return updated_time_.is_null() ? created_time_ : updated_time_;
}
bool WasUpdatedSinceCreation() const { return !updated_time_.is_null(); }
bool IsModifiable() const { return source_ == DeskTemplateSource::kUser; }
bool should_launch_on_startup() const { return should_launch_on_startup_; }
void SetDeskUuid(base::Uuid desk_uuid);
const base::Value& policy_definition() const { return policy_definition_; }
void set_coral_tab_app_entities(
std::vector<coral::mojom::EntityPtr> coral_tab_app_entities) {
coral_tab_app_entities_ = std::move(coral_tab_app_entities);
}
const std::vector<coral::mojom::EntityPtr>& coral_tab_app_entities() const {
return coral_tab_app_entities_;
}
std::string ToString() const;
std::string ToDebugString() const;
private:
std::string GetDeskTemplateInfo(bool for_debugging) const;
base::Uuid uuid_;
const DeskTemplateSource source_;
const DeskTemplateType type_;
const base::Time created_time_;
base::Time updated_time_;
std::u16string template_name_;
bool should_launch_on_startup_ = false;
std::string client_cache_guid_;
syncer::DeviceInfo::FormFactor device_form_factor_;
uint64_t lacros_profile_id_ = 0;
std::unique_ptr<::app_restore::RestoreData> desk_restore_data_;
base::Value policy_definition_;
std::vector<coral::mojom::EntityPtr> coral_tab_app_entities_;
};
}
#endif