 Issue 8688116:
  Fixed Firefox Sync support (currently broken by refactoring in bug 785225  (Closed)
    
  
    Issue 8688116:
  Fixed Firefox Sync support (currently broken by refactoring in bug 785225  (Closed) 
  | Index: lib/sync.js | 
| =================================================================== | 
| --- a/lib/sync.js | 
| +++ b/lib/sync.js | 
| @@ -12,27 +12,25 @@ Cu.import("resource://gre/modules/XPCOMU | 
| Cu.import("resource://gre/modules/Services.jsm"); | 
| let {FilterStorage} = require("filterStorage"); | 
| let {FilterNotifier} = require("filterNotifier"); | 
| let {Synchronizer} = require("synchronizer"); | 
| let {Subscription, SpecialSubscription, DownloadableSubscription, ExternalSubscription} = require("subscriptionClasses"); | 
| let {Filter, ActiveFilter} = require("filterClasses"); | 
| +// Firefox Sync classes are set later in initEngine() | 
| +let Service, Engines, SyncEngine, Store, Tracker; | 
| + | 
| /** | 
| * ID of the only record stored | 
| * @type String | 
| */ | 
| let filtersRecordID = "6fad6286-8207-46b6-aa39-8e0ce0bd7c49"; | 
| -/** | 
| - * Weave tracker class (is set when Weave is initialized). | 
| - */ | 
| -let Tracker = null; | 
| - | 
| let Sync = exports.Sync = | 
| { | 
| /** | 
| * Will be set to true if/when Weave starts up. | 
| * @type Boolean | 
| */ | 
| initialized: false, | 
| @@ -44,17 +42,17 @@ let Sync = exports.Sync = | 
| /** | 
| * Returns Adblock Plus sync engine. | 
| * @result Engine | 
| */ | 
| getEngine: function() | 
| { | 
| if (this.initialized) | 
| - return Weave.Engines.get("adblockplus"); | 
| + return Engines.get("adblockplus"); | 
| else | 
| return null; | 
| } | 
| }; | 
| /** | 
| * Listens to notifications from Sync service. | 
| */ | 
| @@ -88,27 +86,31 @@ let SyncServiceObserver = | 
| } catch (e) {} | 
| Services.obs.removeObserver(this, "weave:engine:start-tracking"); | 
| Services.obs.removeObserver(this, "weave:engine:stop-tracking"); | 
| }.bind(this)); | 
| }, | 
| initEngine: function() | 
| { | 
| - Cu.import("resource://services-sync/main.js"); | 
| + ({Engines, SyncEngine, Store, Tracker} = Cu.import("resource://services-sync/engines.js")); | 
| 
Felix Dahlke
2012/10/30 17:44:12
Why surround this with parentheses?
 
Wladimir Palant
2012/10/30 18:53:49
Because otherwise {...} is a block statement and y
 | 
| + if (typeof Engines == "undefined") | 
| + { | 
| + ({Service} = Cu.import("resource://services-sync/service.js")); | 
| 
Felix Dahlke
2012/10/30 17:44:12
Same here, are those parentheses necessary?
 | 
| + Engines = Service.engineManager; | 
| + } | 
| - Tracker = Weave.SyncEngine.prototype._trackerObj; | 
| - ABPEngine.prototype.__proto__ = Weave.SyncEngine.prototype; | 
| - ABPStore.prototype.__proto__ = Weave.Store.prototype; | 
| + ABPEngine.prototype.__proto__ = SyncEngine.prototype; | 
| + ABPStore.prototype.__proto__ = Store.prototype; | 
| ABPTracker.prototype.__proto__ = Tracker.prototype; | 
| - Weave.Engines.register(ABPEngine); | 
| + Engines.register(ABPEngine); | 
| onShutdown.add(function() | 
| { | 
| - Weave.Engines.unregister("adblockplus"); | 
| + Engines.unregister("adblockplus"); | 
| }); | 
| }, | 
| observe: function(subject, topic, data) | 
| { | 
| switch (topic) | 
| { | 
| case "weave:service:ready": | 
| @@ -131,34 +133,34 @@ let SyncServiceObserver = | 
| } | 
| }, | 
| QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]), | 
| }; | 
| function ABPEngine() | 
| { | 
| - Weave.SyncEngine.call(this, "AdblockPlus"); | 
| + SyncEngine.call(this, "AdblockPlus", Service); | 
| } | 
| ABPEngine.prototype = | 
| { | 
| _storeObj: ABPStore, | 
| _trackerObj: ABPTracker, | 
| version: 1, | 
| _reconcile: function(item) | 
| { | 
| // Always process server data, we will do the merging ourselves | 
| return true; | 
| } | 
| }; | 
| -function ABPStore(name) | 
| +function ABPStore(name, engine) | 
| { | 
| - Weave.Store.call(this, name); | 
| + Store.call(this, name, engine); | 
| } | 
| ABPStore.prototype = | 
| { | 
| getAllIDs: function() | 
| { | 
| let result = {} | 
| result[filtersRecordID] = true; | 
| return result; | 
| @@ -351,21 +353,21 @@ ABPStore.prototype = | 
| } | 
| }; | 
| /** | 
| * Hack to allow store to use the tracker - store tracker pointer globally. | 
| */ | 
| let trackerInstance = null; | 
| -function ABPTracker(name) | 
| +function ABPTracker(name, engine) | 
| { | 
| - Tracker.call(this, name); | 
| + Tracker.call(this, name, engine); | 
| - this.privateTracker = new Tracker(name + ".private"); | 
| + this.privateTracker = new Tracker(name + ".private", engine); | 
| trackerInstance = this; | 
| this.onChange = this.onChange.bind(this); | 
| if (Sync.trackingEnabled) | 
| this.startTracking(); | 
| } | 
| ABPTracker.prototype = |