michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: "use strict"; michael@0: michael@0: Cu.import("resource://gre/modules/AddonManager.jsm"); michael@0: Cu.import("resource://services-sync/engines/addons.js"); michael@0: Cu.import("resource://services-sync/constants.js"); michael@0: Cu.import("resource://services-sync/service.js"); michael@0: Cu.import("resource://services-sync/util.js"); michael@0: michael@0: loadAddonTestFunctions(); michael@0: startupManager(); michael@0: Svc.Prefs.set("addons.ignoreRepositoryChecking", true); michael@0: Svc.Prefs.set("engine.addons", true); michael@0: michael@0: Service.engineManager.register(AddonsEngine); michael@0: let engine = Service.engineManager.get("addons"); michael@0: let reconciler = engine._reconciler; michael@0: let store = engine._store; michael@0: let tracker = engine._tracker; michael@0: michael@0: // Don't write out by default. michael@0: tracker.persistChangedIDs = false; michael@0: michael@0: const addon1ID = "addon1@tests.mozilla.org"; michael@0: michael@0: function cleanup_and_advance() { michael@0: Svc.Obs.notify("weave:engine:stop-tracking"); michael@0: tracker.stopTracking(); michael@0: michael@0: tracker.resetScore(); michael@0: tracker.clearChangedIDs(); michael@0: michael@0: reconciler._addons = {}; michael@0: reconciler._changes = []; michael@0: let cb = Async.makeSpinningCallback(); michael@0: reconciler.saveState(null, cb); michael@0: cb.wait(); michael@0: michael@0: run_next_test(); michael@0: } michael@0: michael@0: function run_test() { michael@0: initTestLogging("Trace"); michael@0: Log.repository.getLogger("Sync.Engine.Addons").level = Log.Level.Trace; michael@0: Log.repository.getLogger("Sync.AddonsReconciler").level = michael@0: Log.Level.Trace; michael@0: michael@0: cleanup_and_advance(); michael@0: } michael@0: michael@0: add_test(function test_empty() { michael@0: _("Verify the tracker is empty to start with."); michael@0: michael@0: do_check_eq(0, Object.keys(tracker.changedIDs).length); michael@0: do_check_eq(0, tracker.score); michael@0: michael@0: cleanup_and_advance(); michael@0: }); michael@0: michael@0: add_test(function test_not_tracking() { michael@0: _("Ensures the tracker doesn't do anything when it isn't tracking."); michael@0: michael@0: let addon = installAddon("test_bootstrap1_1"); michael@0: uninstallAddon(addon); michael@0: michael@0: do_check_eq(0, Object.keys(tracker.changedIDs).length); michael@0: do_check_eq(0, tracker.score); michael@0: michael@0: cleanup_and_advance(); michael@0: }); michael@0: michael@0: add_test(function test_track_install() { michael@0: _("Ensure that installing an add-on notifies tracker."); michael@0: michael@0: reconciler.startListening(); michael@0: michael@0: Svc.Obs.notify("weave:engine:start-tracking"); michael@0: michael@0: do_check_eq(0, tracker.score); michael@0: let addon = installAddon("test_bootstrap1_1"); michael@0: let changed = tracker.changedIDs; michael@0: michael@0: do_check_eq(1, Object.keys(changed).length); michael@0: do_check_true(addon.syncGUID in changed); michael@0: do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score); michael@0: michael@0: uninstallAddon(addon); michael@0: cleanup_and_advance(); michael@0: }); michael@0: michael@0: add_test(function test_track_uninstall() { michael@0: _("Ensure that uninstalling an add-on notifies tracker."); michael@0: michael@0: reconciler.startListening(); michael@0: michael@0: let addon = installAddon("test_bootstrap1_1"); michael@0: let guid = addon.syncGUID; michael@0: do_check_eq(0, tracker.score); michael@0: michael@0: Svc.Obs.notify("weave:engine:start-tracking"); michael@0: michael@0: uninstallAddon(addon); michael@0: let changed = tracker.changedIDs; michael@0: do_check_eq(1, Object.keys(changed).length); michael@0: do_check_true(guid in changed); michael@0: do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score); michael@0: michael@0: cleanup_and_advance(); michael@0: }); michael@0: michael@0: add_test(function test_track_user_disable() { michael@0: _("Ensure that tracker sees disabling of add-on"); michael@0: michael@0: reconciler.startListening(); michael@0: michael@0: let addon = installAddon("test_bootstrap1_1"); michael@0: do_check_false(addon.userDisabled); michael@0: do_check_false(addon.appDisabled); michael@0: do_check_true(addon.isActive); michael@0: michael@0: Svc.Obs.notify("weave:engine:start-tracking"); michael@0: do_check_eq(0, tracker.score); michael@0: michael@0: let cb = Async.makeSyncCallback(); michael@0: michael@0: let listener = { michael@0: onDisabled: function(disabled) { michael@0: _("onDisabled"); michael@0: if (disabled.id == addon.id) { michael@0: AddonManager.removeAddonListener(listener); michael@0: cb(); michael@0: } michael@0: }, michael@0: onDisabling: function(disabling) { michael@0: _("onDisabling add-on"); michael@0: } michael@0: }; michael@0: AddonManager.addAddonListener(listener); michael@0: michael@0: _("Disabling add-on"); michael@0: addon.userDisabled = true; michael@0: _("Disabling started..."); michael@0: Async.waitForSyncCallback(cb); michael@0: michael@0: let changed = tracker.changedIDs; michael@0: do_check_eq(1, Object.keys(changed).length); michael@0: do_check_true(addon.syncGUID in changed); michael@0: do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score); michael@0: michael@0: uninstallAddon(addon); michael@0: cleanup_and_advance(); michael@0: }); michael@0: michael@0: add_test(function test_track_enable() { michael@0: _("Ensure that enabling a disabled add-on notifies tracker."); michael@0: michael@0: reconciler.startListening(); michael@0: michael@0: let addon = installAddon("test_bootstrap1_1"); michael@0: addon.userDisabled = true; michael@0: store._sleep(0); michael@0: michael@0: do_check_eq(0, tracker.score); michael@0: michael@0: Svc.Obs.notify("weave:engine:start-tracking"); michael@0: addon.userDisabled = false; michael@0: store._sleep(0); michael@0: michael@0: let changed = tracker.changedIDs; michael@0: do_check_eq(1, Object.keys(changed).length); michael@0: do_check_true(addon.syncGUID in changed); michael@0: do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score); michael@0: michael@0: uninstallAddon(addon); michael@0: cleanup_and_advance(); michael@0: });