tree: 3e963d755bbf8d63f9238a147175d12707f0f379 [path history] [tgz]
  1. app_list_specifics.proto
  2. app_notification_specifics.proto
  3. app_setting_specifics.proto
  4. app_specifics.proto
  5. arc_package_specifics.proto
  6. autofill_offer_specifics.proto
  7. autofill_specifics.proto
  8. bookmark_model_metadata.proto
  9. bookmark_specifics.proto
  10. BUILD.gn
  11. client_commands.proto
  12. client_debug_info.proto
  13. DEPS
  14. device_info_specifics.proto
  15. dictionary_specifics.proto
  16. encryption.proto
  17. entity_metadata.proto
  18. experiment_status.proto
  19. experiments_specifics.proto
  20. extension_setting_specifics.proto
  21. extension_specifics.proto
  22. favicon_image_specifics.proto
  23. favicon_tracking_specifics.proto
  24. gaia_password_reuse.proto
  25. get_updates_caller_info.proto
  26. history_delete_directive_specifics.proto
  27. history_status.proto
  28. local_trusted_vault.proto
  29. loopback_server.proto
  30. managed_user_setting_specifics.proto
  31. managed_user_shared_setting_specifics.proto
  32. managed_user_specifics.proto
  33. managed_user_whitelist_specifics.proto
  34. model_type_state.proto
  35. model_type_store_schema_descriptor.proto
  36. nigori_local_data.proto
  37. nigori_specifics.proto
  38. os_preference_specifics.proto
  39. os_priority_preference_specifics.proto
  40. OWNERS
  41. password_specifics.proto
  42. persisted_entity_data.proto
  43. preference_specifics.proto
  44. printer_specifics.proto
  45. priority_preference_specifics.proto
  46. proto_enum_conversions.cc
  47. proto_enum_conversions.h
  48. proto_enum_conversions_unittest.cc
  49. proto_memory_estimations.cc
  50. proto_memory_estimations.h
  51. proto_value_conversions.cc
  52. proto_value_conversions.h
  53. proto_value_conversions_unittest.cc
  54. proto_visitors.h
  55. protocol_sources.gni
  56. reading_list_specifics.proto
  57. README.md
  58. search_engine_specifics.proto
  59. security_event_specifics.proto
  60. send_tab_to_self_specifics.proto
  61. session_specifics.proto
  62. sharing_message_specifics.proto
  63. sync.proto
  64. sync_enums.proto
  65. sync_invalidations_payload.proto
  66. sync_protocol_error.cc
  67. sync_protocol_error.h
  68. synced_notification_app_info_specifics.proto
  69. synced_notification_specifics.proto
  70. test.proto
  71. theme_specifics.proto
  72. typed_url_specifics.proto
  73. unique_position.proto
  74. user_consent_specifics.proto
  75. user_consent_types.proto
  76. user_event_specifics.proto
  77. web_app_specifics.proto
  78. wifi_configuration_specifics.proto
components/sync/protocol/README.md

Sync Protocol Style

General guidelines:

  • Follow the Protocol Buffers Style Guide
  • Follow the Proto Do‘s and Don’ts (sorry, Googlers only).
  • Maintain local consistency.
  • Use proto2 syntax.
  • Always get a review from someone in the OWNERS file in this folder. Don't use owners from higher-level folders, and never TBR changes!

Some specific guidelines on top of the general ones above, or just things that often come up:

  • Enum entries should be in ALL_CAPS (different from C++!), and for new code, the first entry should be a FOO_UNSPECIFIED = 0 one.
  • Proto changes also require corresponding changes in proto_visitors.h and (where appropriate) in proto_enum_conversions.h/cc.
  • Backwards compatibility: In general, all changes must be fully backwards-compatible - consider that a single user might be running different versions of the browser simultaneously! Also note that Sync supports clients up to a few years old, so deprecating/removing an existing field is typically a multi-year process.
  • Deprecating fields:
    • If the field is still accessed: Mark it as [deprecated = true]. This is the common case, since the browser typically needs to continue supporting the old field for backwards compatibility reasons.
    • If the field is not accessed anymore (i.e. no non-ancient clients depend on the field being populated anymore, all migration code has been retired, etc): Remove the field, and add reserved entries for both its name and its tag number.
  • Deprecating enum values: This is particularly tricky, especially if the default value is not a FOO_UNSPECIFIED one (see above). A common pattern is prepending DEPRECATED_ to the entry name.