Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/sync.js

Issue 8688116: Fixed Firefox Sync support (currently broken by refactoring in bug 785225 (Closed)
Patch Set: Created Oct. 30, 2012, 2:47 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 =
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld