GNOME - Epiphany Browser Synchronization

William Ting

Abstract

Users today are accessing the internet through a growing number of devices and computers on a daily basis. As the number of regularly used devices continues to increase, maintaining a consistent state amongst all those devices is an expanding issue. The goal of this proposal is to implement an extensible synchronization API for Epiphany that is data storage agnostic. The first implementation will be synchronizing Epiphany's bookmarks and history using Firefox Sync Service.

Additional Information

Please refer to the project page for more details and source code.

Overview
 
User Interface
 
The primary interface for end users will be a new tab located in Edit > Personal Data > Sync. The user will register for a new account or log in to an existing one.
 
After logging in, users will have the ability to:
 
- choose which items to synchronize
- view synchronization status and errors
- trigger a manual update
- show sync (aka recovery) key
 
Synchronization API
 
The goal for the API is to make it extensible and adaptable for various storage systems.

The browser will spawn a sync client thread upon startup. The sync client will then poll the sync server every X minutes and update when necessary.
 
Data Storage
 
This project will focus on implementing synchronization using Firefox Sync Service for various reasons:
 
The APIs, data storage, architecture and design is open source. Their sync server binaries is publicly available and usable by anyone, allowing Gnome to set up its own sync.gnome.org if necessary.
 
Future Features (time permitting)
 
- Synchronize more user data: favicons, cookies, session state, passwords, form data
- Web interface for accessing bookmarks
- Push synchronization (high difficulty):
    - This allows a more seamless integration when using multiple clients at the same time.
    - Chromium implements this by maintaining a persistent XMPP connection with Google's chat servers.
    - Firefox Sync Servers has plans for push synchronization on roadmap.