diff options
Diffstat (limited to 'third_party/rust/tabs/src/tabs.udl')
-rw-r--r-- | third_party/rust/tabs/src/tabs.udl | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/third_party/rust/tabs/src/tabs.udl b/third_party/rust/tabs/src/tabs.udl new file mode 100644 index 0000000000..d1964ea0d2 --- /dev/null +++ b/third_party/rust/tabs/src/tabs.udl @@ -0,0 +1,108 @@ +[Custom] +typedef string TabsGuid; + +namespace tabs { + +}; + +[Error] +interface TabsApiError { + SyncError(string reason); + SqlError(string reason); + UnexpectedTabsError(string reason); +}; + + +interface TabsStore { + constructor(string path); + + sequence<ClientRemoteTabs> get_all(); + + void set_local_tabs(sequence<RemoteTabRecord> remote_tabs); + + [Self=ByArc] + void register_with_sync_manager(); + + [Throws=TabsApiError, Self=ByArc] + void reset(); + + [Throws=TabsApiError, Self=ByArc] + string sync(string key_id, string access_token, string sync_key, string tokenserver_url, string local_id); + + [Self=ByArc] + TabsBridgedEngine bridged_engine(); + +}; + +// Note that this enum is duplicated in fxa-client.udl (although the underlying type *is* +// shared). This duplication exists because there's no direct dependency between that crate and +// this one. We can probably remove the duplication when sync15 gets a .udl file, then we could +// reference it via an `[Extern=...]typedef` +enum TabsDeviceType { "Desktop", "Mobile", "Tablet", "VR", "TV", "Unknown" }; + +dictionary RemoteTabRecord { + string title; + sequence<string> url_history; + string? icon; + // Number of ms since the unix epoch (as reported by the client's clock) + i64 last_used; +}; + +dictionary ClientRemoteTabs { + string client_id; + string client_name; + TabsDeviceType device_type; + // Number of ms since the unix epoch (as reported by the server's clock) + i64 last_modified; + sequence<RemoteTabRecord> 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<string> incoming_envelopes_as_json); + + [Throws=TabsApiError] + sequence<string> apply(); + + [Throws=TabsApiError] + void set_uploaded(i64 new_timestamp, sequence<TabsGuid> uploaded_ids); + + [Throws=TabsApiError] + void sync_finished(); + + [Throws=TabsApiError] + void reset(); + + [Throws=TabsApiError] + void wipe(); +}; |