app_service_types_mojom_traits.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef CHROMEOS_CROSAPI_MOJOM_APP_SERVICE_TYPES_MOJOM_TRAITS_H_
  5. #define CHROMEOS_CROSAPI_MOJOM_APP_SERVICE_TYPES_MOJOM_TRAITS_H_
  6. #include <string>
  7. #include "chromeos/crosapi/mojom/app_service_types.mojom.h"
  8. #include "components/services/app_service/public/cpp/app_launch_util.h"
  9. #include "components/services/app_service/public/cpp/app_types.h"
  10. #include "components/services/app_service/public/cpp/icon_types.h"
  11. #include "components/services/app_service/public/cpp/intent_filter.h"
  12. #include "components/services/app_service/public/cpp/permission.h"
  13. #include "components/services/app_service/public/cpp/preferred_app.h"
  14. #include "components/services/app_service/public/mojom/types.mojom.h"
  15. #include "third_party/abseil-cpp/absl/types/optional.h"
  16. #include "third_party/abseil-cpp/absl/types/variant.h"
  17. namespace mojo {
  18. template <>
  19. struct StructTraits<crosapi::mojom::AppDataView, apps::AppPtr> {
  20. static apps::AppType app_type(const apps::AppPtr& r) { return r->app_type; }
  21. static const std::string& app_id(const apps::AppPtr& r) { return r->app_id; }
  22. static apps::Readiness readiness(const apps::AppPtr& r) {
  23. return r->readiness;
  24. }
  25. static const absl::optional<std::string>& name(const apps::AppPtr& r) {
  26. return r->name;
  27. }
  28. static const absl::optional<std::string>& short_name(const apps::AppPtr& r) {
  29. return r->short_name;
  30. }
  31. static const absl::optional<std::string>& publisher_id(
  32. const apps::AppPtr& r) {
  33. return r->publisher_id;
  34. }
  35. static const absl::optional<std::string>& description(const apps::AppPtr& r) {
  36. return r->description;
  37. }
  38. static const absl::optional<std::string>& version(const apps::AppPtr& r) {
  39. return r->version;
  40. }
  41. static const std::vector<std::string>& additional_search_terms(
  42. const apps::AppPtr& r) {
  43. return r->additional_search_terms;
  44. }
  45. static apps::IconKeyPtr icon_key(const apps::AppPtr& r);
  46. static const absl::optional<base::Time>& last_launch_time(
  47. const apps::AppPtr& r) {
  48. return r->last_launch_time;
  49. }
  50. static const absl::optional<base::Time>& install_time(const apps::AppPtr& r) {
  51. return r->install_time;
  52. }
  53. static const apps::InstallReason& install_reason(const apps::AppPtr& r) {
  54. return r->install_reason;
  55. }
  56. static const absl::optional<std::string>& policy_id(const apps::AppPtr& r) {
  57. return r->policy_id;
  58. }
  59. static crosapi::mojom::OptionalBool recommendable(const apps::AppPtr& r);
  60. static crosapi::mojom::OptionalBool searchable(const apps::AppPtr& r);
  61. static crosapi::mojom::OptionalBool show_in_launcher(const apps::AppPtr& r);
  62. static crosapi::mojom::OptionalBool show_in_shelf(const apps::AppPtr& r);
  63. static crosapi::mojom::OptionalBool show_in_search(const apps::AppPtr& r);
  64. static crosapi::mojom::OptionalBool show_in_management(const apps::AppPtr& r);
  65. static crosapi::mojom::OptionalBool has_badge(const apps::AppPtr& r);
  66. static crosapi::mojom::OptionalBool paused(const apps::AppPtr& r);
  67. static const apps::IntentFilters& intent_filters(const apps::AppPtr& r) {
  68. return r->intent_filters;
  69. }
  70. static const apps::WindowMode& window_mode(const apps::AppPtr& r) {
  71. return r->window_mode;
  72. }
  73. static const apps::Permissions& permissions(const apps::AppPtr& r) {
  74. return r->permissions;
  75. }
  76. static crosapi::mojom::OptionalBool allow_uninstall(const apps::AppPtr& r);
  77. static crosapi::mojom::OptionalBool handles_intents(const apps::AppPtr& r);
  78. static const apps::Shortcuts& shortcuts(const apps::AppPtr& r) {
  79. return r->shortcuts;
  80. }
  81. static crosapi::mojom::OptionalBool is_platform_app(const apps::AppPtr& r);
  82. static bool Read(crosapi::mojom::AppDataView data, apps::AppPtr* out);
  83. };
  84. template <>
  85. struct EnumTraits<crosapi::mojom::AppType, apps::AppType> {
  86. static crosapi::mojom::AppType ToMojom(apps::AppType input);
  87. static bool FromMojom(crosapi::mojom::AppType input, apps::AppType* output);
  88. };
  89. template <>
  90. struct EnumTraits<crosapi::mojom::Readiness, apps::Readiness> {
  91. static crosapi::mojom::Readiness ToMojom(apps::Readiness input);
  92. static bool FromMojom(crosapi::mojom::Readiness input,
  93. apps::Readiness* output);
  94. };
  95. template <>
  96. struct StructTraits<crosapi::mojom::IconKeyDataView, apps::IconKeyPtr> {
  97. static bool IsNull(const apps::IconKeyPtr& r) { return !r; }
  98. static void SetToNull(apps::IconKeyPtr* r) { r->reset(); }
  99. static uint64_t timeline(const apps::IconKeyPtr& r) { return r->timeline; }
  100. static uint32_t icon_effects(const apps::IconKeyPtr& r) {
  101. return r->icon_effects;
  102. }
  103. static bool Read(crosapi::mojom::IconKeyDataView, apps::IconKeyPtr* out);
  104. };
  105. template <>
  106. struct EnumTraits<crosapi::mojom::InstallReason, apps::InstallReason> {
  107. static crosapi::mojom::InstallReason ToMojom(apps::InstallReason input);
  108. static bool FromMojom(crosapi::mojom::InstallReason input,
  109. apps::InstallReason* output);
  110. };
  111. template <>
  112. struct EnumTraits<crosapi::mojom::OptionalBool, apps::mojom::OptionalBool> {
  113. static crosapi::mojom::OptionalBool ToMojom(apps::mojom::OptionalBool input);
  114. static bool FromMojom(crosapi::mojom::OptionalBool input,
  115. apps::mojom::OptionalBool* output);
  116. };
  117. template <>
  118. struct StructTraits<crosapi::mojom::IntentFilterDataView,
  119. apps::IntentFilterPtr> {
  120. static const std::vector<apps::ConditionPtr>& conditions(
  121. const apps::IntentFilterPtr& r) {
  122. return r->conditions;
  123. }
  124. static const absl::optional<std::string>& activity_name(
  125. const apps::IntentFilterPtr& r) {
  126. return r->activity_name;
  127. }
  128. static const absl::optional<std::string>& activity_label(
  129. const apps::IntentFilterPtr& r) {
  130. return r->activity_label;
  131. }
  132. static bool Read(crosapi::mojom::IntentFilterDataView,
  133. apps::IntentFilterPtr* out);
  134. };
  135. template <>
  136. struct StructTraits<crosapi::mojom::ConditionDataView, apps::ConditionPtr> {
  137. static const apps::ConditionType& condition_type(
  138. const apps::ConditionPtr& r) {
  139. return r->condition_type;
  140. }
  141. static const apps::ConditionValues& condition_values(
  142. const apps::ConditionPtr& r) {
  143. return r->condition_values;
  144. }
  145. static bool Read(crosapi::mojom::ConditionDataView, apps::ConditionPtr* out);
  146. };
  147. template <>
  148. struct EnumTraits<crosapi::mojom::ConditionType, apps::ConditionType> {
  149. static crosapi::mojom::ConditionType ToMojom(apps::ConditionType input);
  150. static bool FromMojom(crosapi::mojom::ConditionType input,
  151. apps::ConditionType* output);
  152. };
  153. template <>
  154. struct StructTraits<crosapi::mojom::ConditionValueDataView,
  155. apps::ConditionValuePtr> {
  156. static const std::string& value(const apps::ConditionValuePtr& r) {
  157. return r->value;
  158. }
  159. static const apps::PatternMatchType& match_type(
  160. const apps::ConditionValuePtr& r) {
  161. return r->match_type;
  162. }
  163. static bool Read(crosapi::mojom::ConditionValueDataView,
  164. apps::ConditionValuePtr* out);
  165. };
  166. template <>
  167. struct EnumTraits<crosapi::mojom::PatternMatchType, apps::PatternMatchType> {
  168. static crosapi::mojom::PatternMatchType ToMojom(apps::PatternMatchType input);
  169. static bool FromMojom(crosapi::mojom::PatternMatchType input,
  170. apps::PatternMatchType* output);
  171. };
  172. template <>
  173. struct EnumTraits<crosapi::mojom::UninstallSource, apps::UninstallSource> {
  174. static crosapi::mojom::UninstallSource ToMojom(apps::UninstallSource input);
  175. static bool FromMojom(crosapi::mojom::UninstallSource input,
  176. apps::UninstallSource* output);
  177. };
  178. template <>
  179. struct StructTraits<crosapi::mojom::CapabilityAccessDataView,
  180. apps::mojom::CapabilityAccessPtr> {
  181. static const std::string& app_id(const apps::mojom::CapabilityAccessPtr& r) {
  182. return r->app_id;
  183. }
  184. static const apps::mojom::OptionalBool& camera(
  185. const apps::mojom::CapabilityAccessPtr& r) {
  186. return r->camera;
  187. }
  188. static const apps::mojom::OptionalBool& microphone(
  189. const apps::mojom::CapabilityAccessPtr& r) {
  190. return r->microphone;
  191. }
  192. static bool Read(crosapi::mojom::CapabilityAccessDataView,
  193. apps::mojom::CapabilityAccessPtr* out);
  194. };
  195. template <>
  196. struct EnumTraits<crosapi::mojom::IconType, apps::IconType> {
  197. static crosapi::mojom::IconType ToMojom(apps::IconType input);
  198. static bool FromMojom(crosapi::mojom::IconType input, apps::IconType* output);
  199. };
  200. template <>
  201. struct StructTraits<crosapi::mojom::IconValueDataView, apps::IconValuePtr> {
  202. static apps::IconType icon_type(const apps::IconValuePtr& r) {
  203. return r->icon_type;
  204. }
  205. static const gfx::ImageSkia& uncompressed(const apps::IconValuePtr& r) {
  206. return r->uncompressed;
  207. }
  208. static const std::vector<uint8_t>& compressed(const apps::IconValuePtr& r) {
  209. return r->compressed;
  210. }
  211. static bool is_placeholder_icon(const apps::IconValuePtr& r) {
  212. return r->is_placeholder_icon;
  213. }
  214. static bool Read(crosapi::mojom::IconValueDataView, apps::IconValuePtr* out);
  215. };
  216. template <>
  217. struct EnumTraits<crosapi::mojom::WindowMode, apps::WindowMode> {
  218. static crosapi::mojom::WindowMode ToMojom(apps::WindowMode input);
  219. static bool FromMojom(crosapi::mojom::WindowMode input,
  220. apps::WindowMode* output);
  221. };
  222. template <>
  223. struct EnumTraits<crosapi::mojom::LaunchSource, apps::LaunchSource> {
  224. static crosapi::mojom::LaunchSource ToMojom(apps::LaunchSource input);
  225. static bool FromMojom(crosapi::mojom::LaunchSource input,
  226. apps::LaunchSource* output);
  227. };
  228. template <>
  229. struct StructTraits<crosapi::mojom::PermissionDataView, apps::PermissionPtr> {
  230. static apps::PermissionType permission_type(const apps::PermissionPtr& r) {
  231. return r->permission_type;
  232. }
  233. static const apps::PermissionValuePtr& value(const apps::PermissionPtr& r) {
  234. return r->value;
  235. }
  236. static bool is_managed(const apps::PermissionPtr& r) { return r->is_managed; }
  237. static bool Read(crosapi::mojom::PermissionDataView,
  238. apps::PermissionPtr* out);
  239. };
  240. template <>
  241. struct EnumTraits<crosapi::mojom::PermissionType, apps::PermissionType> {
  242. static crosapi::mojom::PermissionType ToMojom(apps::PermissionType input);
  243. static bool FromMojom(crosapi::mojom::PermissionType input,
  244. apps::PermissionType* output);
  245. };
  246. template <>
  247. struct EnumTraits<crosapi::mojom::TriState, apps::TriState> {
  248. static crosapi::mojom::TriState ToMojom(apps::TriState input);
  249. static bool FromMojom(crosapi::mojom::TriState input, apps::TriState* output);
  250. };
  251. template <>
  252. struct UnionTraits<crosapi::mojom::PermissionValueDataView,
  253. apps::PermissionValuePtr> {
  254. static crosapi::mojom::PermissionValueDataView::Tag GetTag(
  255. const apps::PermissionValuePtr& r);
  256. static bool IsNull(const apps::PermissionValuePtr& r) {
  257. return !absl::holds_alternative<bool>(r->value) &&
  258. !absl::holds_alternative<apps::TriState>(r->value);
  259. }
  260. static void SetToNull(apps::PermissionValuePtr* out) {}
  261. static bool bool_value(const apps::PermissionValuePtr& r) {
  262. if (absl::holds_alternative<bool>(r->value)) {
  263. return absl::get<bool>(r->value);
  264. }
  265. return false;
  266. }
  267. static apps::TriState tristate_value(const apps::PermissionValuePtr& r) {
  268. if (absl::holds_alternative<apps::TriState>(r->value)) {
  269. return absl::get<apps::TriState>(r->value);
  270. }
  271. return apps::TriState::kBlock;
  272. }
  273. static bool Read(crosapi::mojom::PermissionValueDataView data,
  274. apps::PermissionValuePtr* out);
  275. };
  276. template <>
  277. struct StructTraits<crosapi::mojom::PreferredAppDataView,
  278. apps::PreferredAppPtr> {
  279. static apps::IntentFilterPtr intent_filter(const apps::PreferredAppPtr& r) {
  280. return r->intent_filter->Clone();
  281. }
  282. static const std::string& app_id(const apps::PreferredAppPtr& r) {
  283. return r->app_id;
  284. }
  285. static bool Read(crosapi::mojom::PreferredAppDataView,
  286. apps::PreferredAppPtr* out);
  287. };
  288. template <>
  289. struct StructTraits<crosapi::mojom::PreferredAppChangesDataView,
  290. apps::PreferredAppChangesPtr> {
  291. static base::flat_map<std::string, apps::IntentFilters> added_filters(
  292. const apps::PreferredAppChangesPtr& r) {
  293. return apps::CloneIntentFiltersMap(r->added_filters);
  294. }
  295. static base::flat_map<std::string, apps::IntentFilters> removed_filters(
  296. const apps::PreferredAppChangesPtr& r) {
  297. return apps::CloneIntentFiltersMap(r->removed_filters);
  298. }
  299. static bool Read(crosapi::mojom::PreferredAppChangesDataView,
  300. apps::PreferredAppChangesPtr* out);
  301. };
  302. template <>
  303. struct StructTraits<crosapi::mojom::ShortcutDataView, apps::ShortcutPtr> {
  304. static const std::string& shortcut_id(const apps::ShortcutPtr& r) {
  305. return r->shortcut_id;
  306. }
  307. static const std::string& name(const apps::ShortcutPtr& r) { return r->name; }
  308. static uint8_t position(const apps::ShortcutPtr& r) { return r->position; }
  309. static bool Read(crosapi::mojom::ShortcutDataView data,
  310. apps::ShortcutPtr* out);
  311. };
  312. } // namespace mojo
  313. #endif // CHROMEOS_CROSAPI_MOJOM_APP_SERVICE_TYPES_MOJOM_TRAITS_H_