ChromeUtils.import("resource://services-sync/UIState.jsm", this); const { sinon } = ChromeUtils.import("resource://testing-common/Sinon.jsm"); function promiseSyncReady() { let service = Cc["@mozilla.org/weave/service;1"].getService(Ci.nsISupports) .wrappedJSObject; return service.whenLoaded(); } function setupSendTabMocks({ syncReady = true, fxaDevices = null, state = UIState.STATUS_SIGNED_IN, isSendableURI = true, }) { const sandbox = sinon.createSandbox(); sandbox.stub(gSync, "syncReady").get(() => syncReady); if (fxaDevices) { // Clone fxaDevices because it gets sorted in-place. sandbox .stub(Weave.Service.clientsEngine, "fxaDevices") .get(() => [...fxaDevices]); } sandbox .stub(Weave.Service.clientsEngine, "hasSyncedThisSession") .get(() => !!fxaDevices); sandbox.stub(UIState, "get").returns({ status: state }); sandbox.stub(gSync, "isSendableURI").returns(isSendableURI); return sandbox; }