app_service_types_mojom_traits.cc 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199
  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. #include "chromeos/crosapi/mojom/app_service_types_mojom_traits.h"
  5. #include <string>
  6. #include <utility>
  7. #include "base/strings/string_util.h"
  8. #include "base/time/time.h"
  9. #include "third_party/abseil-cpp/absl/types/variant.h"
  10. namespace {
  11. crosapi::mojom::OptionalBool ConvertOptionalBoolToMojomOptionalBool(
  12. const absl::optional<bool>& option_bool) {
  13. if (!option_bool.has_value())
  14. return crosapi::mojom::OptionalBool::kUnknown;
  15. return option_bool.value() ? crosapi::mojom::OptionalBool::kTrue
  16. : crosapi::mojom::OptionalBool::kFalse;
  17. }
  18. absl::optional<bool> ConvertMojomOptionalBoolToOptionalBool(
  19. const crosapi::mojom::OptionalBool& mojom_option_bool) {
  20. switch (mojom_option_bool) {
  21. case crosapi::mojom::OptionalBool::kUnknown:
  22. return absl::nullopt;
  23. case crosapi::mojom::OptionalBool::kTrue:
  24. return true;
  25. case crosapi::mojom::OptionalBool::kFalse:
  26. return false;
  27. }
  28. }
  29. } // namespace
  30. namespace mojo {
  31. apps::IconKeyPtr StructTraits<crosapi::mojom::AppDataView,
  32. apps::AppPtr>::icon_key(const apps::AppPtr& r) {
  33. return r->icon_key.has_value()
  34. ? std::make_unique<apps::IconKey>(r->icon_key.value().timeline,
  35. r->icon_key.value().resource_id,
  36. r->icon_key.value().icon_effects)
  37. : nullptr;
  38. }
  39. // static
  40. crosapi::mojom::OptionalBool
  41. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::recommendable(
  42. const apps::AppPtr& r) {
  43. return ConvertOptionalBoolToMojomOptionalBool(r->recommendable);
  44. }
  45. // static
  46. crosapi::mojom::OptionalBool
  47. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::searchable(
  48. const apps::AppPtr& r) {
  49. return ConvertOptionalBoolToMojomOptionalBool(r->searchable);
  50. }
  51. // static
  52. crosapi::mojom::OptionalBool
  53. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::show_in_launcher(
  54. const apps::AppPtr& r) {
  55. return ConvertOptionalBoolToMojomOptionalBool(r->show_in_launcher);
  56. }
  57. // static
  58. crosapi::mojom::OptionalBool
  59. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::show_in_shelf(
  60. const apps::AppPtr& r) {
  61. return ConvertOptionalBoolToMojomOptionalBool(r->show_in_shelf);
  62. }
  63. // static
  64. crosapi::mojom::OptionalBool
  65. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::show_in_search(
  66. const apps::AppPtr& r) {
  67. return ConvertOptionalBoolToMojomOptionalBool(r->show_in_search);
  68. }
  69. // static
  70. crosapi::mojom::OptionalBool
  71. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::show_in_management(
  72. const apps::AppPtr& r) {
  73. return ConvertOptionalBoolToMojomOptionalBool(r->show_in_management);
  74. }
  75. // static
  76. crosapi::mojom::OptionalBool
  77. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::has_badge(
  78. const apps::AppPtr& r) {
  79. return ConvertOptionalBoolToMojomOptionalBool(r->has_badge);
  80. }
  81. // static
  82. crosapi::mojom::OptionalBool
  83. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::paused(
  84. const apps::AppPtr& r) {
  85. return ConvertOptionalBoolToMojomOptionalBool(r->paused);
  86. }
  87. // static
  88. crosapi::mojom::OptionalBool
  89. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::allow_uninstall(
  90. const apps::AppPtr& r) {
  91. return ConvertOptionalBoolToMojomOptionalBool(r->allow_uninstall);
  92. }
  93. // static
  94. crosapi::mojom::OptionalBool
  95. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::handles_intents(
  96. const apps::AppPtr& r) {
  97. return ConvertOptionalBoolToMojomOptionalBool(r->handles_intents);
  98. }
  99. // static
  100. crosapi::mojom::OptionalBool
  101. StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::is_platform_app(
  102. const apps::AppPtr& r) {
  103. return ConvertOptionalBoolToMojomOptionalBool(r->is_platform_app);
  104. }
  105. bool StructTraits<crosapi::mojom::AppDataView, apps::AppPtr>::Read(
  106. crosapi::mojom::AppDataView data,
  107. apps::AppPtr* out) {
  108. apps::AppType app_type;
  109. if (!data.ReadAppType(&app_type))
  110. return false;
  111. std::string app_id;
  112. if (!data.ReadAppId(&app_id))
  113. return false;
  114. apps::Readiness readiness;
  115. if (!data.ReadReadiness(&readiness))
  116. return false;
  117. absl::optional<std::string> name;
  118. if (!data.ReadName(&name))
  119. return false;
  120. absl::optional<std::string> short_name;
  121. if (!data.ReadShortName(&short_name))
  122. return false;
  123. absl::optional<std::string> publisher_id;
  124. if (!data.ReadPublisherId(&publisher_id))
  125. return false;
  126. absl::optional<std::string> description;
  127. if (!data.ReadDescription(&description))
  128. return false;
  129. absl::optional<std::string> version;
  130. if (!data.ReadVersion(&version))
  131. return false;
  132. std::vector<std::string> additional_search_terms;
  133. if (!data.ReadAdditionalSearchTerms(&additional_search_terms))
  134. return false;
  135. apps::IconKeyPtr icon_key;
  136. if (!data.ReadIconKey(&icon_key))
  137. return false;
  138. absl::optional<base::Time> last_launch_time;
  139. if (!data.ReadLastLaunchTime(&last_launch_time))
  140. return false;
  141. absl::optional<base::Time> install_time;
  142. if (!data.ReadInstallTime(&install_time))
  143. return false;
  144. apps::InstallReason install_reason;
  145. if (!data.ReadInstallReason(&install_reason))
  146. return false;
  147. absl::optional<std::string> policy_id;
  148. if (!data.ReadPolicyId(&policy_id))
  149. return false;
  150. crosapi::mojom::OptionalBool recommendable;
  151. if (!data.ReadRecommendable(&recommendable))
  152. return false;
  153. crosapi::mojom::OptionalBool searchable;
  154. if (!data.ReadSearchable(&searchable))
  155. return false;
  156. crosapi::mojom::OptionalBool show_in_launcher;
  157. if (!data.ReadShowInLauncher(&show_in_launcher))
  158. return false;
  159. crosapi::mojom::OptionalBool show_in_shelf;
  160. if (!data.ReadShowInShelf(&show_in_shelf))
  161. return false;
  162. crosapi::mojom::OptionalBool show_in_search;
  163. if (!data.ReadShowInSearch(&show_in_search))
  164. return false;
  165. crosapi::mojom::OptionalBool show_in_management;
  166. if (!data.ReadShowInManagement(&show_in_management))
  167. return false;
  168. crosapi::mojom::OptionalBool has_badge;
  169. if (!data.ReadHasBadge(&has_badge))
  170. return false;
  171. crosapi::mojom::OptionalBool paused;
  172. if (!data.ReadPaused(&paused))
  173. return false;
  174. apps::IntentFilters intent_filters;
  175. if (!data.ReadIntentFilters(&intent_filters))
  176. return false;
  177. apps::WindowMode window_mode;
  178. if (!data.ReadWindowMode(&window_mode))
  179. return false;
  180. apps::Permissions permissions;
  181. if (!data.ReadPermissions(&permissions))
  182. return false;
  183. crosapi::mojom::OptionalBool allow_uninstall;
  184. if (!data.ReadAllowUninstall(&allow_uninstall))
  185. return false;
  186. crosapi::mojom::OptionalBool handles_intents;
  187. if (!data.ReadHandlesIntents(&handles_intents))
  188. return false;
  189. apps::Shortcuts shortcuts;
  190. if (!data.ReadShortcuts(&shortcuts))
  191. return false;
  192. crosapi::mojom::OptionalBool is_platform_app;
  193. if (!data.ReadIsPlatformApp(&is_platform_app))
  194. return false;
  195. auto app = std::make_unique<apps::App>(app_type, app_id);
  196. app->readiness = readiness;
  197. app->name = name;
  198. app->short_name = short_name;
  199. app->publisher_id = publisher_id;
  200. app->description = description;
  201. app->version = version;
  202. app->additional_search_terms = additional_search_terms;
  203. if (icon_key)
  204. app->icon_key = std::move(*icon_key);
  205. app->last_launch_time = last_launch_time;
  206. app->install_time = install_time;
  207. app->install_reason = install_reason;
  208. app->policy_id = policy_id;
  209. app->recommendable = ConvertMojomOptionalBoolToOptionalBool(recommendable);
  210. app->searchable = ConvertMojomOptionalBoolToOptionalBool(searchable);
  211. app->show_in_launcher =
  212. ConvertMojomOptionalBoolToOptionalBool(show_in_launcher);
  213. app->show_in_shelf = ConvertMojomOptionalBoolToOptionalBool(show_in_shelf);
  214. app->show_in_search = ConvertMojomOptionalBoolToOptionalBool(show_in_search);
  215. app->show_in_management =
  216. ConvertMojomOptionalBoolToOptionalBool(show_in_management);
  217. app->has_badge = ConvertMojomOptionalBoolToOptionalBool(has_badge);
  218. app->paused = ConvertMojomOptionalBoolToOptionalBool(paused);
  219. app->intent_filters = std::move(intent_filters);
  220. app->window_mode = window_mode;
  221. app->permissions = std::move(permissions);
  222. app->allow_uninstall =
  223. ConvertMojomOptionalBoolToOptionalBool(allow_uninstall);
  224. app->handles_intents =
  225. ConvertMojomOptionalBoolToOptionalBool(handles_intents);
  226. app->shortcuts = std::move(shortcuts);
  227. app->is_platform_app =
  228. ConvertMojomOptionalBoolToOptionalBool(is_platform_app);
  229. *out = std::move(app);
  230. return true;
  231. }
  232. crosapi::mojom::AppType
  233. EnumTraits<crosapi::mojom::AppType, apps::AppType>::ToMojom(
  234. apps::AppType input) {
  235. switch (input) {
  236. case apps::AppType::kUnknown:
  237. return crosapi::mojom::AppType::kUnknown;
  238. case apps::AppType::kArc:
  239. return crosapi::mojom::AppType::kArc;
  240. case apps::AppType::kWeb:
  241. return crosapi::mojom::AppType::kWeb;
  242. case apps::AppType::kSystemWeb:
  243. return crosapi::mojom::AppType::kSystemWeb;
  244. case apps::AppType::kStandaloneBrowserChromeApp:
  245. return crosapi::mojom::AppType::kStandaloneBrowserChromeApp;
  246. case apps::AppType::kStandaloneBrowserExtension:
  247. return crosapi::mojom::AppType::kStandaloneBrowserExtension;
  248. case apps::AppType::kBuiltIn:
  249. case apps::AppType::kCrostini:
  250. case apps::AppType::kChromeApp:
  251. case apps::AppType::kExtension:
  252. case apps::AppType::kMacOs:
  253. case apps::AppType::kPluginVm:
  254. case apps::AppType::kStandaloneBrowser:
  255. case apps::AppType::kRemote:
  256. case apps::AppType::kBorealis:
  257. NOTREACHED();
  258. return crosapi::mojom::AppType::kUnknown;
  259. }
  260. }
  261. bool EnumTraits<crosapi::mojom::AppType, apps::AppType>::FromMojom(
  262. crosapi::mojom::AppType input,
  263. apps::AppType* output) {
  264. switch (input) {
  265. case crosapi::mojom::AppType::kUnknown:
  266. *output = apps::AppType::kUnknown;
  267. return true;
  268. case crosapi::mojom::AppType::kArc:
  269. *output = apps::AppType::kArc;
  270. return true;
  271. case crosapi::mojom::AppType::kWeb:
  272. *output = apps::AppType::kWeb;
  273. return true;
  274. case crosapi::mojom::AppType::kSystemWeb:
  275. *output = apps::AppType::kSystemWeb;
  276. return true;
  277. case crosapi::mojom::AppType::kStandaloneBrowserChromeApp:
  278. *output = apps::AppType::kStandaloneBrowserChromeApp;
  279. return true;
  280. case crosapi::mojom::AppType::kStandaloneBrowserExtension:
  281. *output = apps::AppType::kStandaloneBrowserExtension;
  282. return true;
  283. }
  284. NOTREACHED();
  285. return false;
  286. }
  287. crosapi::mojom::Readiness
  288. EnumTraits<crosapi::mojom::Readiness, apps::Readiness>::ToMojom(
  289. apps::Readiness input) {
  290. switch (input) {
  291. case apps::Readiness::kUnknown:
  292. return crosapi::mojom::Readiness::kUnknown;
  293. case apps::Readiness::kReady:
  294. return crosapi::mojom::Readiness::kReady;
  295. case apps::Readiness::kDisabledByBlocklist:
  296. return crosapi::mojom::Readiness::kDisabledByBlocklist;
  297. case apps::Readiness::kDisabledByPolicy:
  298. return crosapi::mojom::Readiness::kDisabledByPolicy;
  299. case apps::Readiness::kDisabledByUser:
  300. return crosapi::mojom::Readiness::kDisabledByUser;
  301. case apps::Readiness::kTerminated:
  302. return crosapi::mojom::Readiness::kTerminated;
  303. case apps::Readiness::kUninstalledByUser:
  304. return crosapi::mojom::Readiness::kUninstalledByUser;
  305. case apps::Readiness::kRemoved:
  306. return crosapi::mojom::Readiness::kRemoved;
  307. case apps::Readiness::kUninstalledByMigration:
  308. return crosapi::mojom::Readiness::kUninstalledByMigration;
  309. }
  310. NOTREACHED();
  311. }
  312. bool EnumTraits<crosapi::mojom::Readiness, apps::Readiness>::FromMojom(
  313. crosapi::mojom::Readiness input,
  314. apps::Readiness* output) {
  315. switch (input) {
  316. case crosapi::mojom::Readiness::kUnknown:
  317. *output = apps::Readiness::kUnknown;
  318. return true;
  319. case crosapi::mojom::Readiness::kReady:
  320. *output = apps::Readiness::kReady;
  321. return true;
  322. case crosapi::mojom::Readiness::kDisabledByBlocklist:
  323. *output = apps::Readiness::kDisabledByBlocklist;
  324. return true;
  325. case crosapi::mojom::Readiness::kDisabledByPolicy:
  326. *output = apps::Readiness::kDisabledByPolicy;
  327. return true;
  328. case crosapi::mojom::Readiness::kDisabledByUser:
  329. *output = apps::Readiness::kDisabledByUser;
  330. return true;
  331. case crosapi::mojom::Readiness::kTerminated:
  332. *output = apps::Readiness::kTerminated;
  333. return true;
  334. case crosapi::mojom::Readiness::kUninstalledByUser:
  335. *output = apps::Readiness::kUninstalledByUser;
  336. return true;
  337. case crosapi::mojom::Readiness::kRemoved:
  338. *output = apps::Readiness::kRemoved;
  339. return true;
  340. case crosapi::mojom::Readiness::kUninstalledByMigration:
  341. *output = apps::Readiness::kUninstalledByMigration;
  342. return true;
  343. }
  344. NOTREACHED();
  345. return false;
  346. }
  347. bool StructTraits<crosapi::mojom::IconKeyDataView, apps::IconKeyPtr>::Read(
  348. crosapi::mojom::IconKeyDataView data,
  349. apps::IconKeyPtr* out) {
  350. *out = std::make_unique<apps::IconKey>(
  351. data.timeline(), apps::IconKey::kInvalidResourceId, data.icon_effects());
  352. return true;
  353. }
  354. crosapi::mojom::InstallReason
  355. EnumTraits<crosapi::mojom::InstallReason, apps::InstallReason>::ToMojom(
  356. apps::InstallReason input) {
  357. switch (input) {
  358. case apps::InstallReason::kUnknown:
  359. return crosapi::mojom::InstallReason::kUnknown;
  360. case apps::InstallReason::kSystem:
  361. return crosapi::mojom::InstallReason::kSystem;
  362. case apps::InstallReason::kPolicy:
  363. return crosapi::mojom::InstallReason::kPolicy;
  364. case apps::InstallReason::kSubApp:
  365. return crosapi::mojom::InstallReason::kSubApp;
  366. case apps::InstallReason::kOem:
  367. return crosapi::mojom::InstallReason::kOem;
  368. case apps::InstallReason::kDefault:
  369. return crosapi::mojom::InstallReason::kDefault;
  370. case apps::InstallReason::kSync:
  371. return crosapi::mojom::InstallReason::kSync;
  372. case apps::InstallReason::kUser:
  373. return crosapi::mojom::InstallReason::kUser;
  374. }
  375. NOTREACHED();
  376. }
  377. bool EnumTraits<crosapi::mojom::InstallReason, apps::InstallReason>::FromMojom(
  378. crosapi::mojom::InstallReason input,
  379. apps::InstallReason* output) {
  380. switch (input) {
  381. case crosapi::mojom::InstallReason::kUnknown:
  382. *output = apps::InstallReason::kUnknown;
  383. return true;
  384. case crosapi::mojom::InstallReason::kSystem:
  385. *output = apps::InstallReason::kSystem;
  386. return true;
  387. case crosapi::mojom::InstallReason::kPolicy:
  388. *output = apps::InstallReason::kPolicy;
  389. return true;
  390. case crosapi::mojom::InstallReason::kOem:
  391. *output = apps::InstallReason::kOem;
  392. return true;
  393. case crosapi::mojom::InstallReason::kDefault:
  394. *output = apps::InstallReason::kDefault;
  395. return true;
  396. case crosapi::mojom::InstallReason::kSync:
  397. *output = apps::InstallReason::kSync;
  398. return true;
  399. case crosapi::mojom::InstallReason::kUser:
  400. *output = apps::InstallReason::kUser;
  401. return true;
  402. case crosapi::mojom::InstallReason::kSubApp:
  403. *output = apps::InstallReason::kSubApp;
  404. return true;
  405. }
  406. NOTREACHED();
  407. return false;
  408. }
  409. crosapi::mojom::OptionalBool
  410. EnumTraits<crosapi::mojom::OptionalBool, apps::mojom::OptionalBool>::ToMojom(
  411. apps::mojom::OptionalBool input) {
  412. switch (input) {
  413. case apps::mojom::OptionalBool::kUnknown:
  414. return crosapi::mojom::OptionalBool::kUnknown;
  415. case apps::mojom::OptionalBool::kFalse:
  416. return crosapi::mojom::OptionalBool::kFalse;
  417. case apps::mojom::OptionalBool::kTrue:
  418. return crosapi::mojom::OptionalBool::kTrue;
  419. }
  420. NOTREACHED();
  421. }
  422. bool EnumTraits<crosapi::mojom::OptionalBool, apps::mojom::OptionalBool>::
  423. FromMojom(crosapi::mojom::OptionalBool input,
  424. apps::mojom::OptionalBool* output) {
  425. switch (input) {
  426. case crosapi::mojom::OptionalBool::kUnknown:
  427. *output = apps::mojom::OptionalBool::kUnknown;
  428. return true;
  429. case crosapi::mojom::OptionalBool::kFalse:
  430. *output = apps::mojom::OptionalBool::kFalse;
  431. return true;
  432. case crosapi::mojom::OptionalBool::kTrue:
  433. *output = apps::mojom::OptionalBool::kTrue;
  434. return true;
  435. }
  436. NOTREACHED();
  437. return false;
  438. }
  439. bool StructTraits<crosapi::mojom::IntentFilterDataView, apps::IntentFilterPtr>::
  440. Read(crosapi::mojom::IntentFilterDataView data,
  441. apps::IntentFilterPtr* out) {
  442. auto intent_filter = std::make_unique<apps::IntentFilter>();
  443. apps::Conditions conditions;
  444. if (!data.ReadConditions(&conditions))
  445. return false;
  446. absl::optional<std::string> activity_name;
  447. if (!data.ReadActivityName(&activity_name))
  448. return false;
  449. absl::optional<std::string> activity_label;
  450. if (!data.ReadActivityLabel(&activity_label))
  451. return false;
  452. intent_filter->conditions = std::move(conditions);
  453. intent_filter->activity_name = activity_name;
  454. intent_filter->activity_label = activity_label;
  455. *out = std::move(intent_filter);
  456. return true;
  457. }
  458. bool StructTraits<crosapi::mojom::ConditionDataView, apps::ConditionPtr>::Read(
  459. crosapi::mojom::ConditionDataView data,
  460. apps::ConditionPtr* out) {
  461. apps::ConditionType condition_type;
  462. if (!data.ReadConditionType(&condition_type))
  463. return false;
  464. apps::ConditionValues condition_values;
  465. if (!data.ReadConditionValues(&condition_values))
  466. return false;
  467. *out = std::make_unique<apps::Condition>(condition_type,
  468. std::move(condition_values));
  469. return true;
  470. }
  471. crosapi::mojom::ConditionType
  472. EnumTraits<crosapi::mojom::ConditionType, apps::ConditionType>::ToMojom(
  473. apps::ConditionType input) {
  474. switch (input) {
  475. case apps::ConditionType::kScheme:
  476. return crosapi::mojom::ConditionType::kScheme;
  477. case apps::ConditionType::kHost:
  478. return crosapi::mojom::ConditionType::kHost;
  479. case apps::ConditionType::kPath:
  480. return crosapi::mojom::ConditionType::kPath;
  481. case apps::ConditionType::kAction:
  482. return crosapi::mojom::ConditionType::kAction;
  483. case apps::ConditionType::kMimeType:
  484. return crosapi::mojom::ConditionType::kMimeType;
  485. case apps::ConditionType::kFile:
  486. return crosapi::mojom::ConditionType::kFile;
  487. }
  488. NOTREACHED();
  489. }
  490. bool StructTraits<
  491. crosapi::mojom::ConditionValueDataView,
  492. apps::ConditionValuePtr>::Read(crosapi::mojom::ConditionValueDataView data,
  493. apps::ConditionValuePtr* out) {
  494. std::string value;
  495. if (!data.ReadValue(&value))
  496. return false;
  497. apps::PatternMatchType match_type;
  498. if (!data.ReadMatchType(&match_type))
  499. return false;
  500. *out = std::make_unique<apps::ConditionValue>(value, match_type);
  501. return true;
  502. }
  503. bool EnumTraits<crosapi::mojom::ConditionType, apps::ConditionType>::FromMojom(
  504. crosapi::mojom::ConditionType input,
  505. apps::ConditionType* output) {
  506. switch (input) {
  507. case crosapi::mojom::ConditionType::kScheme:
  508. *output = apps::ConditionType::kScheme;
  509. return true;
  510. case crosapi::mojom::ConditionType::kHost:
  511. *output = apps::ConditionType::kHost;
  512. return true;
  513. case crosapi::mojom::ConditionType::kPath:
  514. *output = apps::ConditionType::kPath;
  515. return true;
  516. case crosapi::mojom::ConditionType::kAction:
  517. *output = apps::ConditionType::kAction;
  518. return true;
  519. case crosapi::mojom::ConditionType::kMimeType:
  520. *output = apps::ConditionType::kMimeType;
  521. return true;
  522. case crosapi::mojom::ConditionType::kFileExtension:
  523. case crosapi::mojom::ConditionType::kFile:
  524. *output = apps::ConditionType::kFile;
  525. return true;
  526. }
  527. NOTREACHED();
  528. return false;
  529. }
  530. crosapi::mojom::PatternMatchType
  531. EnumTraits<crosapi::mojom::PatternMatchType, apps::PatternMatchType>::ToMojom(
  532. apps::PatternMatchType input) {
  533. switch (input) {
  534. case apps::PatternMatchType::kLiteral:
  535. return crosapi::mojom::PatternMatchType::kLiteral;
  536. case apps::PatternMatchType::kPrefix:
  537. return crosapi::mojom::PatternMatchType::kPrefix;
  538. case apps::PatternMatchType::kGlob:
  539. return crosapi::mojom::PatternMatchType::kGlob;
  540. case apps::PatternMatchType::kMimeType:
  541. return crosapi::mojom::PatternMatchType::kMimeType;
  542. case apps::PatternMatchType::kFileExtension:
  543. return crosapi::mojom::PatternMatchType::kFileExtension;
  544. case apps::PatternMatchType::kIsDirectory:
  545. return crosapi::mojom::PatternMatchType::kIsDirectory;
  546. case apps::PatternMatchType::kSuffix:
  547. return crosapi::mojom::PatternMatchType::kSuffix;
  548. }
  549. NOTREACHED();
  550. }
  551. bool EnumTraits<crosapi::mojom::PatternMatchType, apps::PatternMatchType>::
  552. FromMojom(crosapi::mojom::PatternMatchType input,
  553. apps::PatternMatchType* output) {
  554. switch (input) {
  555. case crosapi::mojom::PatternMatchType::kNone:
  556. case crosapi::mojom::PatternMatchType::kLiteral:
  557. *output = apps::PatternMatchType::kLiteral;
  558. return true;
  559. case crosapi::mojom::PatternMatchType::kPrefix:
  560. *output = apps::PatternMatchType::kPrefix;
  561. return true;
  562. case crosapi::mojom::PatternMatchType::kGlob:
  563. *output = apps::PatternMatchType::kGlob;
  564. return true;
  565. case crosapi::mojom::PatternMatchType::kMimeType:
  566. *output = apps::PatternMatchType::kMimeType;
  567. return true;
  568. case crosapi::mojom::PatternMatchType::kFileExtension:
  569. *output = apps::PatternMatchType::kFileExtension;
  570. return true;
  571. case crosapi::mojom::PatternMatchType::kIsDirectory:
  572. *output = apps::PatternMatchType::kIsDirectory;
  573. return true;
  574. case crosapi::mojom::PatternMatchType::kSuffix:
  575. *output = apps::PatternMatchType::kSuffix;
  576. return true;
  577. }
  578. NOTREACHED();
  579. return false;
  580. }
  581. crosapi::mojom::UninstallSource
  582. EnumTraits<crosapi::mojom::UninstallSource, apps::UninstallSource>::ToMojom(
  583. apps::UninstallSource input) {
  584. switch (input) {
  585. case apps::UninstallSource::kUnknown:
  586. return crosapi::mojom::UninstallSource::kUnknown;
  587. case apps::UninstallSource::kAppList:
  588. return crosapi::mojom::UninstallSource::kAppList;
  589. case apps::UninstallSource::kAppManagement:
  590. return crosapi::mojom::UninstallSource::kAppManagement;
  591. case apps::UninstallSource::kShelf:
  592. return crosapi::mojom::UninstallSource::kShelf;
  593. case apps::UninstallSource::kMigration:
  594. return crosapi::mojom::UninstallSource::kMigration;
  595. }
  596. NOTREACHED();
  597. }
  598. bool EnumTraits<crosapi::mojom::UninstallSource, apps::UninstallSource>::
  599. FromMojom(crosapi::mojom::UninstallSource input,
  600. apps::UninstallSource* output) {
  601. switch (input) {
  602. case crosapi::mojom::UninstallSource::kUnknown:
  603. *output = apps::UninstallSource::kUnknown;
  604. return true;
  605. case crosapi::mojom::UninstallSource::kAppList:
  606. *output = apps::UninstallSource::kAppList;
  607. return true;
  608. case crosapi::mojom::UninstallSource::kAppManagement:
  609. *output = apps::UninstallSource::kAppManagement;
  610. return true;
  611. case crosapi::mojom::UninstallSource::kShelf:
  612. *output = apps::UninstallSource::kShelf;
  613. return true;
  614. case crosapi::mojom::UninstallSource::kMigration:
  615. *output = apps::UninstallSource::kMigration;
  616. return true;
  617. }
  618. NOTREACHED();
  619. return false;
  620. }
  621. bool StructTraits<crosapi::mojom::CapabilityAccessDataView,
  622. apps::mojom::CapabilityAccessPtr>::
  623. Read(crosapi::mojom::CapabilityAccessDataView data,
  624. apps::mojom::CapabilityAccessPtr* out) {
  625. std::string app_id;
  626. if (!data.ReadAppId(&app_id))
  627. return false;
  628. apps::mojom::OptionalBool camera;
  629. if (!data.ReadCamera(&camera))
  630. return false;
  631. apps::mojom::OptionalBool microphone;
  632. if (!data.ReadMicrophone(&microphone))
  633. return false;
  634. auto capability_access = apps::mojom::CapabilityAccess::New();
  635. capability_access->app_id = std::move(app_id);
  636. capability_access->camera = std::move(camera);
  637. capability_access->microphone = std::move(microphone);
  638. *out = std::move(capability_access);
  639. return true;
  640. }
  641. crosapi::mojom::IconType
  642. EnumTraits<crosapi::mojom::IconType, apps::IconType>::ToMojom(
  643. apps::IconType input) {
  644. switch (input) {
  645. case apps::IconType::kUnknown:
  646. return crosapi::mojom::IconType::kUnknown;
  647. case apps::IconType::kUncompressed:
  648. return crosapi::mojom::IconType::kUncompressed;
  649. case apps::IconType::kCompressed:
  650. return crosapi::mojom::IconType::kCompressed;
  651. case apps::IconType::kStandard:
  652. return crosapi::mojom::IconType::kStandard;
  653. }
  654. NOTREACHED();
  655. }
  656. bool EnumTraits<crosapi::mojom::IconType, apps::IconType>::FromMojom(
  657. crosapi::mojom::IconType input,
  658. apps::IconType* output) {
  659. switch (input) {
  660. case crosapi::mojom::IconType::kUnknown:
  661. *output = apps::IconType::kUnknown;
  662. return true;
  663. case crosapi::mojom::IconType::kUncompressed:
  664. *output = apps::IconType::kUncompressed;
  665. return true;
  666. case crosapi::mojom::IconType::kCompressed:
  667. *output = apps::IconType::kCompressed;
  668. return true;
  669. case crosapi::mojom::IconType::kStandard:
  670. *output = apps::IconType::kStandard;
  671. return true;
  672. }
  673. NOTREACHED();
  674. return false;
  675. }
  676. bool StructTraits<crosapi::mojom::IconValueDataView, apps::IconValuePtr>::Read(
  677. crosapi::mojom::IconValueDataView data,
  678. apps::IconValuePtr* out) {
  679. apps::IconType icon_type;
  680. if (!data.ReadIconType(&icon_type))
  681. return false;
  682. gfx::ImageSkia uncompressed;
  683. if (!data.ReadUncompressed(&uncompressed))
  684. return false;
  685. std::vector<uint8_t> compressed;
  686. if (!data.ReadCompressed(&compressed))
  687. return false;
  688. auto icon_value = std::make_unique<apps::IconValue>();
  689. icon_value->icon_type = icon_type;
  690. icon_value->uncompressed = std::move(uncompressed);
  691. icon_value->compressed = std::move(compressed);
  692. icon_value->is_placeholder_icon = data.is_placeholder_icon();
  693. *out = std::move(icon_value);
  694. return true;
  695. }
  696. crosapi::mojom::WindowMode
  697. EnumTraits<crosapi::mojom::WindowMode, apps::WindowMode>::ToMojom(
  698. apps::WindowMode input) {
  699. switch (input) {
  700. case apps::WindowMode::kUnknown:
  701. return crosapi::mojom::WindowMode::kUnknown;
  702. case apps::WindowMode::kWindow:
  703. return crosapi::mojom::WindowMode::kWindow;
  704. case apps::WindowMode::kBrowser:
  705. return crosapi::mojom::WindowMode::kBrowser;
  706. case apps::WindowMode::kTabbedWindow:
  707. return crosapi::mojom::WindowMode::kTabbedWindow;
  708. }
  709. NOTREACHED();
  710. }
  711. bool EnumTraits<crosapi::mojom::WindowMode, apps::WindowMode>::FromMojom(
  712. crosapi::mojom::WindowMode input,
  713. apps::WindowMode* output) {
  714. switch (input) {
  715. case crosapi::mojom::WindowMode::kUnknown:
  716. *output = apps::WindowMode::kUnknown;
  717. return true;
  718. case crosapi::mojom::WindowMode::kWindow:
  719. *output = apps::WindowMode::kWindow;
  720. return true;
  721. case crosapi::mojom::WindowMode::kBrowser:
  722. *output = apps::WindowMode::kBrowser;
  723. return true;
  724. case crosapi::mojom::WindowMode::kTabbedWindow:
  725. *output = apps::WindowMode::kTabbedWindow;
  726. return true;
  727. }
  728. NOTREACHED();
  729. return false;
  730. }
  731. crosapi::mojom::LaunchSource
  732. EnumTraits<crosapi::mojom::LaunchSource, apps::LaunchSource>::ToMojom(
  733. apps::LaunchSource input) {
  734. switch (input) {
  735. case apps::LaunchSource::kUnknown:
  736. return crosapi::mojom::LaunchSource::kUnknown;
  737. case apps::LaunchSource::kFromAppListGrid:
  738. return crosapi::mojom::LaunchSource::kFromAppListGrid;
  739. case apps::LaunchSource::kFromAppListGridContextMenu:
  740. return crosapi::mojom::LaunchSource::kFromAppListGridContextMenu;
  741. case apps::LaunchSource::kFromAppListQuery:
  742. return crosapi::mojom::LaunchSource::kFromAppListQuery;
  743. case apps::LaunchSource::kFromAppListQueryContextMenu:
  744. return crosapi::mojom::LaunchSource::kFromAppListQueryContextMenu;
  745. case apps::LaunchSource::kFromAppListRecommendation:
  746. return crosapi::mojom::LaunchSource::kFromAppListRecommendation;
  747. case apps::LaunchSource::kFromParentalControls:
  748. return crosapi::mojom::LaunchSource::kFromParentalControls;
  749. case apps::LaunchSource::kFromShelf:
  750. return crosapi::mojom::LaunchSource::kFromShelf;
  751. case apps::LaunchSource::kFromFileManager:
  752. return crosapi::mojom::LaunchSource::kFromFileManager;
  753. case apps::LaunchSource::kFromLink:
  754. return crosapi::mojom::LaunchSource::kFromLink;
  755. case apps::LaunchSource::kFromOmnibox:
  756. return crosapi::mojom::LaunchSource::kFromOmnibox;
  757. case apps::LaunchSource::kFromChromeInternal:
  758. return crosapi::mojom::LaunchSource::kFromChromeInternal;
  759. case apps::LaunchSource::kFromKeyboard:
  760. return crosapi::mojom::LaunchSource::kFromKeyboard;
  761. case apps::LaunchSource::kFromOtherApp:
  762. return crosapi::mojom::LaunchSource::kFromOtherApp;
  763. case apps::LaunchSource::kFromMenu:
  764. return crosapi::mojom::LaunchSource::kFromMenu;
  765. case apps::LaunchSource::kFromInstalledNotification:
  766. return crosapi::mojom::LaunchSource::kFromInstalledNotification;
  767. case apps::LaunchSource::kFromTest:
  768. return crosapi::mojom::LaunchSource::kFromTest;
  769. case apps::LaunchSource::kFromArc:
  770. return crosapi::mojom::LaunchSource::kFromArc;
  771. case apps::LaunchSource::kFromSharesheet:
  772. return crosapi::mojom::LaunchSource::kFromSharesheet;
  773. case apps::LaunchSource::kFromReleaseNotesNotification:
  774. return crosapi::mojom::LaunchSource::kFromReleaseNotesNotification;
  775. case apps::LaunchSource::kFromFullRestore:
  776. return crosapi::mojom::LaunchSource::kFromFullRestore;
  777. case apps::LaunchSource::kFromSmartTextContextMenu:
  778. return crosapi::mojom::LaunchSource::kFromSmartTextContextMenu;
  779. case apps::LaunchSource::kFromDiscoverTabNotification:
  780. return crosapi::mojom::LaunchSource::kFromDiscoverTabNotification;
  781. case apps::LaunchSource::kFromManagementApi:
  782. return crosapi::mojom::LaunchSource::kFromManagementApi;
  783. case apps::LaunchSource::kFromKiosk:
  784. return crosapi::mojom::LaunchSource::kFromKiosk;
  785. case apps::LaunchSource::kFromNewTabPage:
  786. return crosapi::mojom::LaunchSource::kFromNewTabPage;
  787. case apps::LaunchSource::kFromIntentUrl:
  788. return crosapi::mojom::LaunchSource::kFromIntentUrl;
  789. case apps::LaunchSource::kFromOsLogin:
  790. return crosapi::mojom::LaunchSource::kFromOsLogin;
  791. case apps::LaunchSource::kFromProtocolHandler:
  792. return crosapi::mojom::LaunchSource::kFromProtocolHandler;
  793. case apps::LaunchSource::kFromUrlHandler:
  794. return crosapi::mojom::LaunchSource::kFromUrlHandler;
  795. case apps::LaunchSource::kFromCommandLine:
  796. case apps::LaunchSource::kFromBackgroundMode:
  797. NOTREACHED();
  798. return crosapi::mojom::LaunchSource::kUnknown;
  799. }
  800. NOTREACHED();
  801. }
  802. bool EnumTraits<crosapi::mojom::LaunchSource, apps::LaunchSource>::FromMojom(
  803. crosapi::mojom::LaunchSource input,
  804. apps::LaunchSource* output) {
  805. switch (input) {
  806. case crosapi::mojom::LaunchSource::kUnknown:
  807. *output = apps::LaunchSource::kUnknown;
  808. return true;
  809. case crosapi::mojom::LaunchSource::kFromAppListGrid:
  810. *output = apps::LaunchSource::kFromAppListGrid;
  811. return true;
  812. case crosapi::mojom::LaunchSource::kFromAppListGridContextMenu:
  813. *output = apps::LaunchSource::kFromAppListGridContextMenu;
  814. return true;
  815. case crosapi::mojom::LaunchSource::kFromAppListQuery:
  816. *output = apps::LaunchSource::kFromAppListQuery;
  817. return true;
  818. case crosapi::mojom::LaunchSource::kFromAppListQueryContextMenu:
  819. *output = apps::LaunchSource::kFromAppListQueryContextMenu;
  820. return true;
  821. case crosapi::mojom::LaunchSource::kFromAppListRecommendation:
  822. *output = apps::LaunchSource::kFromAppListRecommendation;
  823. return true;
  824. case crosapi::mojom::LaunchSource::kFromParentalControls:
  825. *output = apps::LaunchSource::kFromParentalControls;
  826. return true;
  827. case crosapi::mojom::LaunchSource::kFromShelf:
  828. *output = apps::LaunchSource::kFromShelf;
  829. return true;
  830. case crosapi::mojom::LaunchSource::kFromFileManager:
  831. *output = apps::LaunchSource::kFromFileManager;
  832. return true;
  833. case crosapi::mojom::LaunchSource::kFromLink:
  834. *output = apps::LaunchSource::kFromLink;
  835. return true;
  836. case crosapi::mojom::LaunchSource::kFromOmnibox:
  837. *output = apps::LaunchSource::kFromOmnibox;
  838. return true;
  839. case crosapi::mojom::LaunchSource::kFromChromeInternal:
  840. *output = apps::LaunchSource::kFromChromeInternal;
  841. return true;
  842. case crosapi::mojom::LaunchSource::kFromKeyboard:
  843. *output = apps::LaunchSource::kFromKeyboard;
  844. return true;
  845. case crosapi::mojom::LaunchSource::kFromOtherApp:
  846. *output = apps::LaunchSource::kFromOtherApp;
  847. return true;
  848. case crosapi::mojom::LaunchSource::kFromMenu:
  849. *output = apps::LaunchSource::kFromMenu;
  850. return true;
  851. case crosapi::mojom::LaunchSource::kFromInstalledNotification:
  852. *output = apps::LaunchSource::kFromInstalledNotification;
  853. return true;
  854. case crosapi::mojom::LaunchSource::kFromTest:
  855. *output = apps::LaunchSource::kFromTest;
  856. return true;
  857. case crosapi::mojom::LaunchSource::kFromArc:
  858. *output = apps::LaunchSource::kFromArc;
  859. return true;
  860. case crosapi::mojom::LaunchSource::kFromSharesheet:
  861. *output = apps::LaunchSource::kFromSharesheet;
  862. return true;
  863. case crosapi::mojom::LaunchSource::kFromReleaseNotesNotification:
  864. *output = apps::LaunchSource::kFromReleaseNotesNotification;
  865. return true;
  866. case crosapi::mojom::LaunchSource::kFromFullRestore:
  867. *output = apps::LaunchSource::kFromFullRestore;
  868. return true;
  869. case crosapi::mojom::LaunchSource::kFromSmartTextContextMenu:
  870. *output = apps::LaunchSource::kFromSmartTextContextMenu;
  871. return true;
  872. case crosapi::mojom::LaunchSource::kFromDiscoverTabNotification:
  873. *output = apps::LaunchSource::kFromDiscoverTabNotification;
  874. return true;
  875. case crosapi::mojom::LaunchSource::kFromManagementApi:
  876. *output = apps::LaunchSource::kFromManagementApi;
  877. return true;
  878. case crosapi::mojom::LaunchSource::kFromKiosk:
  879. *output = apps::LaunchSource::kFromKiosk;
  880. return true;
  881. case crosapi::mojom::LaunchSource::kFromNewTabPage:
  882. *output = apps::LaunchSource::kFromNewTabPage;
  883. return true;
  884. case crosapi::mojom::LaunchSource::kFromIntentUrl:
  885. *output = apps::LaunchSource::kFromIntentUrl;
  886. return true;
  887. case crosapi::mojom::LaunchSource::kFromOsLogin:
  888. *output = apps::LaunchSource::kFromOsLogin;
  889. return true;
  890. case crosapi::mojom::LaunchSource::kFromProtocolHandler:
  891. *output = apps::LaunchSource::kFromProtocolHandler;
  892. return true;
  893. case crosapi::mojom::LaunchSource::kFromUrlHandler:
  894. *output = apps::LaunchSource::kFromUrlHandler;
  895. return true;
  896. }
  897. NOTREACHED();
  898. return false;
  899. }
  900. bool StructTraits<crosapi::mojom::PermissionDataView, apps::PermissionPtr>::
  901. Read(crosapi::mojom::PermissionDataView data, apps::PermissionPtr* out) {
  902. apps::PermissionType permission_type;
  903. if (!data.ReadPermissionType(&permission_type))
  904. return false;
  905. apps::PermissionValuePtr value;
  906. if (!data.ReadValue(&value))
  907. return false;
  908. *out = std::make_unique<apps::Permission>(permission_type, std::move(value),
  909. data.is_managed());
  910. return true;
  911. }
  912. crosapi::mojom::PermissionType
  913. EnumTraits<crosapi::mojom::PermissionType, apps::PermissionType>::ToMojom(
  914. apps::PermissionType input) {
  915. switch (input) {
  916. case apps::PermissionType::kUnknown:
  917. return crosapi::mojom::PermissionType::kUnknown;
  918. case apps::PermissionType::kCamera:
  919. return crosapi::mojom::PermissionType::kCamera;
  920. case apps::PermissionType::kLocation:
  921. return crosapi::mojom::PermissionType::kLocation;
  922. case apps::PermissionType::kMicrophone:
  923. return crosapi::mojom::PermissionType::kMicrophone;
  924. case apps::PermissionType::kNotifications:
  925. return crosapi::mojom::PermissionType::kNotifications;
  926. case apps::PermissionType::kContacts:
  927. return crosapi::mojom::PermissionType::kContacts;
  928. case apps::PermissionType::kStorage:
  929. return crosapi::mojom::PermissionType::kStorage;
  930. case apps::PermissionType::kFileHandling:
  931. return crosapi::mojom::PermissionType::kFileHandling;
  932. case apps::PermissionType::kPrinting:
  933. NOTREACHED();
  934. return crosapi::mojom::PermissionType::kUnknown;
  935. }
  936. }
  937. bool EnumTraits<crosapi::mojom::PermissionType,
  938. apps::PermissionType>::FromMojom(crosapi::mojom::PermissionType
  939. input,
  940. apps::PermissionType* output) {
  941. switch (input) {
  942. case crosapi::mojom::PermissionType::kUnknown:
  943. *output = apps::PermissionType::kUnknown;
  944. return true;
  945. case crosapi::mojom::PermissionType::kCamera:
  946. *output = apps::PermissionType::kCamera;
  947. return true;
  948. case crosapi::mojom::PermissionType::kLocation:
  949. *output = apps::PermissionType::kLocation;
  950. return true;
  951. case crosapi::mojom::PermissionType::kMicrophone:
  952. *output = apps::PermissionType::kMicrophone;
  953. return true;
  954. case crosapi::mojom::PermissionType::kNotifications:
  955. *output = apps::PermissionType::kNotifications;
  956. return true;
  957. case crosapi::mojom::PermissionType::kContacts:
  958. *output = apps::PermissionType::kContacts;
  959. return true;
  960. case crosapi::mojom::PermissionType::kStorage:
  961. *output = apps::PermissionType::kStorage;
  962. return true;
  963. case crosapi::mojom::PermissionType::kFileHandling:
  964. *output = apps::PermissionType::kFileHandling;
  965. return true;
  966. }
  967. NOTREACHED();
  968. return false;
  969. }
  970. crosapi::mojom::TriState
  971. EnumTraits<crosapi::mojom::TriState, apps::TriState>::ToMojom(
  972. apps::TriState input) {
  973. switch (input) {
  974. case apps::TriState::kAllow:
  975. return crosapi::mojom::TriState::kAllow;
  976. case apps::TriState::kBlock:
  977. return crosapi::mojom::TriState::kBlock;
  978. case apps::TriState::kAsk:
  979. return crosapi::mojom::TriState::kAsk;
  980. }
  981. NOTREACHED();
  982. }
  983. bool EnumTraits<crosapi::mojom::TriState, apps::TriState>::FromMojom(
  984. crosapi::mojom::TriState input,
  985. apps::TriState* output) {
  986. switch (input) {
  987. case crosapi::mojom::TriState::kAllow:
  988. *output = apps::TriState::kAllow;
  989. return true;
  990. case crosapi::mojom::TriState::kBlock:
  991. *output = apps::TriState::kBlock;
  992. return true;
  993. case crosapi::mojom::TriState::kAsk:
  994. *output = apps::TriState::kAsk;
  995. return true;
  996. }
  997. NOTREACHED();
  998. return false;
  999. }
  1000. crosapi::mojom::PermissionValueDataView::Tag UnionTraits<
  1001. crosapi::mojom::PermissionValueDataView,
  1002. apps::PermissionValuePtr>::GetTag(const apps::PermissionValuePtr& r) {
  1003. if (absl::holds_alternative<bool>(r->value)) {
  1004. return crosapi::mojom::PermissionValueDataView::Tag::kBoolValue;
  1005. }
  1006. if (absl::holds_alternative<apps::TriState>(r->value)) {
  1007. return crosapi::mojom::PermissionValueDataView::Tag::kTristateValue;
  1008. }
  1009. NOTREACHED();
  1010. return crosapi::mojom::PermissionValueDataView::Tag::kBoolValue;
  1011. }
  1012. bool UnionTraits<crosapi::mojom::PermissionValueDataView,
  1013. apps::PermissionValuePtr>::
  1014. Read(crosapi::mojom::PermissionValueDataView data,
  1015. apps::PermissionValuePtr* out) {
  1016. switch (data.tag()) {
  1017. case crosapi::mojom::PermissionValueDataView::Tag::kBoolValue: {
  1018. *out = std::make_unique<apps::PermissionValue>(data.bool_value());
  1019. return true;
  1020. }
  1021. case crosapi::mojom::PermissionValueDataView::Tag::kTristateValue: {
  1022. apps::TriState tristate_value;
  1023. if (!data.ReadTristateValue(&tristate_value))
  1024. return false;
  1025. *out = std::make_unique<apps::PermissionValue>(tristate_value);
  1026. return true;
  1027. }
  1028. }
  1029. NOTREACHED();
  1030. return false;
  1031. }
  1032. bool StructTraits<crosapi::mojom::PreferredAppDataView, apps::PreferredAppPtr>::
  1033. Read(crosapi::mojom::PreferredAppDataView data,
  1034. apps::PreferredAppPtr* out) {
  1035. apps::IntentFilterPtr intent_filter;
  1036. if (!data.ReadIntentFilter(&intent_filter))
  1037. return false;
  1038. std::string app_id;
  1039. if (!data.ReadAppId(&app_id))
  1040. return false;
  1041. *out = std::make_unique<apps::PreferredApp>(std::move(intent_filter), app_id);
  1042. return true;
  1043. }
  1044. bool StructTraits<crosapi::mojom::PreferredAppChangesDataView,
  1045. apps::PreferredAppChangesPtr>::
  1046. Read(crosapi::mojom::PreferredAppChangesDataView data,
  1047. apps::PreferredAppChangesPtr* out) {
  1048. base::flat_map<std::string, apps::IntentFilters> added_filters;
  1049. if (!data.ReadAddedFilters(&added_filters))
  1050. return false;
  1051. base::flat_map<std::string, apps::IntentFilters> removed_filters;
  1052. if (!data.ReadRemovedFilters(&removed_filters))
  1053. return false;
  1054. auto preferred_app_changes = std::make_unique<apps::PreferredAppChanges>();
  1055. preferred_app_changes->added_filters = std::move(added_filters);
  1056. preferred_app_changes->removed_filters = std::move(removed_filters);
  1057. *out = std::move(preferred_app_changes);
  1058. return true;
  1059. }
  1060. bool StructTraits<crosapi::mojom::ShortcutDataView, apps::ShortcutPtr>::Read(
  1061. crosapi::mojom::ShortcutDataView data,
  1062. apps::ShortcutPtr* out) {
  1063. std::string shortcut_id;
  1064. if (!data.ReadShortcutId(&shortcut_id))
  1065. return false;
  1066. std::string name;
  1067. if (!data.ReadName(&name))
  1068. return false;
  1069. *out = std::make_unique<apps::Shortcut>(shortcut_id, name, data.position());
  1070. return true;
  1071. }
  1072. } // namespace mojo