Loading services/sync/tests/tps/.eslintrc.js +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ module.exports = { CreditCards: false, EnableEngines: false, EnsureTracking: false, ExtStorage: false, Formdata: false, History: false, Login: false, Loading services/sync/tests/tps/all_tests.json +2 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ "test_addon_wipe.js": {}, "test_existing_bookmarks.js": {}, "test_addresses.js": {}, "test_creditcards.js": {} "test_creditcards.js": {}, "test_extstorage.js": {} } } Loading services/sync/tests/tps/test_extstorage.js 0 → 100644 +154 −0 Original line number Diff line number Diff line /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ EnableEngines(["addons"]); /* * The list of phases mapped to their corresponding profiles. The object * here must be in JSON format as it will get parsed by the Python * testrunner. It is parsed by the YAML package, so it relatively flexible. */ var phases = { phase1: "profile1", phase2: "profile2", phase3: "profile1", phase4: "profile2", phase5: "profile1", }; /* * Test phases */ Phase("phase1", [ [ ExtStorage.set, "ext-1", { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": { sk_1: "v1", sk_2: "v2", }, }, ], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": { sk_1: "v1", sk_2: "v2", }, }, ], [Sync], ]); Phase("phase2", [ [Sync], [ ExtStorage.set, "ext-1", { "key-2": "value from profile 2", }, ], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "value from profile 2", }, ], [Sync], ]); Phase("phase3", [ [Sync], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "value from profile 2", }, ], [ ExtStorage.set, "ext-1", { "key-2": "value from profile 1", }, ], // exit without syncing. ]); Phase("phase4", [ [Sync], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "value from profile 2", }, ], [ ExtStorage.set, "ext-1", { "key-2": "second value from profile 2", }, ], [Sync], ]); Phase("phase5", [ [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "value from profile 1", }, ], [Sync], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "second value from profile 2", }, ], ]); services/sync/tps/extensions/tps/resource/logger.jsm +12 −5 Original line number Diff line number Diff line Loading @@ -9,7 +9,14 @@ var EXPORTED_SYMBOLS = ["Logger"]; const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); const { XPCOMUtils } = ChromeUtils.import( "resource://gre/modules/XPCOMUtils.jsm" ); XPCOMUtils.defineLazyModuleGetters(this, { ObjectUtils: "resource://gre/modules/ObjectUtils.jsm", Services: "resource://gre/modules/Services.jsm", }); var Logger = { _foStream: null, Loading Loading @@ -78,15 +85,15 @@ var Logger = { return this.AssertTrue(!bool, msg, showPotentialError); }, AssertEqual(val1, val2, msg) { if (val1 != val2) { AssertEqual(got, expected, msg) { if (!ObjectUtils.deepEqual(got, expected)) { throw new Error( "ASSERTION FAILED! " + msg + "; expected " + JSON.stringify(val2) + JSON.stringify(expected) + ", got " + JSON.stringify(val1) JSON.stringify(got) ); } }, Loading services/sync/tps/extensions/tps/resource/tps.jsm +64 −74 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ var EXPORTED_SYMBOLS = [ "Addresses", "Bookmarks", "CreditCards", "ExtensionStorage", "Formdata", "History", "Passwords", Loading @@ -24,83 +25,58 @@ var EXPORTED_SYMBOLS = [ var module = this; // Global modules const { Log } = ChromeUtils.import("resource://gre/modules/Log.jsm"); const { XPCOMUtils } = ChromeUtils.import( "resource://gre/modules/XPCOMUtils.jsm" ); const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); const { AppConstants } = ChromeUtils.import( "resource://gre/modules/AppConstants.jsm" ); const { PlacesUtils } = ChromeUtils.import( "resource://gre/modules/PlacesUtils.jsm" ); const { FileUtils } = ChromeUtils.import( "resource://gre/modules/FileUtils.jsm" ); const { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm"); const { PromiseUtils } = ChromeUtils.import( "resource://gre/modules/PromiseUtils.jsm" ); const { OS } = ChromeUtils.import("resource://gre/modules/osfile.jsm"); const { SessionStore } = ChromeUtils.import( "resource:///modules/sessionstore/SessionStore.jsm" ); const { Async } = ChromeUtils.import("resource://services-common/async.js"); const { CommonUtils } = ChromeUtils.import( "resource://services-common/utils.js" ); const { WEAVE_VERSION } = ChromeUtils.import( "resource://services-sync/constants.js" ); const { Weave } = ChromeUtils.import("resource://services-sync/main.js"); const { Svc } = ChromeUtils.import("resource://services-sync/util.js"); const { SyncTelemetry } = ChromeUtils.import( "resource://services-sync/telemetry.js" ); const { BookmarkValidator } = ChromeUtils.import( "resource://services-sync/bookmark_validator.js" ); const { PasswordValidator } = ChromeUtils.import( "resource://services-sync/engines/passwords.js" ); const { FormValidator } = ChromeUtils.import( "resource://services-sync/engines/forms.js" ); const { AddonValidator } = ChromeUtils.import( "resource://services-sync/engines/addons.js" ); // TPS modules const { Logger } = ChromeUtils.import("resource://tps/logger.jsm"); // Module wrappers for tests const { Addon } = ChromeUtils.import("resource://tps/modules/addons.jsm"); const { Bookmark, BookmarkFolder, DumpBookmarks, Livemark, Separator, } = ChromeUtils.import("resource://tps/modules/bookmarks.jsm"); const { Address, CreditCard, DumpAddresses, DumpCreditCards, } = ChromeUtils.import("resource://tps/modules/formautofill.jsm"); const { FormData } = ChromeUtils.import("resource://tps/modules/forms.jsm"); const { DumpHistory, HistoryEntry } = ChromeUtils.import( "resource://tps/modules/history.jsm" ); const { DumpPasswords, Password } = ChromeUtils.import( "resource://tps/modules/passwords.jsm" ); const { Preference } = ChromeUtils.import("resource://tps/modules/prefs.jsm"); const { BrowserTabs } = ChromeUtils.import("resource://tps/modules/tabs.jsm"); const { BrowserWindows } = ChromeUtils.import( "resource://tps/modules/windows.jsm" ); XPCOMUtils.defineLazyModuleGetters(this, { AppConstants: "resource://gre/modules/AppConstants.jsm", Async: "resource://services-common/async.js", BrowserTabs: "resource://tps/modules/tabs.jsm", BrowserWindows: "resource://tps/modules/windows.jsm", CommonUtils: "resource://services-common/utils.js", extensionStorageSync: "resource://gre/modules/ExtensionStorageSync.jsm", FileUtils: "resource://gre/modules/FileUtils.jsm", Log: "resource://gre/modules/Log.jsm", Logger: "resource://tps/logger.jsm", OS: "resource://gre/modules/osfile.jsm", PlacesUtils: "resource://gre/modules/PlacesUtils.jsm", PromiseUtils: "resource://gre/modules/PromiseUtils.jsm", Services: "resource://gre/modules/Services.jsm", SessionStore: "resource:///modules/sessionstore/SessionStore.jsm", setTimeout: "resource://gre/modules/Timer.jsm", Svc: "resource://services-sync/util.js", SyncTelemetry: "resource://services-sync/telemetry.js", Weave: "resource://services-sync/main.js", WEAVE_VERSION: "resource://services-sync/constants.js", Addon: "resource://tps/modules/addons.jsm", AddonValidator: "resource://services-sync/engines/addons.js", FormData: "resource://tps/modules/forms.jsm", FormValidator: "resource://services-sync/engines/forms.js", Bookmark: "resource://tps/modules/bookmarks.jsm", DumpBookmarks: "resource://tps/modules/bookmarks.jsm", BookmarkFolder: "resource://tps/modules/bookmarks.jsm", Livemark: "resource://tps/modules/bookmarks.jsm", Separator: "resource://tps/modules/bookmarks.jsm", BookmarkValidator: "resource://services-sync/bookmark_validator.js", Address: "resource://tps/modules/formautofill.jsm", DumpAddresses: "resource://tps/modules/formautofill.jsm", CreditCard: "resource://tps/modules/formautofill.jsm", DumpCreditCards: "resource://tps/modules/formautofill.jsm", DumpHistory: "resource://tps/modules/history.jsm", HistoryEntry: "resource://tps/modules/history.jsm", Preference: "resource://tps/modules/prefs.jsm", DumpPasswords: "resource://tps/modules/passwords.jsm", Password: "resource://tps/modules/passwords.jsm", PasswordValidator: "resource://services-sync/engines/passwords.js", }); XPCOMUtils.defineLazyGetter(this, "fileProtocolHandler", () => { let fileHandler = Services.io.getProtocolHandler("file"); Loading Loading @@ -1597,5 +1573,19 @@ var Windows = { }, }; // Jumping through loads of hoops via calling back into a "HandleXXX" method // and adding an ACTION_XXX indirection adds no value - let's KISS! // eslint-disable-next-line no-unused-vars var ExtStorage = { async set(id, data) { Logger.logInfo(`setting data for '${id}': ${data}`); await extensionStorageSync.set({ id }, data); }, async verify(id, keys, data) { let got = await extensionStorageSync.get({ id }, keys); Logger.AssertEqual(got, data, `data for '${id}'/${keys}`); }, }; // Initialize TPS TPS._init(); Loading
services/sync/tests/tps/.eslintrc.js +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ module.exports = { CreditCards: false, EnableEngines: false, EnsureTracking: false, ExtStorage: false, Formdata: false, History: false, Login: false, Loading
services/sync/tests/tps/all_tests.json +2 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ "test_addon_wipe.js": {}, "test_existing_bookmarks.js": {}, "test_addresses.js": {}, "test_creditcards.js": {} "test_creditcards.js": {}, "test_extstorage.js": {} } } Loading
services/sync/tests/tps/test_extstorage.js 0 → 100644 +154 −0 Original line number Diff line number Diff line /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ EnableEngines(["addons"]); /* * The list of phases mapped to their corresponding profiles. The object * here must be in JSON format as it will get parsed by the Python * testrunner. It is parsed by the YAML package, so it relatively flexible. */ var phases = { phase1: "profile1", phase2: "profile2", phase3: "profile1", phase4: "profile2", phase5: "profile1", }; /* * Test phases */ Phase("phase1", [ [ ExtStorage.set, "ext-1", { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": { sk_1: "v1", sk_2: "v2", }, }, ], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": { sk_1: "v1", sk_2: "v2", }, }, ], [Sync], ]); Phase("phase2", [ [Sync], [ ExtStorage.set, "ext-1", { "key-2": "value from profile 2", }, ], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "value from profile 2", }, ], [Sync], ]); Phase("phase3", [ [Sync], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "value from profile 2", }, ], [ ExtStorage.set, "ext-1", { "key-2": "value from profile 1", }, ], // exit without syncing. ]); Phase("phase4", [ [Sync], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "value from profile 2", }, ], [ ExtStorage.set, "ext-1", { "key-2": "second value from profile 2", }, ], [Sync], ]); Phase("phase5", [ [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "value from profile 1", }, ], [Sync], [ ExtStorage.verify, "ext-1", null, { "key-1": { sub_key_1: "value 1", sub_key_2: "value 2", }, "key-2": "second value from profile 2", }, ], ]);
services/sync/tps/extensions/tps/resource/logger.jsm +12 −5 Original line number Diff line number Diff line Loading @@ -9,7 +9,14 @@ var EXPORTED_SYMBOLS = ["Logger"]; const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); const { XPCOMUtils } = ChromeUtils.import( "resource://gre/modules/XPCOMUtils.jsm" ); XPCOMUtils.defineLazyModuleGetters(this, { ObjectUtils: "resource://gre/modules/ObjectUtils.jsm", Services: "resource://gre/modules/Services.jsm", }); var Logger = { _foStream: null, Loading Loading @@ -78,15 +85,15 @@ var Logger = { return this.AssertTrue(!bool, msg, showPotentialError); }, AssertEqual(val1, val2, msg) { if (val1 != val2) { AssertEqual(got, expected, msg) { if (!ObjectUtils.deepEqual(got, expected)) { throw new Error( "ASSERTION FAILED! " + msg + "; expected " + JSON.stringify(val2) + JSON.stringify(expected) + ", got " + JSON.stringify(val1) JSON.stringify(got) ); } }, Loading
services/sync/tps/extensions/tps/resource/tps.jsm +64 −74 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ var EXPORTED_SYMBOLS = [ "Addresses", "Bookmarks", "CreditCards", "ExtensionStorage", "Formdata", "History", "Passwords", Loading @@ -24,83 +25,58 @@ var EXPORTED_SYMBOLS = [ var module = this; // Global modules const { Log } = ChromeUtils.import("resource://gre/modules/Log.jsm"); const { XPCOMUtils } = ChromeUtils.import( "resource://gre/modules/XPCOMUtils.jsm" ); const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); const { AppConstants } = ChromeUtils.import( "resource://gre/modules/AppConstants.jsm" ); const { PlacesUtils } = ChromeUtils.import( "resource://gre/modules/PlacesUtils.jsm" ); const { FileUtils } = ChromeUtils.import( "resource://gre/modules/FileUtils.jsm" ); const { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm"); const { PromiseUtils } = ChromeUtils.import( "resource://gre/modules/PromiseUtils.jsm" ); const { OS } = ChromeUtils.import("resource://gre/modules/osfile.jsm"); const { SessionStore } = ChromeUtils.import( "resource:///modules/sessionstore/SessionStore.jsm" ); const { Async } = ChromeUtils.import("resource://services-common/async.js"); const { CommonUtils } = ChromeUtils.import( "resource://services-common/utils.js" ); const { WEAVE_VERSION } = ChromeUtils.import( "resource://services-sync/constants.js" ); const { Weave } = ChromeUtils.import("resource://services-sync/main.js"); const { Svc } = ChromeUtils.import("resource://services-sync/util.js"); const { SyncTelemetry } = ChromeUtils.import( "resource://services-sync/telemetry.js" ); const { BookmarkValidator } = ChromeUtils.import( "resource://services-sync/bookmark_validator.js" ); const { PasswordValidator } = ChromeUtils.import( "resource://services-sync/engines/passwords.js" ); const { FormValidator } = ChromeUtils.import( "resource://services-sync/engines/forms.js" ); const { AddonValidator } = ChromeUtils.import( "resource://services-sync/engines/addons.js" ); // TPS modules const { Logger } = ChromeUtils.import("resource://tps/logger.jsm"); // Module wrappers for tests const { Addon } = ChromeUtils.import("resource://tps/modules/addons.jsm"); const { Bookmark, BookmarkFolder, DumpBookmarks, Livemark, Separator, } = ChromeUtils.import("resource://tps/modules/bookmarks.jsm"); const { Address, CreditCard, DumpAddresses, DumpCreditCards, } = ChromeUtils.import("resource://tps/modules/formautofill.jsm"); const { FormData } = ChromeUtils.import("resource://tps/modules/forms.jsm"); const { DumpHistory, HistoryEntry } = ChromeUtils.import( "resource://tps/modules/history.jsm" ); const { DumpPasswords, Password } = ChromeUtils.import( "resource://tps/modules/passwords.jsm" ); const { Preference } = ChromeUtils.import("resource://tps/modules/prefs.jsm"); const { BrowserTabs } = ChromeUtils.import("resource://tps/modules/tabs.jsm"); const { BrowserWindows } = ChromeUtils.import( "resource://tps/modules/windows.jsm" ); XPCOMUtils.defineLazyModuleGetters(this, { AppConstants: "resource://gre/modules/AppConstants.jsm", Async: "resource://services-common/async.js", BrowserTabs: "resource://tps/modules/tabs.jsm", BrowserWindows: "resource://tps/modules/windows.jsm", CommonUtils: "resource://services-common/utils.js", extensionStorageSync: "resource://gre/modules/ExtensionStorageSync.jsm", FileUtils: "resource://gre/modules/FileUtils.jsm", Log: "resource://gre/modules/Log.jsm", Logger: "resource://tps/logger.jsm", OS: "resource://gre/modules/osfile.jsm", PlacesUtils: "resource://gre/modules/PlacesUtils.jsm", PromiseUtils: "resource://gre/modules/PromiseUtils.jsm", Services: "resource://gre/modules/Services.jsm", SessionStore: "resource:///modules/sessionstore/SessionStore.jsm", setTimeout: "resource://gre/modules/Timer.jsm", Svc: "resource://services-sync/util.js", SyncTelemetry: "resource://services-sync/telemetry.js", Weave: "resource://services-sync/main.js", WEAVE_VERSION: "resource://services-sync/constants.js", Addon: "resource://tps/modules/addons.jsm", AddonValidator: "resource://services-sync/engines/addons.js", FormData: "resource://tps/modules/forms.jsm", FormValidator: "resource://services-sync/engines/forms.js", Bookmark: "resource://tps/modules/bookmarks.jsm", DumpBookmarks: "resource://tps/modules/bookmarks.jsm", BookmarkFolder: "resource://tps/modules/bookmarks.jsm", Livemark: "resource://tps/modules/bookmarks.jsm", Separator: "resource://tps/modules/bookmarks.jsm", BookmarkValidator: "resource://services-sync/bookmark_validator.js", Address: "resource://tps/modules/formautofill.jsm", DumpAddresses: "resource://tps/modules/formautofill.jsm", CreditCard: "resource://tps/modules/formautofill.jsm", DumpCreditCards: "resource://tps/modules/formautofill.jsm", DumpHistory: "resource://tps/modules/history.jsm", HistoryEntry: "resource://tps/modules/history.jsm", Preference: "resource://tps/modules/prefs.jsm", DumpPasswords: "resource://tps/modules/passwords.jsm", Password: "resource://tps/modules/passwords.jsm", PasswordValidator: "resource://services-sync/engines/passwords.js", }); XPCOMUtils.defineLazyGetter(this, "fileProtocolHandler", () => { let fileHandler = Services.io.getProtocolHandler("file"); Loading Loading @@ -1597,5 +1573,19 @@ var Windows = { }, }; // Jumping through loads of hoops via calling back into a "HandleXXX" method // and adding an ACTION_XXX indirection adds no value - let's KISS! // eslint-disable-next-line no-unused-vars var ExtStorage = { async set(id, data) { Logger.logInfo(`setting data for '${id}': ${data}`); await extensionStorageSync.set({ id }, data); }, async verify(id, keys, data) { let got = await extensionStorageSync.get({ id }, keys); Logger.AssertEqual(got, data, `data for '${id}'/${keys}`); }, }; // Initialize TPS TPS._init();