CloudServices/Sync/FxSync/Developer/ClientAPI: Difference between revisions

Jump to navigation Jump to search
(→‎Writing a Store class: Fixed wrong names of getAllIDs and changeItemID methods)
Line 6: Line 6:
== Overview ==
== Overview ==


This page describes how to the client-side Sync API for sync engines (and their helper classes).  The focus is on using this API to create a new sync engine to synchronize a new data type.  The data type can be anything that extension JS code has access to through any Mozilla API; this means this page must of necessity be pretty vague about reading and writing the underlying data.  You'll have to fill in those blanks yourself.  Try browsing the [link] xpcom documentation to find out how to get at the many types of useful data that Mozilla stores.
This page describes how to the client-side Sync API for sync engines (and their helper objects).  The focus is on using this API to create a new sync engine to synchronize a new data type.  The data type can be anything that extension JS code has access to through any Mozilla API; this means this page must of necessity be pretty vague about reading and writing the underlying data.  You'll have to fill in those blanks yourself.  Try browsing the [link] xpcom documentation to find out how to get at the many types of useful data that Mozilla stores.


To sync a new data type, you'll need to write an engine class* that extends the base SyncEngine class; you'll also need to extend three helper classes.  Here are the classes you need to extend, and the files in which they're defined:
To sync a new data type, you'll need to write an engine object that extends the base SyncEngine object; you'll also need to extend three helper objects.  Here are the classes you need to extend, and the files in which they're defined:


# <tt>SyncEngine</tt>, in <tt>services/sync/modules/engines.js</tt>
# <tt>SyncEngine</tt>, <tt>Store</tt>, <tt>Tracker</tt> in <tt>services/sync/modules/engines.js</tt>
# <tt>CryptoWrapper</tt>, in <tt>services/sync/modules/base_records/crypto.js</tt>
# <tt>CryptoWrapper</tt>, in <tt>services/sync/modules/record.js</tt>
# <tt>Store</tt>, in <tt>services/sync/modules/stores.js</tt>
# <tt>Tracker</tt>, in <tt>services/sync/modules/trackers.js</tt>


It will be very helpful to look at the existing sync engines -- such as the one for bookmarks and the one for history -- and their helper classes, for guidance.  You can find these files at:
It will be very helpful to look at the existing sync engines -- such as the one for bookmarks and the one for history -- and their helper classes, for guidance.  You can find these files at:


* <tt>services/sync/modules/engines/bookmarks.js</tt> -- the <tt>BookmarkEngine</tt>, <tt>BookmarkStore</tt>, and <tt>BookmarkTracker</tt>.
* <tt>services/sync/modules/engines/bookmarks.js</tt> -- the Record implementations for the various subtypes of bookmarks and the <tt>BookmarkEngine</tt>, <tt>BookmarkStore</tt>, and <tt>BookmarkTracker</tt>.
* <tt>services/sync/modules/type_records/bookmark.js</tt> -- the Record classes for the various subtypes of bookmarks
* <tt>services/sync/modules/engines/history.js</tt> -- the <tt>HistoryRec</tt>,<tt>HistoryEngine</tt>, <tt>HistoryStore</tt>, and <tt>HistoryTracker</tt>.
* <tt>services/sync/modules/engines/history.js</tt> -- the <tt>HistoryEngine</tt>, <tt>HistoryStore</tt>, and <tt>HistoryTracker</tt>.
* <tt>services/sync/modules/type_records/history.js</tt> -- the <tt>HistoryRec</tt> record class.


After implementing your classes, you'll have to register them with the Sync service.
After implementing your objects, you'll have to register them with the Sync service.
 
* - Javascript is prototype-based, not class-based, so technically it's not correct to talk about "subclassing" or "extending a class", but what we're doing is very much the equivalent of that, and I don't know any other terminology to explain it as clearly.


== Writing a Record class ==
== Writing a Record class ==
canmove, Confirmed users
725

edits

Navigation menu