Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 this.EXPORTED_SYMBOLS = [
8 "RotaryEngine",
9 "RotaryRecord",
10 "RotaryStore",
11 "RotaryTracker",
12 ];
14 const {utils: Cu} = Components;
16 Cu.import("resource://services-sync/engines.js");
17 Cu.import("resource://services-sync/record.js");
18 Cu.import("resource://services-sync/util.js");
20 /*
21 * A fake engine implementation.
22 * This is used all over the place.
23 *
24 * Complete with record, store, and tracker implementations.
25 */
27 this.RotaryRecord = function RotaryRecord(collection, id) {
28 CryptoWrapper.call(this, collection, id);
29 }
30 RotaryRecord.prototype = {
31 __proto__: CryptoWrapper.prototype
32 };
33 Utils.deferGetSet(RotaryRecord, "cleartext", ["denomination"]);
35 this.RotaryStore = function RotaryStore(engine) {
36 Store.call(this, "Rotary", engine);
37 this.items = {};
38 }
39 RotaryStore.prototype = {
40 __proto__: Store.prototype,
42 create: function create(record) {
43 this.items[record.id] = record.denomination;
44 },
46 remove: function remove(record) {
47 delete this.items[record.id];
48 },
50 update: function update(record) {
51 this.items[record.id] = record.denomination;
52 },
54 itemExists: function itemExists(id) {
55 return (id in this.items);
56 },
58 createRecord: function createRecord(id, collection) {
59 let record = new RotaryRecord(collection, id);
61 if (!(id in this.items)) {
62 record.deleted = true;
63 return record;
64 }
66 record.denomination = this.items[id] || "Data for new record: " + id;
67 return record;
68 },
70 changeItemID: function changeItemID(oldID, newID) {
71 if (oldID in this.items) {
72 this.items[newID] = this.items[oldID];
73 }
75 delete this.items[oldID];
76 },
78 getAllIDs: function getAllIDs() {
79 let ids = {};
80 for (let id in this.items) {
81 ids[id] = true;
82 }
83 return ids;
84 },
86 wipe: function wipe() {
87 this.items = {};
88 }
89 };
91 this.RotaryTracker = function RotaryTracker(engine) {
92 Tracker.call(this, "Rotary", engine);
93 }
94 RotaryTracker.prototype = {
95 __proto__: Tracker.prototype
96 };
99 this.RotaryEngine = function RotaryEngine(service) {
100 SyncEngine.call(this, "Rotary", service);
101 // Ensure that the engine starts with a clean slate.
102 this.toFetch = [];
103 this.previousFailed = [];
104 }
105 RotaryEngine.prototype = {
106 __proto__: SyncEngine.prototype,
107 _storeObj: RotaryStore,
108 _trackerObj: RotaryTracker,
109 _recordObj: RotaryRecord,
111 _findDupe: function _findDupe(item) {
112 // This is a semaphore used for testing proper reconciling on dupe
113 // detection.
114 if (item.id == "DUPE_INCOMING") {
115 return "DUPE_LOCAL";
116 }
118 for (let [id, value] in Iterator(this._store.items)) {
119 if (item.denomination == value) {
120 return id;
121 }
122 }
123 }
124 };