Revision control

Copy as Markdown

[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<ClientRemoteTabs> get_all();
void set_local_tabs(sequence<RemoteTabRecord> remote_tabs);
void add_pending_remote_tab_closure(sequence<TabsRequestedClose> tabs_requested_closed);
[Self=ByArc]
void register_with_sync_manager();
[Self=ByArc]
TabsBridgedEngine bridged_engine();
};
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;
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<RemoteTabRecord> remote_tabs;
};
dictionary TabsRequestedClose {
string client_id;
sequence<string> urls;
};
// 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();
};