permission_set_mojom_traits.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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 EXTENSIONS_COMMON_MOJOM_PERMISSION_SET_MOJOM_TRAITS_H_
  5. #define EXTENSIONS_COMMON_MOJOM_PERMISSION_SET_MOJOM_TRAITS_H_
  6. #include "extensions/common/mojom/api_permission_id.mojom-shared.h"
  7. #include "extensions/common/mojom/permission_set.mojom-shared.h"
  8. #include "extensions/common/mojom/url_pattern_set_mojom_traits.h"
  9. #include "extensions/common/permissions/api_permission_set.h"
  10. #include "extensions/common/permissions/manifest_permission_set.h"
  11. #include "extensions/common/permissions/permission_set.h"
  12. #include "mojo/public/cpp/base/values_mojom_traits.h"
  13. #include "mojo/public/cpp/bindings/struct_traits.h"
  14. #include "third_party/abseil-cpp/absl/types/optional.h"
  15. namespace mojo {
  16. template <>
  17. struct StructTraits<extensions::mojom::APIPermissionDataView,
  18. std::unique_ptr<extensions::APIPermission>> {
  19. static extensions::mojom::APIPermissionID id(
  20. const std::unique_ptr<extensions::APIPermission>& permission) {
  21. return permission->id();
  22. }
  23. static absl::optional<base::Value> value(
  24. const std::unique_ptr<extensions::APIPermission>& permission) {
  25. std::unique_ptr<base::Value> value = permission->ToValue();
  26. if (value == nullptr)
  27. return absl::nullopt;
  28. return base::Value::FromUniquePtrValue(std::move(value));
  29. }
  30. static bool Read(extensions::mojom::APIPermissionDataView data,
  31. std::unique_ptr<extensions::APIPermission>* out);
  32. };
  33. template <>
  34. struct StructTraits<extensions::mojom::APIPermissionSetDataView,
  35. extensions::APIPermissionSet> {
  36. static const std::map<extensions::mojom::APIPermissionID,
  37. std::unique_ptr<extensions::APIPermission>>&
  38. permission_map(const extensions::APIPermissionSet& set) {
  39. return set.map();
  40. }
  41. static bool Read(extensions::mojom::APIPermissionSetDataView data,
  42. extensions::APIPermissionSet* out);
  43. };
  44. template <>
  45. struct StructTraits<extensions::mojom::ManifestPermissionDataView,
  46. std::unique_ptr<extensions::ManifestPermission>> {
  47. static std::string id(
  48. const std::unique_ptr<extensions::ManifestPermission>& permission) {
  49. return permission->id();
  50. }
  51. static absl::optional<base::Value> value(
  52. const std::unique_ptr<extensions::ManifestPermission>& permission) {
  53. std::unique_ptr<base::Value> value = permission->ToValue();
  54. if (value == nullptr)
  55. return absl::nullopt;
  56. return base::Value::FromUniquePtrValue(std::move(value));
  57. }
  58. static bool Read(extensions::mojom::ManifestPermissionDataView data,
  59. std::unique_ptr<extensions::ManifestPermission>* out);
  60. };
  61. template <>
  62. struct StructTraits<extensions::mojom::ManifestPermissionSetDataView,
  63. extensions::ManifestPermissionSet> {
  64. static const std::map<std::string,
  65. std::unique_ptr<extensions::ManifestPermission>>&
  66. permission_map(const extensions::ManifestPermissionSet& set) {
  67. return set.map();
  68. }
  69. static bool Read(extensions::mojom::ManifestPermissionSetDataView data,
  70. extensions::ManifestPermissionSet* out);
  71. };
  72. template <>
  73. struct StructTraits<extensions::mojom::PermissionSetDataView,
  74. extensions::PermissionSet> {
  75. static const extensions::APIPermissionSet& apis(
  76. const extensions::PermissionSet& set) {
  77. return set.apis();
  78. }
  79. static const extensions::ManifestPermissionSet& manifest_permissions(
  80. const extensions::PermissionSet& set) {
  81. return set.manifest_permissions();
  82. }
  83. static const extensions::URLPatternSet& hosts(
  84. const extensions::PermissionSet& set) {
  85. return set.explicit_hosts();
  86. }
  87. static const extensions::URLPatternSet& user_script_hosts(
  88. const extensions::PermissionSet& set) {
  89. return set.scriptable_hosts();
  90. }
  91. static bool Read(extensions::mojom::PermissionSetDataView data,
  92. extensions::PermissionSet* out);
  93. };
  94. } // namespace mojo
  95. #endif // EXTENSIONS_COMMON_MOJOM_PERMISSION_SET_MOJOM_TRAITS_H_