[Custom] typedef string TabsGuid; [External="sync15"] typedef extern DeviceType; namespace tabs { }; [Error] interface TabsApiError { SyncError(string reason); SqlError(string reason); UnexpectedTabsError(string reason); }; interface TabsStore { constructor(string path); sequence get_all(); void set_local_tabs(sequence remote_tabs); [Self=ByArc] void register_with_sync_manager(); [Self=ByArc] TabsBridgedEngine bridged_engine(); }; dictionary RemoteTabRecord { string title; sequence url_history; string? icon; // Number of ms since the unix epoch (as reported by the client's clock) i64 last_used; boolean inactive = false; }; dictionary ClientRemoteTabs { string client_id; string client_name; DeviceType device_type; // Number of ms since the unix epoch (as reported by the server's clock) i64 last_modified; sequence remote_tabs; }; // Note the canonical docs for this are in https://searchfox.org/mozilla-central/source/services/interfaces/mozIBridgedSyncEngine.idl // It's only actually used in desktop, but it's fine to expose this everywhere. // NOTE: all timestamps here are milliseconds. interface TabsBridgedEngine { //readonly attribute long storageVersion; // readonly attribute boolean allowSkippedRecord; // XXX - better logging story than this? // attribute mozIServicesLogSink logger; [Throws=TabsApiError] i64 last_sync(); [Throws=TabsApiError] void set_last_sync(i64 last_sync); [Throws=TabsApiError] string? sync_id(); [Throws=TabsApiError] string reset_sync_id(); [Throws=TabsApiError] string ensure_current_sync_id([ByRef]string new_sync_id); [Throws=TabsApiError] void prepare_for_sync([ByRef]string client_data); [Throws=TabsApiError] void sync_started(); [Throws=TabsApiError] void store_incoming(sequence incoming_envelopes_as_json); [Throws=TabsApiError] sequence apply(); [Throws=TabsApiError] void set_uploaded(i64 new_timestamp, sequence uploaded_ids); [Throws=TabsApiError] void sync_finished(); [Throws=TabsApiError] void reset(); [Throws=TabsApiError] void wipe(); };