Backed out 14 changesets (bug 1330791) for various android failures a=backout

Backed out changeset eada8de7256f (bug 1330791)
Backed out changeset a3c656a9f3ca (bug 1330791)
Backed out changeset e0cbc754e841 (bug 1330791)
Backed out changeset 49d8016fab12 (bug 1330791)
Backed out changeset 53d4b83ccd22 (bug 1330791)
Backed out changeset b35cbfcd801f (bug 1330791)
Backed out changeset 25a6356de622 (bug 1330791)
Backed out changeset 46f9c247550d (bug 1330791)
Backed out changeset ef7356099bd3 (bug 1330791)
Backed out changeset a5fe483288db (bug 1330791)
Backed out changeset 4902107b7568 (bug 1330791)
Backed out changeset 5b2b2be2e389 (bug 1330791)
Backed out changeset 610ec89e98bb (bug 1330791)
Backed out changeset 631adda26a21 (bug 1330791)

MozReview-Commit-ID: GGUFW29U3TL
This commit is contained in:
Wes Kocher 2017-01-17 17:06:36 -08:00
parent 22f4a343b5
commit 20dc006d88
96 changed files with 449 additions and 228 deletions

View File

@ -8,8 +8,22 @@ module.exports = {
/* These rules are only set to warn temporarily
until they get fixed, at which point their
respective line in this file should be removed. */
"brace-style": "warn",
"consistent-return": "warn",
"no-cond-assign": "warn",
"no-else-return": "warn",
"no-empty": "warn",
"no-ex-assign": "warn",
"no-func-assign": "warn",
"no-irregular-whitespace": "warn",
"no-mixed-spaces-and-tabs": "warn",
"no-native-reassign": "warn",
"no-nested-ternary": "warn",
"no-octal": "warn",
"no-redeclare": "warn",
"no-unreachable": "warn",
"no-unsafe-finally": "warn",
"no-unused-vars": "warn",
"no-useless-call": "warn"
}
};

View File

@ -144,6 +144,7 @@ var Bookmarks = function() {
let getRootFolder = function(name) {
let ROOT_FOLDER_ANNO = "cloudsync/rootFolder/" + name;
let ROOT_SHORTCUT_ANNO = "cloudsync/rootShortcut/" + name;
let deferred = Promise.defer();
function checkRootFolder(folderIds) {
@ -170,6 +171,7 @@ var Bookmarks = function() {
let ROOT_SHORTCUT_ANNO = "cloudsync/rootShortcut/" + name;
let deferred = Promise.defer();
let placesRootId = PlacesUtils.placesRootId;
function getRootShortcutId() {
return PlacesWrapper.getLocalIdsWithAnnotation(ROOT_SHORTCUT_ANNO);

View File

@ -54,7 +54,7 @@ EventSource.prototype = {
CommonUtils.nextTick(
function() {
for (let listener of this.listeners.get(type)) {
listener(arg);
listener.call(undefined, arg);
}
},
this

View File

@ -220,6 +220,19 @@ this.Tabs = function() {
let tabCache = new TabCache();
let getWindowEnumerator = function() {
return Services.wm.getEnumerator("navigator:browser");
};
let shouldSkipWindow = function(win) {
return win.closed ||
PrivateBrowsingUtils.isWindowPrivate(win);
};
let getTabState = function(tab) {
return JSON.parse(Session.getTabState(tab));
};
let getLocalTabs = function(filter) {
let deferred = Promise.defer();

View File

@ -1,5 +1,5 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
@ -9,61 +9,65 @@ function run_test() {
run_next_test();
}
function cleanup() {
}
add_task(function* test_merge_bookmarks_flat() {
try {
let rootFolder = yield CloudSync().bookmarks.getRootFolder("TEST");
ok(rootFolder.id, "root folder id is ok");
let rootFolder = yield CloudSync().bookmarks.getRootFolder("TEST");
ok(rootFolder.id, "root folder id is ok");
let items = [
{"id":"G_UL4ZhOyX8m", "type":rootFolder.BOOKMARK, "title":"reddit: the front page of the internet 1", "uri":"http://www.reddit.com", index:2},
{"id":"G_UL4ZhOyX8n", "type":rootFolder.BOOKMARK, "title":"reddit: the front page of the internet 2", "uri":"http://www.reddit.com?1", index:1},
];
yield rootFolder.mergeRemoteItems(items);
let items = [
{"id":"G_UL4ZhOyX8m", "type":rootFolder.BOOKMARK, "title":"reddit: the front page of the internet 1", "uri":"http://www.reddit.com", index:2},
{"id":"G_UL4ZhOyX8n", "type":rootFolder.BOOKMARK, "title":"reddit: the front page of the internet 2", "uri":"http://www.reddit.com?1", index:1},
];
yield rootFolder.mergeRemoteItems(items);
let localItems = yield rootFolder.getLocalItems();
equal(Object.keys(localItems).length, items.length, "found merged items");
let localItems = yield rootFolder.getLocalItems();
equal(Object.keys(localItems).length, items.length, "found merged items");
} finally {
yield CloudSync().bookmarks.deleteRootFolder("TEST");
yield CloudSync().bookmarks.deleteRootFolder("TEST");
}
});
add_task(function* test_merge_bookmarks_in_folders() {
try {
let rootFolder = yield CloudSync().bookmarks.getRootFolder("TEST");
ok(rootFolder.id, "root folder id is ok");
let rootFolder = yield CloudSync().bookmarks.getRootFolder("TEST");
ok(rootFolder.id, "root folder id is ok");
let items = [
{"id":"G_UL4ZhOyX8m", "type":rootFolder.BOOKMARK, "title":"reddit: the front page of the internet 1", "uri":"http://www.reddit.com", index:2},
{"id":"G_UL4ZhOyX8n", "type":rootFolder.BOOKMARK, parent:"G_UL4ZhOyX8x", "title":"reddit: the front page of the internet 2", "uri":"http://www.reddit.com/?a=å%20ä%20ö", index:1},
{"id":"G_UL4ZhOyX8x", "type":rootFolder.FOLDER},
];
yield rootFolder.mergeRemoteItems(items);
let items = [
{"id":"G_UL4ZhOyX8m", "type":rootFolder.BOOKMARK, "title":"reddit: the front page of the internet 1", "uri":"http://www.reddit.com", index:2},
{"id":"G_UL4ZhOyX8n", "type":rootFolder.BOOKMARK, parent:"G_UL4ZhOyX8x", "title":"reddit: the front page of the internet 2", "uri":"http://www.reddit.com/?a=å%20ä%20ö", index:1},
{"id":"G_UL4ZhOyX8x", "type":rootFolder.FOLDER},
];
yield rootFolder.mergeRemoteItems(items);
let localItems = yield rootFolder.getLocalItems();
equal(localItems.length, items.length, "found merged items");
let localItems = yield rootFolder.getLocalItems();
equal(localItems.length, items.length, "found merged items");
localItems.forEach(function(item) {
ok(item.id == "G_UL4ZhOyX8m" ||
item.id == "G_UL4ZhOyX8n" ||
item.id == "G_UL4ZhOyX8x");
if (item.id == "G_UL4ZhOyX8n") {
equal(item.parent, "G_UL4ZhOyX8x")
} else {
equal(item.parent, rootFolder.id);
}
});
localItems.forEach(function(item) {
ok(item.id == "G_UL4ZhOyX8m" ||
item.id == "G_UL4ZhOyX8n" ||
item.id == "G_UL4ZhOyX8x");
if (item.id == "G_UL4ZhOyX8n") {
equal(item.parent, "G_UL4ZhOyX8x")
} else {
equal(item.parent, rootFolder.id);
}
});
let folder = (yield rootFolder.getLocalItemsById(["G_UL4ZhOyX8x"]))[0];
equal(folder.id, "G_UL4ZhOyX8x");
equal(folder.type, rootFolder.FOLDER);
let folder = (yield rootFolder.getLocalItemsById(["G_UL4ZhOyX8x"]))[0];
equal(folder.id, "G_UL4ZhOyX8x");
equal(folder.type, rootFolder.FOLDER);
let bookmark = (yield rootFolder.getLocalItemsById(["G_UL4ZhOyX8n"]))[0];
equal(bookmark.id, "G_UL4ZhOyX8n");
equal(bookmark.parent, "G_UL4ZhOyX8x");
equal(bookmark.title, "reddit: the front page of the internet 2");
equal(bookmark.index, 0);
equal(bookmark.uri, "http://www.reddit.com/?a=%C3%A5%20%C3%A4%20%C3%B6");
let bookmark = (yield rootFolder.getLocalItemsById(["G_UL4ZhOyX8n"]))[0];
equal(bookmark.id, "G_UL4ZhOyX8n");
equal(bookmark.parent, "G_UL4ZhOyX8x");
equal(bookmark.title, "reddit: the front page of the internet 2");
equal(bookmark.index, 0);
equal(bookmark.uri, "http://www.reddit.com/?a=%C3%A5%20%C3%A4%20%C3%B6");
} finally {
yield CloudSync().bookmarks.deleteRootFolder("TEST");
yield CloudSync().bookmarks.deleteRootFolder("TEST");
}
});

View File

@ -345,7 +345,7 @@ StorageServerCollection.prototype = {
*/
bsos: function bsos(filter) {
let os = [];
for (let bso of Object.values(this._bsos)) {
for (let [id, bso] of Object.entries(this._bsos)) {
if (!bso.deleted) {
os.push(bso);
}
@ -440,7 +440,7 @@ StorageServerCollection.prototype = {
count: function count(options) {
options = options || {};
let c = 0;
for (let bso of Object.values(this._bsos)) {
for (let [id, bso] of Object.entries(this._bsos)) {
if (bso.modified && this._inResultSet(bso, options)) {
c++;
}
@ -598,7 +598,7 @@ StorageServerCollection.prototype = {
}
let deleted = [];
for (let bso of Object.values(this._bsos)) {
for (let [id, bso] of Object.entries(this._bsos)) {
if (this._inResultSet(bso, options)) {
this._log.debug("Deleting " + JSON.stringify(bso));
deleted.push(bso.id);
@ -730,6 +730,8 @@ StorageServerCollection.prototype = {
},
postHandler: function postHandler(request, response) {
let options = this.parseOptions(request);
if (!request.hasHeader("content-type")) {
this._log.info("No Content-Type request header!");
throw HTTP_400;
@ -1317,7 +1319,7 @@ StorageServer.prototype = {
throw HTTP_404;
}
let [, version, userPath, first, rest] = parts;
let [all, version, userPath, first, rest] = parts;
if (version != STORAGE_API_VERSION) {
this._log.debug("StorageServer: Unknown version.");
throw HTTP_404;
@ -1425,7 +1427,7 @@ StorageServer.prototype = {
this._log.warn("StorageServer: Unknown storage operation " + rest);
throw HTTP_404;
}
let [, collection, bsoID] = match;
let [all, collection, bsoID] = match;
let coll = this.getCollection(username, collection);
let collectionExisted = !!coll;

View File

@ -92,7 +92,8 @@ StringBundle.prototype = {
get(key, args) {
if (args)
return this.stringBundle.formatStringFromName(key, args, args.length);
return this.stringBundle.GetStringFromName(key);
else
return this.stringBundle.GetStringFromName(key);
},
/**

View File

@ -85,9 +85,9 @@ function run_test() {
_("Generate an execution error");
let query = "INSERT INTO moz_formhistory (fieldname, value) VALUES ('one', NULL)";
let stmt = Svc.Form.DBConnection.createStatement(query);
let except;
let r11, except;
try {
Async.querySpinningly(stmt);
r11 = Async.querySpinningly(stmt);
} catch (e) {
except = e;
}

View File

@ -64,7 +64,7 @@ add_task(function* test_something() {
server.registerPathHandler(recordsPath, handleResponse);
// Test an empty db populates
yield OneCRLBlocklistClient.maybeSync(2000, Date.now());
let result = yield OneCRLBlocklistClient.maybeSync(2000, Date.now());
// Open the collection, verify it's been populated:
// Our test data has a single record; it should be in the local collection

View File

@ -121,7 +121,7 @@ function run_test() {
add_task(function* test_records_obtained_from_server_are_stored_in_db() {
for (let {client} of gBlocklistClients) {
// Test an empty db populates
yield client.maybeSync(2000, Date.now());
let result = yield client.maybeSync(2000, Date.now());
// Open the collection, verify it's been populated:
// Our test data has a single record; it should be in the local collection
@ -139,7 +139,7 @@ add_task(function* test_list_is_written_to_file_in_profile() {
const profFile = FileUtils.getFile(KEY_PROFILEDIR, [filename]);
strictEqual(profFile.exists(), false);
yield client.maybeSync(2000, Date.now());
let result = yield client.maybeSync(2000, Date.now());
strictEqual(profFile.exists(), true);
const content = yield readJSON(profFile.path);
@ -150,6 +150,7 @@ add_task(clear_state);
add_task(function* test_current_server_time_is_saved_in_pref() {
for (let {client} of gBlocklistClients) {
const before = Services.prefs.getIntPref(client.lastCheckTimePref);
const serverTime = Date.now();
yield client.maybeSync(2000, serverTime);
const after = Services.prefs.getIntPref(client.lastCheckTimePref);
@ -161,6 +162,7 @@ add_task(clear_state);
add_task(function* test_update_json_file_when_addons_has_changes() {
for (let {client, filename, testData} of gBlocklistClients) {
yield client.maybeSync(2000, Date.now() - 1000);
const before = Services.prefs.getIntPref(client.lastCheckTimePref);
const profFile = FileUtils.getFile(KEY_PROFILEDIR, [filename]);
const fileLastModified = profFile.lastModifiedTime = profFile.lastModifiedTime - 1000;
const serverTime = Date.now();
@ -196,6 +198,7 @@ add_task(clear_state);
add_task(function* test_do_nothing_when_blocklist_is_up_to_date() {
for (let {client, filename} of gBlocklistClients) {
yield client.maybeSync(2000, Date.now() - 1000);
const before = Services.prefs.getIntPref(client.lastCheckTimePref);
const profFile = FileUtils.getFile(KEY_PROFILEDIR, [filename]);
const fileLastModified = profFile.lastModifiedTime = profFile.lastModifiedTime - 1000;
const serverTime = Date.now();

View File

@ -98,7 +98,7 @@ add_task(function* test_something() {
ok(!sss.isSecureHost(sss.HEADER_HSTS, "five.example.com", 0));
// Test an empty db populates
yield PinningPreloadClient.maybeSync(2000, Date.now());
let result = yield PinningPreloadClient.maybeSync(2000, Date.now());
let connection = yield FirefoxAdapter.openConnection({path: KINTO_STORAGE_PATH});

View File

@ -143,6 +143,7 @@ add_task(function* test_check_signatures() {
for (let key of Object.keys(responses)) {
const keyParts = key.split(":");
const method = keyParts[0];
const valueParts = keyParts[1].split("?");
const path = valueParts[0];

View File

@ -202,7 +202,7 @@ add_task(function* test_offset_after_request() {
do_check_eq(client.localtimeOffsetMsec, 0);
yield client.request("/foo", method, TEST_CREDS);
let response = yield client.request("/foo", method, TEST_CREDS);
// Should be about an hour off
do_check_true(Math.abs(client.localtimeOffsetMsec + HOUR_MS) < SECOND_MS);
@ -236,6 +236,9 @@ add_task(function* test_offset_in_hawk_header() {
});
let client = new HawkClient(server.baseURI);
function getOffset() {
return client.localtimeOffsetMsec;
}
client.now = () => {
return Date.now() + 12 * HOUR_MS;
@ -313,6 +316,9 @@ add_task(function* test_retry_request_on_fail() {
});
let client = new HawkClient(server.baseURI);
function getOffset() {
return client.localtimeOffsetMsec;
}
client.now = () => {
return Date.now() + 12 * HOUR_MS;
@ -354,6 +360,9 @@ add_task(function* test_multiple_401_retry_once() {
});
let client = new HawkClient(server.baseURI);
function getOffset() {
return client.localtimeOffsetMsec;
}
client.now = () => {
return Date.now() - 12 * HOUR_MS;
@ -393,6 +402,9 @@ add_task(function* test_500_no_retry() {
});
let client = new HawkClient(server.baseURI);
function getOffset() {
return client.localtimeOffsetMsec;
}
// Throw off the clock so the HawkClient would want to retry the request if
// it could
@ -452,6 +464,9 @@ add_task(function* test_401_then_500() {
});
let client = new HawkClient(server.baseURI);
function getOffset() {
return client.localtimeOffsetMsec;
}
client.now = () => {
return Date.now() - 12 * HOUR_MS;

View File

@ -57,6 +57,7 @@ add_test(function test_intl_accept_language() {
setLanguagePref(languages[testCount]);
function checkLanguagePref() {
var _done = false;
CommonUtils.nextTick(function() {
// Ensure we're only called for the number of entries in languages[].
do_check_true(testCount < languages.length);
@ -185,6 +186,7 @@ add_test(function test_hawk_language_pref_changed() {
});
let url = server.baseURI + "/foo";
let postData = {};
let request;
setLanguage(languages[0]);

View File

@ -83,7 +83,7 @@ add_task(function* test_SharedLogs() {
let lm2 = new LogManager("log-manager-2.test.", ["TestLog3"], "test");
let log = Log.repository.getLogger("TestLog3");
let [capp, dapp, ] = getAppenders(log);
let [capp, dapp, fapps] = getAppenders(log);
// console and dump appenders should be "trace" as it is more verbose than
// "debug"

View File

@ -248,6 +248,7 @@ add_test(function test_creation_from_empty_db() {
add_test(function test_create_from_empty_db() {
// place an empty kinto db file in the profile
let profile = do_get_profile();
let kintoDB = do_get_kinto_db();
let emptyDB = do_get_file("test_storage_adapter/empty.sqlite");
emptyDB.copyTo(profile, kintoFilename);

View File

@ -173,8 +173,8 @@ add_test(function test_url_parsing() {
do_check_eq(rest, undefined);
parts = server.storageRE.exec("storage");
let collection;
[all, , collection, ] = parts;
let storage, collection, id;
[all, storage, collection, id] = parts;
do_check_eq(all, "storage");
do_check_eq(collection, undefined);
@ -414,7 +414,7 @@ add_test(function test_bso_delete_exists() {
server.startSynchronous();
let coll = server.user("123").createCollection("test");
coll.insert("myid", {foo: "bar"});
let bso = coll.insert("myid", {foo: "bar"});
let timestamp = coll.timestamp;
server.callback.onItemDeleted = function onDeleted(username, collection, id) {

View File

@ -368,12 +368,14 @@ TokenServerClient.prototype = {
// invalid-generation.
error.message = "Authentication failed.";
error.cause = result.status;
} else if (response.status == 403) {
// 403 should represent a "condition acceptance needed" response.
//
// The extra validation of "urls" is important. We don't want to signal
// conditions required unless we are absolutely sure that is what the
// server is asking for.
}
// 403 should represent a "condition acceptance needed" response.
//
// The extra validation of "urls" is important. We don't want to signal
// conditions required unless we are absolutely sure that is what the
// server is asking for.
else if (response.status == 403) {
if (!("urls" in result)) {
this._log.warn("403 response without proper fields!");
this._log.warn("Response body: " + response.body);

View File

@ -237,6 +237,7 @@ this.CommonUtils = {
*/
encodeBase32: function encodeBase32(bytes) {
const key = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
let quanta = Math.floor(bytes.length / 5);
let leftover = bytes.length % 5;
// Pad the last quantum with zeros so the length is a multiple of 5.

View File

@ -134,6 +134,7 @@ this.CryptoUtils = {
* HMAC-based Key Derivation (RFC 5869).
*/
hkdf: function hkdf(ikm, xts, info, len) {
const BLOCKSIZE = 256 / 8;
if (typeof xts === undefined)
xts = String.fromCharCode(0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@ -260,11 +261,12 @@ this.CryptoUtils = {
forceJS) {
if (Svc.Crypto.deriveKeyFromPassphrase && !forceJS) {
return Svc.Crypto.deriveKeyFromPassphrase(passphrase, salt, keyLength);
} else {
// Fall back to JS implementation.
// 4096 is hardcoded in WeaveCrypto, so do so here.
return CryptoUtils.pbkdf2Generate(passphrase, atob(salt), 4096,
keyLength);
}
// Fall back to JS implementation.
// 4096 is hardcoded in WeaveCrypto, so do so here.
return CryptoUtils.pbkdf2Generate(passphrase, atob(salt), 4096,
keyLength);
},
/**

View File

@ -742,7 +742,7 @@ FxAccountsInternal.prototype = {
_destroyAllOAuthTokens(tokenInfos) {
// let's just destroy them all in parallel...
let promises = [];
for (let tokenInfo of Object.values(tokenInfos || {})) {
for (let [key, tokenInfo] of Object.entries(tokenInfos || {})) {
promises.push(this._destroyOAuthToken(tokenInfo));
}
return Promise.all(promises);
@ -953,6 +953,7 @@ FxAccountsInternal.prototype = {
getAssertionFromCert(data, keyPair, cert, audience) {
log.debug("getAssertionFromCert");
let payload = {};
let d = Promise.defer();
let options = {
duration: ASSERTION_LIFETIME,

View File

@ -343,11 +343,14 @@ this.FxAccountsClient.prototype = {
switch (expectedError.errno) {
case ERRNO_ACCOUNT_DOES_NOT_EXIST:
return false;
break;
case ERRNO_INCORRECT_PASSWORD:
return true;
break;
default:
// not so expected, any more ...
throw expectedError;
break;
}
}
);

View File

@ -458,6 +458,8 @@ this.FxAccountsManager = {
return this._error(ERROR_OFFLINE);
}
let deferred = Promise.defer();
if (!aEmail) {
return this._error(ERROR_INVALID_EMAIL);
}

View File

@ -30,8 +30,9 @@ function deepEqual(actual, expected) {
return true;
} else if (typeof actual != "object" && typeof expected != "object") {
return actual == expected;
} else {
return objEquiv(actual, expected);
}
return objEquiv(actual, expected);
}
function isUndefinedOrNull(value) {

View File

@ -161,13 +161,14 @@ this.FxAccountsProfileClient.prototype = {
// "response.success" means status code is 200
if (request.response.success) {
return resolve(body);
} else {
return reject(new FxAccountsProfileClientError({
error: body.error || ERROR_UNKNOWN,
errno: body.errno || ERRNO_UNKNOWN_ERROR,
code: request.response.status,
message: body.message || body,
}));
}
return reject(new FxAccountsProfileClientError({
error: body.error || ERROR_UNKNOWN,
errno: body.errno || ERRNO_UNKNOWN_ERROR,
code: request.response.status,
message: body.message || body,
}));
};
if (method === "GET") {

View File

@ -135,6 +135,7 @@ FxAccountsPushService.prototype = {
return this.unsubscribe().catch(err => {
this.log.error("Error during unsubscribe", err);
});
break;
default:
break;
}
@ -168,9 +169,11 @@ FxAccountsPushService.prototype = {
break;
case ON_DEVICE_DISCONNECTED_NOTIFICATION:
return this.fxAccounts.handleDeviceDisconnection(payload.data.id);
break;
case ON_PASSWORD_CHANGED_NOTIFICATION:
case ON_PASSWORD_RESET_NOTIFICATION:
return this._onPasswordChanged();
break;
case ON_COLLECTION_CHANGED_NOTIFICATION:
Services.obs.notifyObservers(null, ON_COLLECTION_CHANGED_NOTIFICATION, payload.data.collections);
default:

View File

@ -12,7 +12,7 @@ const StubAlertsService = {
showAlertNotification(image, title, text, clickable, cookie, clickCallback) {
// We can't simulate a click on the alert popup,
// so instead we call the click listener ourselves directly
clickCallback.observe(null, "alertclickcallback", null);
clickCallback.observe.call(clickCallback, null, "alertclickcallback", null);
}
}

View File

@ -1004,7 +1004,7 @@ add_task(function* test_sign_out_without_device() {
delete credentials.deviceId;
yield fxa.internal.setSignedInUser(credentials);
yield fxa.internal.getUserAccountData();
const user = yield fxa.internal.getUserAccountData();
const spy = {
signOut: { count: 0, args: [] },

View File

@ -182,6 +182,7 @@ add_task(function* test_updateDeviceRegistration_with_new_device() {
add_task(function* test_updateDeviceRegistration_with_existing_device() {
const deviceName = "phil's device";
const deviceType = "desktop";
const credentials = getTestUser("pb");
const fxa = new MockFxAccounts({ name: deviceName });
@ -362,6 +363,7 @@ add_task(function* test_updateDeviceRegistration_with_device_session_conflict_er
add_task(function* test_updateDeviceRegistration_with_unrecoverable_error() {
const deviceName = "foo";
const deviceType = "bar";
const credentials = getTestUser("baz");
delete credentials.deviceId;

View File

@ -586,6 +586,7 @@ add_task(function* test_signCertificate() {
});
add_task(function* test_accountExists() {
let sessionMessage = JSON.stringify({sessionToken: FAKE_SESSION_TOKEN});
let existsMessage = JSON.stringify({error: "wrong password", code: 400, errno: 103});
let doesntExistMessage = JSON.stringify({error: "no such account", code: 400, errno: 102});
let emptyMessage = "{}";
@ -618,6 +619,7 @@ add_task(function* test_accountExists() {
default:
throw new Error("Unexpected login from " + jsonBody.email);
break;
}
},
});

View File

@ -67,6 +67,8 @@ add_task(function* test_onepw_setup_credentials() {
});
add_task(function* test_client_stretch_kdf() {
let pbkdf2 = CryptoUtils.pbkdf2Generate;
let hkdf = CryptoUtils.hkdf;
let expected = vectors["client stretch-KDF"];
let email = h2s(expected.email);

View File

@ -184,7 +184,7 @@ add_task(function* fetchAndCacheProfileOnce() {
let profile = CreateFxAccountsProfile(null, client);
let request1 = profile._fetchAndCacheProfile();
profile._fetchAndCacheProfile();
let request2 = profile._fetchAndCacheProfile();
// should be one request made to fetch the profile (but the promise returned
// by it remains unresolved)

View File

@ -491,8 +491,9 @@ function validationHelper(params, expected) {
} catch (e) {
if (typeof expected === "string") {
return do_check_eq(e.toString(), expected);
} else {
return do_check_true(e.toString().match(expected));
}
return do_check_true(e.toString().match(expected));
}
throw new Error("Validation helper error");
}

View File

@ -110,9 +110,10 @@ let SyncedTabsInternal = {
let engine = Weave.Service.engineManager.get("tabs");
let seenURLs = new Set();
let parentIndex = 0;
let ntabs = 0;
for (let client of Object.values(engine.getAllClients())) {
for (let [guid, client] of Object.entries(engine.getAllClients())) {
if (!Weave.Service.clientsEngine.remoteClientExists(client.id)) {
continue;
}

View File

@ -296,8 +296,9 @@ AddonsReconciler.prototype = {
if (element == listener) {
this._log.debug("Removing change listener.");
return false;
} else {
return true;
}
return true;
}.bind(this));
},
@ -486,7 +487,7 @@ AddonsReconciler.prototype = {
for (let listener of this._listeners) {
try {
listener.changeListener(date, change, state);
listener.changeListener.call(listener, date, change, state);
} catch (ex) {
this._log.warn("Exception calling change listener", ex);
}

View File

@ -314,8 +314,9 @@ AddonUtilsInternal.prototype = {
if (param.indexOf("src=") == 0) {
return "src=sync";
} else {
return param;
}
return param;
});
addon.sourceURI.query = params.join("&");

View File

@ -324,6 +324,7 @@ class BookmarkValidator {
let deletedRecords = [];
let folders = [];
let problems = [];
let problemData = new BookmarkProblemData();
@ -619,6 +620,8 @@ class BookmarkValidator {
this._validateClient(problemData, clientRecords);
let matches = [];
let allRecords = new Map();
let serverDeletedLookup = new Set(inspectionInfo.deletedRecords.map(r => r.id));

View File

@ -407,8 +407,9 @@ this.BrowserIDManager.prototype = {
// field directly and instead call a isSyncKeyValid() function
// that we can override.
return "99999999999999999999999999";
} else {
return null;
}
return null;
},
set syncKey(value) {

View File

@ -153,6 +153,7 @@ class CollectionValidator {
}
}
let recordPairs = [];
let seenClient = new Map();
for (let record of clientItems) {
let id = record[this.idProp];

View File

@ -929,13 +929,15 @@ SyncEngine.prototype = {
engines[this.name] = engineData;
metaGlobal.payload.engines = engines;
metaGlobal.changed = true;
} else if (engineData.version > this.version) {
// Don't sync this engine if the server has newer data
}
// Don't sync this engine if the server has newer data
else if (engineData.version > this.version) {
let error = new String("New data: " + [engineData.version, this.version]);
error.failureCode = VERSION_OUT_OF_DATE;
throw error;
} else if (engineData.syncID != this.syncID) {
// Changes to syncID mean we'll need to upload everything
}
// Changes to syncID mean we'll need to upload everything
else if (engineData.syncID != this.syncID) {
this._log.debug("Engine syncIDs: " + [engineData.syncID, this.syncID]);
this.syncID = engineData.syncID;
this._resetClient();

View File

@ -336,7 +336,7 @@ BookmarksEngine.prototype = {
}
for (let [node, parent] of walkBookmarksRoots(tree)) {
let {guid, type: placeType} = node;
let {guid, id, type: placeType} = node;
guid = PlacesSyncUtils.bookmarks.guidToSyncId(guid);
let key;
switch (placeType) {
@ -1047,15 +1047,17 @@ BookmarksTracker.prototype = {
if (PlacesUtils.bookmarks.getIdForItemAt(PlacesUtils.mobileFolderId, 0) == -1) {
if (mobile.length != 0)
PlacesUtils.bookmarks.removeItem(mobile[0], SOURCE_SYNC);
} else if (mobile.length == 0) {
// Add the mobile bookmarks query if it doesn't exist
}
// Add the mobile bookmarks query if it doesn't exist
else if (mobile.length == 0) {
let query = PlacesUtils.bookmarks.insertBookmark(all[0], queryURI, -1, title, /* guid */ null, SOURCE_SYNC);
PlacesUtils.annotations.setItemAnnotation(query, ORGANIZERQUERY_ANNO, MOBILE_ANNO, 0,
PlacesUtils.annotations.EXPIRE_NEVER, SOURCE_SYNC);
PlacesUtils.annotations.setItemAnnotation(query, PlacesUtils.EXCLUDE_FROM_BACKUP_ANNO, 1, 0,
PlacesUtils.annotations.EXPIRE_NEVER, SOURCE_SYNC);
} else {
// Make sure the existing query URL and title are correct
}
// Make sure the existing query URL and title are correct
else {
if (!PlacesUtils.bookmarks.getBookmarkURI(mobile[0]).equals(queryURI)) {
PlacesUtils.bookmarks.changeBookmarkURI(mobile[0], queryURI,
SOURCE_SYNC);

View File

@ -594,8 +594,9 @@ ClientEngine.prototype = {
if (!commandData) {
this._log.error("Unknown command to send: " + command);
return;
} else if (!args || args.length != commandData.args) {
// Don't send a command with the wrong number of arguments.
}
// Don't send a command with the wrong number of arguments.
else if (!args || args.length != commandData.args) {
this._log.error("Expected " + commandData.args + " args for '" +
command + "', but got " + args);
return;

View File

@ -295,6 +295,7 @@ IdentityManager.prototype = {
// Clear any cached Sync Key Bundle and regenerate it.
this._syncKeyBundle = null;
let bundle = this.syncKeyBundle;
this._syncKeyUpdated = true;
},

View File

@ -163,7 +163,7 @@ AsyncResource.prototype = {
this._log.debug("No authenticator found.");
}
for (let key of Object.values(headers)) {
for (let [key, value] of Object.entries(headers)) {
if (key == "authorization")
this._log.trace("HTTP Header " + key + ": ***** (suppressed)");
else

View File

@ -616,7 +616,7 @@ Sync11Service.prototype = {
let cryptoResp = cryptoKeys.fetch(this.resource(this.cryptoKeysURL)).response;
if (cryptoResp.success) {
this.handleFetchedKeys(syncKeyBundle, cryptoKeys);
let keysChanged = this.handleFetchedKeys(syncKeyBundle, cryptoKeys);
return true;
} else if (cryptoResp.status == 404) {
// On failure, ask to generate new keys and upload them.
@ -662,9 +662,11 @@ Sync11Service.prototype = {
// Last-ditch case.
return false;
} else {
// No update needed: we're good!
return true;
}
// No update needed: we're good!
return true;
} catch (ex) {
// This means no keys are present, or there's a network error.
this._log.debug("Failed to fetch and verify keys", ex);
@ -1090,6 +1092,8 @@ Sync11Service.prototype = {
// Stuff we need to do after login, before we can really do
// anything (e.g. key setup).
_remoteSetup: function _remoteSetup(infoResponse) {
let reset = false;
if (!this._fetchServerConfiguration()) {
return false;
}
@ -1221,18 +1225,19 @@ Sync11Service.prototype = {
}
return true;
}
if (!this.upgradeSyncKey(meta.payload.syncID)) {
this._log.warn("Failed to upgrade sync key. Failing remote setup.");
return false;
}
} else {
if (!this.upgradeSyncKey(meta.payload.syncID)) {
this._log.warn("Failed to upgrade sync key. Failing remote setup.");
return false;
}
if (!this.verifyAndFetchSymmetricKeys(infoResponse)) {
this._log.warn("Failed to fetch symmetric keys. Failing remote setup.");
return false;
}
if (!this.verifyAndFetchSymmetricKeys(infoResponse)) {
this._log.warn("Failed to fetch symmetric keys. Failing remote setup.");
return false;
}
return true;
return true;
}
},
/**
@ -1312,7 +1317,7 @@ Sync11Service.prototype = {
synchronizer.sync(engineNamesToSync);
// wait() throws if the first argument is truthy, which is exactly what
// we want.
cb.wait();
let result = cb.wait();
histogram = Services.telemetry.getHistogramById("WEAVE_COMPLETE_SUCCESS_COUNT");
histogram.add(1);
@ -1500,7 +1505,7 @@ Sync11Service.prototype = {
this.upgradeSyncKey(this.syncID);
// Wipe the server.
this.wipeServer();
let wipeTimestamp = this.wipeServer();
// Upload a new meta/global record.
let meta = new WBORecord("meta", "global");
@ -1516,6 +1521,8 @@ Sync11Service.prototype = {
this.uploadMetaGlobal(meta);
// Wipe everything we know about except meta because we just uploaded it
let engines = [this.clientsEngine].concat(this.engineManager.getAll());
let collections = engines.map(engine => engine.name);
// TODO: there's a bug here. We should be calling resetClient, no?
// Generate, upload, and download new keys. Do this last so we don't wipe
@ -1595,8 +1602,9 @@ Sync11Service.prototype = {
this.resetService();
engines = [this.clientsEngine].concat(this.engineManager.getAll());
} else {
// Convert the array of names into engines
}
// Convert the array of names into engines
else {
engines = this.engineManager.get(engines);
}
@ -1631,8 +1639,9 @@ Sync11Service.prototype = {
engines.forEach(function(e) {
this.clientsEngine.sendCommand("wipeEngine", [e]);
}, this);
} else {
// Tell the remote machines to wipe themselves.
}
// Tell the remote machines to wipe themselves.
else {
this.clientsEngine.sendCommand("wipeAll", []);
}
@ -1671,8 +1680,9 @@ Sync11Service.prototype = {
this.resetService();
engines = [this.clientsEngine].concat(this.engineManager.getAll());
} else {
// Convert the array of names into engines
}
// Convert the array of names into engines
else {
engines = this.engineManager.get(engines);
}

View File

@ -91,5 +91,5 @@ pref("services.sync.validation.interval", 86400); // 24 hours in seconds
// and you meet the maxRecord checks.
pref("services.sync.validation.percentageChance", 10);
// We won't validate an engine if it has more than this many records on the server.
// We won't validate an engine if it has more than this many records on the server.
pref("services.sync.validation.maxRecords", 100);

View File

@ -79,7 +79,7 @@ var bookmarkMods = {
};
// a list of bookmarks to delete during a 'delete' action
bookmarksToDelete = {
var bookmarksToDelete = {
"menu": [
{ folder: "foldera" },
{ folder: "folderb" },

View File

@ -199,7 +199,7 @@ ServerCollection.prototype = {
*/
wbos: function wbos(filter) {
let os = [];
for (let wbo of Object.values(this._wbos)) {
for (let [id, wbo] of Object.entries(this._wbos)) {
if (wbo.payload) {
os.push(wbo);
}
@ -276,7 +276,7 @@ ServerCollection.prototype = {
count(options) {
options = options || {};
let c = 0;
for (let wbo of Object.values(this._wbos)) {
for (let [id, wbo] of Object.entries(this._wbos)) {
if (wbo.modified && this._inResultSet(wbo, options)) {
c++;
}
@ -288,7 +288,7 @@ ServerCollection.prototype = {
let result;
if (options.full) {
let data = [];
for (let wbo of Object.values(this._wbos)) {
for (let [id, wbo] of Object.entries(this._wbos)) {
// Drop deleted.
if (wbo.modified && this._inResultSet(wbo, options)) {
data.push(wbo.get());
@ -361,7 +361,7 @@ ServerCollection.prototype = {
delete(options) {
let deleted = [];
for (let wbo of Object.values(this._wbos)) {
for (let [id, wbo] of Object.entries(this._wbos)) {
if (this._inResultSet(wbo, options)) {
this._log.debug("Deleting " + JSON.stringify(wbo));
deleted.push(wbo.id);
@ -848,7 +848,7 @@ SyncServer.prototype = {
throw HTTP_404;
}
let [, version, username, first, rest] = parts;
let [all, version, username, first, rest] = parts;
// Doing a float compare of the version allows for us to pretend there was
// a node-reassignment - eg, we could re-assign from "1.1/user/" to
// "1.10/user" - this server will then still accept requests with the new
@ -916,7 +916,7 @@ SyncServer.prototype = {
this._log.warn("SyncServer: Unknown storage operation " + rest);
throw HTTP_404;
}
let [, collection, wboID] = match;
let [all, collection, wboID] = match;
let coll = this.getCollection(username, collection);
switch (req.method) {
case "GET":

View File

@ -23,6 +23,8 @@ function createAndStartHTTPServer(port = HTTP_PORT) {
try {
let server = new HttpServer();
let bootstrap1XPI = ExtensionsTestPath("/addons/test_bootstrap1_1.xpi");
server.registerFile("/search/guid:missing-sourceuri%40tests.mozilla.org",
do_get_file("missing-sourceuri.xml"));

View File

@ -106,6 +106,7 @@ add_test(function test_uninstall_detection() {
let addon = installAddon("test_bootstrap1_1");
let id = addon.id;
let guid = addon.syncGUID;
reconciler._changes = [];
uninstallAddon(addon);

View File

@ -174,7 +174,7 @@ add_test(function test_ignore_different_appid() {
do_check_eq(0, failed.length);
let newAddon = getAddonFromAddonManagerByID(addon.id);
do_check_false(newAddon.userDisabled);
do_check_false(addon.userDisabled);
uninstallAddon(addon);
@ -193,7 +193,7 @@ add_test(function test_ignore_unknown_source() {
do_check_eq(0, failed.length);
let newAddon = getAddonFromAddonManagerByID(addon.id);
do_check_false(newAddon.userDisabled);
do_check_false(addon.userDisabled);
uninstallAddon(addon);
@ -431,7 +431,7 @@ add_test(function test_create_bad_install() {
let guid = Utils.makeGUID();
let record = createRecordForThisApp(guid, id, true, false);
/* let failed = */ store.applyIncomingBatch([record]);
let failed = store.applyIncomingBatch([record]);
// This addon had no source URI so was skipped - but it's not treated as
// failure.
// XXX - this test isn't testing what we thought it was. Previously the addon

View File

@ -141,7 +141,7 @@ add_task(async function test_dupe_bookmark() {
try {
// The parent folder and one bookmark in it.
let {id: folder1_id, guid: folder1_guid } = createFolder(bms.toolbarFolder, "Folder 1");
let {guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
let {id: bmk1_id, guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
engine.sync();
@ -192,7 +192,7 @@ add_task(async function test_dupe_reparented_bookmark() {
try {
// The parent folder and one bookmark in it.
let {id: folder1_id, guid: folder1_guid } = createFolder(bms.toolbarFolder, "Folder 1");
let {guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
let {id: bmk1_id, guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
// Another parent folder *with the same name*
let {id: folder2_id, guid: folder2_guid } = createFolder(bms.toolbarFolder, "Folder 1");
@ -258,7 +258,7 @@ add_task(async function test_dupe_reparented_locally_changed_bookmark() {
try {
// The parent folder and one bookmark in it.
let {id: folder1_id, guid: folder1_guid } = createFolder(bms.toolbarFolder, "Folder 1");
let {guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
let {id: bmk1_id, guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
// Another parent folder *with the same name*
let {id: folder2_id, guid: folder2_guid } = createFolder(bms.toolbarFolder, "Folder 1");
@ -335,9 +335,9 @@ add_task(async function test_dupe_reparented_to_earlier_appearing_parent_bookmar
try {
// The parent folder and one bookmark in it.
let {id: folder1_id, guid: folder1_guid } = createFolder(bms.toolbarFolder, "Folder 1");
let {guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
let {id: bmk1_id, guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
// One more folder we'll use later.
let {guid: folder2_guid} = createFolder(bms.toolbarFolder, "A second folder");
let {id: folder2_id, guid: folder2_guid} = createFolder(bms.toolbarFolder, "A second folder");
do_print(`folder1=${folder1_guid}, bmk1=${bmk1_guid} folder2=${folder2_guid}`);
@ -412,9 +412,9 @@ add_task(async function test_dupe_reparented_to_later_appearing_parent_bookmark(
try {
// The parent folder and one bookmark in it.
let {id: folder1_id, guid: folder1_guid } = createFolder(bms.toolbarFolder, "Folder 1");
let {guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
let {id: bmk1_id, guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
// One more folder we'll use later.
let {guid: folder2_guid} = createFolder(bms.toolbarFolder, "A second folder");
let {id: folder2_id, guid: folder2_guid} = createFolder(bms.toolbarFolder, "A second folder");
do_print(`folder1=${folder1_guid}, bmk1=${bmk1_guid} folder2=${folder2_guid}`);
@ -489,9 +489,9 @@ add_task(async function test_dupe_reparented_to_future_arriving_parent_bookmark(
try {
// The parent folder and one bookmark in it.
let {id: folder1_id, guid: folder1_guid } = createFolder(bms.toolbarFolder, "Folder 1");
let {guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
let {id: bmk1_id, guid: bmk1_guid} = createBookmark(folder1_id, "http://getfirefox.com/", "Get Firefox!");
// One more folder we'll use later.
let {guid: folder2_guid} = createFolder(bms.toolbarFolder, "A second folder");
let {id: folder2_id, guid: folder2_guid} = createFolder(bms.toolbarFolder, "A second folder");
do_print(`folder1=${folder1_guid}, bmk1=${bmk1_guid} folder2=${folder2_guid}`);
@ -608,7 +608,7 @@ add_task(async function test_dupe_empty_folder() {
try {
// The folder we will end up duping away.
let {guid: folder1_guid } = createFolder(bms.toolbarFolder, "Folder 1");
let {id: folder1_id, guid: folder1_guid } = createFolder(bms.toolbarFolder, "Folder 1");
engine.sync();

View File

@ -49,6 +49,7 @@ add_task(async function test_delete_invalid_roots_from_server() {
let engine = new BookmarksEngine(Service);
let store = engine._store;
let tracker = engine._tracker;
let server = serverForFoo(engine);
await SyncTestingInfrastructure(server);
@ -105,6 +106,7 @@ add_task(async function test_change_during_sync() {
let engine = new BookmarksEngine(Service);
let store = engine._store;
let tracker = engine._tracker;
let server = serverForFoo(engine);
await SyncTestingInfrastructure(server);
@ -254,9 +256,11 @@ add_task(async function test_change_during_sync() {
add_task(async function bad_record_allIDs() {
let server = new SyncServer();
server.start();
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
_("Ensure that bad Places queries don't cause an error in getAllIDs.");
let engine = new BookmarksEngine(Service);
let store = engine._store;
let badRecordID = PlacesUtils.bookmarks.insertBookmark(
PlacesUtils.bookmarks.toolbarFolder,
Utils.makeURI("place:folder=1138"),
@ -315,8 +319,10 @@ add_task(async function test_processIncoming_error_orderChildren() {
let bmk1_id = PlacesUtils.bookmarks.insertBookmark(
folder1_id, fxuri, PlacesUtils.bookmarks.DEFAULT_INDEX, "Get Firefox!");
let bmk1_guid = store.GUIDForId(bmk1_id);
let bmk2_id = PlacesUtils.bookmarks.insertBookmark(
folder1_id, tburi, PlacesUtils.bookmarks.DEFAULT_INDEX, "Get Thunderbird!");
let bmk2_guid = store.GUIDForId(bmk2_id);
// Create a server record for folder1 where we flip the order of
// the children.

View File

@ -26,6 +26,7 @@ add_task(async function test_bookmark_record() {
log.info("Creating a record");
let u = "http://localhost:8080/storage/bookmarks/foo";
let placesItem = new PlacesItem("bookmarks", "foo", "bookmark");
let bookmarkItem = prepareBookmarkItem("bookmarks", "foo");

View File

@ -188,6 +188,8 @@ add_task(async function test_smart_bookmarks_duped() {
let record = store.createRecord(mostVisitedGUID);
_("Prepare sync.");
let collection = server.user("foo").collection("bookmarks");
try {
engine._syncStartup();

View File

@ -129,7 +129,7 @@ var populateTree = async function populate(parentId, ...items) {
}
async function insertBookmarksToMigrate() {
await PlacesUtils.bookmarks.insert({
let mozBmk = await PlacesUtils.bookmarks.insert({
guid: "0gtWTOgYcoJD",
parentGuid: PlacesUtils.bookmarks.menuGuid,
url: "https://mozilla.org",
@ -144,7 +144,7 @@ async function insertBookmarksToMigrate() {
parentGuid: PlacesUtils.bookmarks.menuGuid,
url: "http://getthunderbird.com",
});
await PlacesUtils.bookmarks.insert({
let bzBmk = await PlacesUtils.bookmarks.insert({
guid: "YK5Bdq5MIqL6",
parentGuid: PlacesUtils.bookmarks.menuGuid,
url: "https://bugzilla.mozilla.org",
@ -217,7 +217,7 @@ add_task(async function test_batch_tracking() {
PlacesUtils.bookmarks.runInBatchMode({
runBatched() {
PlacesUtils.bookmarks.createFolder(
let folder = PlacesUtils.bookmarks.createFolder(
PlacesUtils.bookmarks.bookmarksMenuFolder,
"Test Folder", PlacesUtils.bookmarks.DEFAULT_INDEX);
// We should be tracking the new folder and its parent (and need to jump
@ -244,7 +244,7 @@ add_task(async function test_nested_batch_tracking() {
PlacesUtils.bookmarks.runInBatchMode({
runBatched() {
PlacesUtils.bookmarks.createFolder(
let folder = PlacesUtils.bookmarks.createFolder(
PlacesUtils.bookmarks.bookmarksMenuFolder,
"Test Folder", PlacesUtils.bookmarks.DEFAULT_INDEX);
// We should be tracking the new folder and its parent (and need to jump
@ -667,6 +667,7 @@ add_task(async function test_onItemKeywordChanged() {
let folder = PlacesUtils.bookmarks.createFolder(
PlacesUtils.bookmarks.bookmarksMenuFolder, "Parent",
PlacesUtils.bookmarks.DEFAULT_INDEX);
let folderGUID = engine._store.GUIDForId(folder);
_("Track changes to keywords");
let uri = Utils.makeURI("http://getfirefox.com");
let b = PlacesUtils.bookmarks.insertBookmark(
@ -802,6 +803,7 @@ add_task(async function test_onItemAnnoChanged() {
let folder = PlacesUtils.bookmarks.createFolder(
PlacesUtils.bookmarks.bookmarksMenuFolder, "Parent",
PlacesUtils.bookmarks.DEFAULT_INDEX);
let folderGUID = engine._store.GUIDForId(folder);
_("Track changes to annos.");
let b = PlacesUtils.bookmarks.insertBookmark(
folder, Utils.makeURI("http://getfirefox.com"),
@ -1072,7 +1074,7 @@ add_task(async function test_async_onItemMoved_update() {
try {
await stopTracking();
await PlacesUtils.bookmarks.insert({
let fxBmk = await PlacesUtils.bookmarks.insert({
type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
parentGuid: PlacesUtils.bookmarks.menuGuid,
url: "http://getfirefox.com",
@ -1299,16 +1301,18 @@ add_task(async function test_treeMoved() {
let folder2_guid = engine._store.GUIDForId(folder2_id);
// Create a couple of bookmarks in the second folder.
PlacesUtils.bookmarks.insertBookmark(
let fx_id = PlacesUtils.bookmarks.insertBookmark(
folder2_id,
Utils.makeURI("http://getfirefox.com"),
PlacesUtils.bookmarks.DEFAULT_INDEX,
"Get Firefox!");
PlacesUtils.bookmarks.insertBookmark(
let fx_guid = engine._store.GUIDForId(fx_id);
let tb_id = PlacesUtils.bookmarks.insertBookmark(
folder2_id,
Utils.makeURI("http://getthunderbird.com"),
PlacesUtils.bookmarks.DEFAULT_INDEX,
"Get Thunderbird!");
let tb_guid = engine._store.GUIDForId(tb_id);
await startTracking();
@ -1328,11 +1332,12 @@ add_task(async function test_onItemDeleted() {
_("Bookmarks deleted via the synchronous API should be tracked");
try {
PlacesUtils.bookmarks.insertBookmark(
let fx_id = PlacesUtils.bookmarks.insertBookmark(
PlacesUtils.bookmarks.bookmarksMenuFolder,
Utils.makeURI("http://getfirefox.com"),
PlacesUtils.bookmarks.DEFAULT_INDEX,
"Get Firefox!");
let fx_guid = engine._store.GUIDForId(fx_id);
let tb_id = PlacesUtils.bookmarks.insertBookmark(
PlacesUtils.bookmarks.bookmarksMenuFolder,
Utils.makeURI("http://getthunderbird.com"),
@ -1365,7 +1370,7 @@ add_task(async function test_async_onItemDeleted() {
url: "http://getfirefox.com",
title: "Get Firefox!",
});
await PlacesUtils.bookmarks.insert({
let tbBmk = await PlacesUtils.bookmarks.insert({
type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
parentGuid: PlacesUtils.bookmarks.menuGuid,
url: "http://getthunderbird.com",

View File

@ -473,19 +473,20 @@ add_task(async function test_refreshCertificateOn401() {
headers: {"content-type": "application/json"},
body: JSON.stringify({}),
};
} else {
didReturn200 = true;
return {
status: 200,
headers: {"content-type": "application/json"},
body: JSON.stringify({
id: "id",
key: "key",
api_endpoint: "http://example.com/",
uid: "uid",
duration: 300,
})
};
}
didReturn200 = true;
return {
status: 200,
headers: {"content-type": "application/json"},
body: JSON.stringify({
id: "id",
key: "key",
api_endpoint: "http://example.com/",
uid: "uid",
duration: 300,
})
};
});
browseridManager._tokenServerClient = mockTSC;
@ -747,7 +748,7 @@ add_task(async function test_signedInUserMissing() {
_("BrowserIDManager detects getSignedInUser returning incomplete account data");
let browseridManager = new BrowserIDManager();
makeIdentityConfig();
let config = makeIdentityConfig();
// Delete stored keys and the key fetch token.
delete identityConfig.fxaccount.user.kA;
delete identityConfig.fxaccount.user.kB;

View File

@ -336,6 +336,7 @@ add_test(function test_client_name_change() {
let tracker = engine._tracker;
let localID = engine.localID;
let initialName = engine.localName;
Svc.Obs.notify("weave:engine:start-tracking");
@ -372,7 +373,7 @@ add_test(function test_send_command() {
let rec = new ClientsRec("clients", remoteId);
store.create(rec);
store.createRecord(remoteId, "clients");
let remoteRecord = store.createRecord(remoteId, "clients");
let action = "testCommand";
let args = ["foo", "bar"];
@ -468,6 +469,7 @@ add_test(function test_command_duplication() {
engine.sendCommand(action, args, remoteId);
engine.sendCommand(action, args, remoteId);
let newRecord = store._remoteClients[remoteId];
let clientCommands = engine._readCommands()[remoteId];
equal(clientCommands.length, 1);
@ -774,7 +776,7 @@ add_test(function test_send_uri_to_client_for_display() {
let rec = new ClientsRec("clients", remoteId);
rec.name = "remote";
store.create(rec);
store.createRecord(remoteId, "clients");
let remoteRecord = store.createRecord(remoteId, "clients");
tracker.clearChangedIDs();
let initialScore = tracker.score;
@ -900,6 +902,7 @@ add_task(async function test_merge_commands() {
crypto: {}
};
let server = serverForUsers({"foo": "password"}, contents);
let user = server.user("foo");
await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
@ -933,6 +936,8 @@ add_task(async function test_merge_commands() {
}), now - 10));
try {
let store = engine._store;
_("First sync. 2 records downloaded.");
strictEqual(engine.lastRecordUpload, 0);
engine._sync();
@ -978,6 +983,7 @@ add_task(async function test_duplicate_remote_commands() {
crypto: {}
};
let server = serverForUsers({"foo": "password"}, contents);
let user = server.user("foo");
await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
@ -993,6 +999,8 @@ add_task(async function test_duplicate_remote_commands() {
}), now - 10));
try {
let store = engine._store;
_("First sync. 1 record downloaded.");
strictEqual(engine.lastRecordUpload, 0);
engine._sync();
@ -1045,6 +1053,7 @@ add_task(async function test_upload_after_reboot() {
crypto: {}
};
let server = serverForUsers({"foo": "password"}, contents);
let user = server.user("foo");
await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
@ -1073,6 +1082,8 @@ add_task(async function test_upload_after_reboot() {
}), now - 10));
try {
let store = engine._store;
_("First sync. 2 records downloaded.");
strictEqual(engine.lastRecordUpload, 0);
engine._sync();
@ -1081,7 +1092,7 @@ add_task(async function test_upload_after_reboot() {
engine.sendCommand("displayURI", ["https://example.com", engine.localID, "Yak Herders Anonymous"], deviceBID);
const oldUploadOutgoing = SyncEngine.prototype._uploadOutgoing;
SyncEngine.prototype._uploadOutgoing = () => engine._onRecordsWritten([], [deviceBID]);
SyncEngine.prototype._uploadOutgoing = () => engine._onRecordsWritten.call(engine, [], [deviceBID]);
engine._sync();
let collection = server.getCollection("foo", "clients");
@ -1135,6 +1146,7 @@ add_task(async function test_keep_cleared_commands_after_reboot() {
crypto: {}
};
let server = serverForUsers({"foo": "password"}, contents);
let user = server.user("foo");
await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
@ -1176,12 +1188,14 @@ add_task(async function test_keep_cleared_commands_after_reboot() {
}), now - 10));
try {
let store = engine._store;
_("First sync. Download remote and our record.");
strictEqual(engine.lastRecordUpload, 0);
let collection = server.getCollection("foo", "clients");
const oldUploadOutgoing = SyncEngine.prototype._uploadOutgoing;
SyncEngine.prototype._uploadOutgoing = () => engine._onRecordsWritten([], [deviceBID]);
SyncEngine.prototype._uploadOutgoing = () => engine._onRecordsWritten.call(engine, [], [deviceBID]);
let commandsProcessed = 0;
engine._handleDisplayURIs = (uris) => { commandsProcessed = uris.length };
@ -1260,6 +1274,7 @@ add_task(async function test_deleted_commands() {
crypto: {}
};
let server = serverForUsers({"foo": "password"}, contents);
let user = server.user("foo");
await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
@ -1285,6 +1300,8 @@ add_task(async function test_deleted_commands() {
}), now - 10));
try {
let store = engine._store;
_("First sync. 2 records downloaded.");
engine._sync();
@ -1326,6 +1343,7 @@ add_task(async function test_send_uri_ack() {
crypto: {}
};
let server = serverForUsers({"foo": "password"}, contents);
let user = server.user("foo");
await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
@ -1393,10 +1411,15 @@ add_task(async function test_command_sync() {
let server = serverForUsers({"foo": "password"}, contents);
await SyncTestingInfrastructure(server);
let user = server.user("foo");
let collection = server.getCollection("foo", "clients");
let remoteId = Utils.makeGUID();
let remoteId2 = Utils.makeGUID();
function clientWBO(id) {
return user.collection("clients").wbo(id);
}
_("Create remote client record 1");
server.insertWBO("foo", "clients", new ServerWBO(remoteId, encryptPayload({
id: remoteId,

View File

@ -11,6 +11,10 @@ add_task(async function test_clients_escape() {
_("Set up test fixtures.");
await configureIdentity();
let baseUri = "http://fakebase/1.1/foo/storage/";
let pubUri = baseUri + "keys/pubkey";
let privUri = baseUri + "keys/privkey";
let keyBundle = Service.identity.syncKeyBundle;
let engine = Service.clientsEngine;

View File

@ -126,13 +126,13 @@ add_test(function test_total_limit() {
const recordLimit = 11;
const batchSize = 2;
const lastModified = "111111";
let { records, requests, coll } = get_test_collection_info({
let { records, responses, requests, coll } = get_test_collection_info({
totalRecords,
batchSize,
lastModified,
});
coll.limit = recordLimit;
coll.getBatched(batchSize);
let response = coll.getBatched(batchSize);
equal(requests.length, Math.ceil(recordLimit / batchSize));
equal(records.length, recordLimit);
@ -180,7 +180,7 @@ add_test(function test_get_throws() {
const totalRecords = 11;
const batchSize = 2;
const lastModified = "111111";
let { records, requests, coll } = get_test_collection_info({
let { records, responses, requests, coll } = get_test_collection_info({
totalRecords,
batchSize,
lastModified,

View File

@ -90,6 +90,8 @@ add_task(async function test_locally_changed_keys() {
_("Tabs modified: " + johndoe.modified("tabs"));
do_check_true(johndoe.modified("tabs") > 0);
let coll_modified = Service.collectionKeys.lastModified;
// Let's create some server side history records.
let liveKeys = Service.collectionKeys.keyForCollection("history");
_("Keys now: " + liveKeys.keyPair);
@ -142,6 +144,7 @@ add_task(async function test_locally_changed_keys() {
_("Keys now: " + Service.collectionKeys.keyForCollection("history").keyPair);
// And look! We downloaded history!
let store = Service.engineManager.get("history")._store;
do_check_true(await promiseIsURIVisited("http://foo/bar?record-no--0"));
do_check_true(await promiseIsURIVisited("http://foo/bar?record-no--1"));
do_check_true(await promiseIsURIVisited("http://foo/bar?record-no--2"));
@ -199,6 +202,7 @@ add_task(async function test_locally_changed_keys() {
});
function run_test() {
let logger = Log.repository.rootLogger;
Log.repository.rootLogger.addAppender(new Log.DumpAppender());
validate_all_future_pings();

View File

@ -900,6 +900,7 @@ add_task(async function test_engine_applyFailed() {
Svc.Obs.notify("weave:engine:sync:applied", {newFailed:1}, "catapult");
};
let log = Log.repository.getLogger("Sync.ErrorHandler");
Svc.Prefs.set("log.appender.file.logOnError", true);
let promiseObserved = promiseOneObserver("weave:service:reset-file-log");

View File

@ -273,6 +273,8 @@ add_test(function test_login_error_logOnError_true() {
add_test(function test_errorLog_dumpAddons() {
Svc.Prefs.set("log.appender.file.logOnError", true);
let log = Log.repository.getLogger("Sync.Test.FileLog");
// We need to wait until the log cleanup started by this test is complete
// or the next test will fail as it is ongoing.
Svc.Obs.add("services-tests:common:log-manager:cleanup-logs", function onCleanupLogs() {

View File

@ -30,6 +30,7 @@ CatapultEngine.prototype = {
function sync_httpd_setup() {
let collectionsHelper = track_collections_helper();
let upd = collectionsHelper.with_updated_collection;
let collections = collectionsHelper.collections;
let catapultEngine = engineManager.get("catapult");
let engines = {catapult: {version: catapultEngine.version,

View File

@ -8,6 +8,7 @@ Cu.import("resource://services-sync/util.js");
Cu.import("resource://gre/modules/Services.jsm");
function run_test() {
let baseuri = "http://fake/uri/";
let engine = new FormEngine(Service);
let store = engine._store;
@ -17,7 +18,7 @@ function run_test() {
_("Remove any existing entries");
store.wipe();
if (store.getAllIDs().length) {
for (let id in store.getAllIDs()) {
do_throw("Shouldn't get any ids!");
}
@ -54,7 +55,7 @@ function run_test() {
_("Remove all entries");
store.wipe();
if (store.getAllIDs().length) {
for (let id in store.getAllIDs()) {
do_throw("Shouldn't get any ids!");
}
@ -82,7 +83,7 @@ function run_test() {
store.remove({
id: "newid"
});
if (store.getAllIDs().length) {
for (let id in store.getAllIDs()) {
do_throw("Shouldn't get any ids!");
}
@ -90,7 +91,7 @@ function run_test() {
store.remove({
id: "newid"
});
if (store.getAllIDs().length) {
for (let id in store.getAllIDs()) {
do_throw("Shouldn't get any ids!");
}
@ -113,7 +114,7 @@ function run_test() {
toDelete.id = id;
toDelete.deleted = true;
applyEnsureNoFailures([toDelete]);
if (store.getAllIDs().length) {
for (let id in store.getAllIDs()) {
do_throw("Shouldn't get any ids!");
}
@ -126,7 +127,7 @@ function run_test() {
store.wipe();
if (store.getAllIDs().length) {
for (let id in store.getAllIDs()) {
do_throw("Shouldn't get any ids!");
}
@ -134,7 +135,7 @@ function run_test() {
Services.prefs.setBoolPref("browser.formfill.enable", false);
try {
// a search
if (store.getAllIDs().length) {
for (let id in store.getAllIDs()) {
do_throw("Shouldn't get any ids!");
}
// an update.

View File

@ -72,7 +72,7 @@ add_task(async function testMigrationUnlinks() {
});
// Arrange for a legacy sync user.
configureLegacySync();
let [engine, server] = configureLegacySync();
// Start a sync - this will cause an EOL notification which the migrator's
// observer will notice.

View File

@ -209,6 +209,8 @@ add_task(async function test_track_delete() {
add_task(async function test_dont_track_expiration() {
_("Expirations are not tracked.");
let uriToExpire = await addVisit("to_expire");
let guidToExpire = engine._store.GUIDForUri(uriToExpire);
let uriToRemove = await addVisit("to_remove");
let guidToRemove = engine._store.GUIDForUri(uriToRemove);

View File

@ -65,6 +65,7 @@ add_task(async function hmac_error_during_404() {
let collectionsHelper = track_collections_helper();
let upd = collectionsHelper.with_updated_collection;
let collections = collectionsHelper.collections;
let handlers = {
"/1.1/foo/info/collections": collectionsHelper.handler,
"/1.1/foo/storage/meta/global": upd("meta", global.handler()),

View File

@ -57,8 +57,8 @@ add_test(function test_url_parsing() {
do_check_eq(rest, undefined);
parts = server.storageRE.exec("storage");
let collection;
[all, , collection, ] = parts;
let storage, collection, id;
[all, storage, collection, id] = parts;
do_check_eq(all, "storage");
do_check_eq(collection, undefined);

View File

@ -22,6 +22,7 @@ function do_check_keypair_eq(a, b) {
}
function test_time_keyFromString(iterations) {
let k;
let o;
let b = new BulkKeyBundle("dummy");
let d = Utils.decodeKeyBase32("ababcdefabcdefabcdefabcdef");

View File

@ -119,6 +119,7 @@ function test_apply_same_record_with_different_times() {
// The following record is going to be inserted multiple times in the store
// and it needs to be found there. Then its timestamps are going to be
// compared to the expected values.
var timePasswordChanged = 100;
timePasswordChanged = changePassword("A", "http://a.tn", "password", 1, 100,
100, 100, timePasswordChanged, true);
timePasswordChanged = changePassword("A", "http://a.tn", "password", 1, 100,

View File

@ -43,6 +43,7 @@ add_task(async function test_records_crypto() {
log.info("Creating a record");
let cryptoUri = "http://localhost:8080/crypto/steam";
cryptoWrap = prepareCryptoWrap("steam", "resource");
log.info("cryptoWrap: " + cryptoWrap.toString());
@ -106,6 +107,7 @@ add_task(async function test_records_crypto() {
// Checking per-collection keys and default key handling.
generateNewKeys(Service.collectionKeys);
let bu = "http://localhost:8080/storage/bookmarks/foo";
let bookmarkItem = prepareCryptoWrap("bookmarks", "foo");
bookmarkItem.encrypt(Service.collectionKeys.keyForCollection("bookmarks"));
log.info("Ciphertext is " + bookmarkItem.ciphertext);

View File

@ -429,6 +429,7 @@ function run_test() {
Services.io.newURI("::::::::");
};
res18._onProgress = onProgress;
let oldWarn = res18._log.warn;
let warnings = [];
res18._log.warn = function(msg) { warnings.push(msg) };
error = undefined;

View File

@ -701,6 +701,12 @@ add_test(function test_uri_construction() {
});
add_test(function test_not_sending_cookie() {
function handler(metadata, response) {
let body = "COOKIE!";
response.setStatusLine(metadata.httpVersion, 200, "OK");
response.bodyOutputStream.write(body, body.length);
do_check_false(metadata.hasHeader("Cookie"));
}
let cookieSer = Cc["@mozilla.org/cookieService;1"]
.getService(Ci.nsICookieService);
let uri = CommonUtils.makeURI(server.baseURI);

View File

@ -194,6 +194,7 @@ add_test(function v5_upgrade() {
// Tracking info/collections.
let collectionsHelper = track_collections_helper();
let upd = collectionsHelper.with_updated_collection;
let collections = collectionsHelper.collections;
let keysWBO = new ServerWBO("keys");
let bulkWBO = new ServerWBO("bulk");
@ -287,6 +288,7 @@ add_test(function v5_upgrade() {
});
function run_test() {
let logger = Log.repository.rootLogger;
Log.repository.rootLogger.addAppender(new Log.DumpAppender());
run_next_test();

View File

@ -73,7 +73,7 @@ add_test(function test_http_error() {
Service.serverURL = server.baseURI + "/";
Service.clusterURL = server.baseURI + "/";
Service.getStorageInfo(INFO_COLLECTIONS, function(error, info) {
let request = Service.getStorageInfo(INFO_COLLECTIONS, function(error, info) {
do_check_eq(error.status, 500);
do_check_eq(info, null);
server.stop(run_next_test);
@ -86,7 +86,7 @@ add_test(function test_invalid_json() {
Service.serverURL = server.baseURI + "/";
Service.clusterURL = server.baseURI + "/";
Service.getStorageInfo(INFO_COLLECTIONS, function(error, info) {
let request = Service.getStorageInfo(INFO_COLLECTIONS, function(error, info) {
do_check_eq(error.name, "SyntaxError");
do_check_eq(info, null);
server.stop(run_next_test);

View File

@ -23,6 +23,7 @@ function login_handling(handler) {
}
function run_test() {
let logger = Log.repository.rootLogger;
Log.repository.rootLogger.addAppender(new Log.DumpAppender());
run_next_test();
@ -44,8 +45,10 @@ add_test(function test_offline() {
function setup() {
let janeHelper = track_collections_helper();
let janeU = janeHelper.with_updated_collection;
let janeColls = janeHelper.collections;
let johnHelper = track_collections_helper();
let johnU = johnHelper.with_updated_collection;
let johnColls = johnHelper.collections;
let server = httpd_setup({
"/1.1/johndoe/info/collections": login_handling(johnHelper.handler),
@ -154,6 +157,7 @@ add_test(function test_login_on_sync() {
Service.login = oldLogin;
// Stub mpLocked.
let mpLockedF = Utils.mpLocked;
let mpLocked = true;
Utils.mpLocked = () => mpLocked;
@ -205,6 +209,9 @@ add_test(function test_login_on_sync() {
throw "User canceled Master Password entry";
});
let oldClearSyncTriggers = Service.scheduler.clearSyncTriggers;
let oldLockedSync = Service._lockedSync;
let cSTCalled = false;
let lockedSyncCalled = false;

View File

@ -56,6 +56,7 @@ function run_test() {
initTestLogging("Trace");
let collectionsHelper = track_collections_helper();
let upd = collectionsHelper.with_updated_collection;
let collections = collectionsHelper.collections;
ensureLegacyIdentityManager();

View File

@ -21,10 +21,12 @@ function login_handling(handler) {
}
add_task(async function run_test() {
let logger = Log.repository.rootLogger;
Log.repository.rootLogger.addAppender(new Log.DumpAppender());
let collectionsHelper = track_collections_helper();
let upd = collectionsHelper.with_updated_collection;
let collections = collectionsHelper.collections;
let server = httpd_setup({
"/1.1/johndoe/storage/crypto/keys": upd("crypto", new ServerWBO("keys").handler()),

View File

@ -11,8 +11,10 @@ Cu.import("resource://testing-common/services/sync/utils.js");
function run_test() {
validate_all_future_pings();
let logger = Log.repository.rootLogger;
Log.repository.rootLogger.addAppender(new Log.DumpAppender());
let guidSvc = new FakeGUIDService();
let clients = new ServerCollection();
let meta_global = new ServerWBO("global");
@ -53,6 +55,7 @@ function run_test() {
}
const GLOBAL_PATH = "/1.1/johndoe/storage/meta/global";
const INFO_PATH = "/1.1/johndoe/info/collections";
let handlers = {
"/1.1/johndoe/storage": storageHandler,
@ -157,6 +160,7 @@ function run_test() {
metaColl.delete({});
_("Do an initial sync.");
let beforeSync = Date.now() / 1000;
Service.sync();
_("Checking that remoteSetup returns true.");

View File

@ -199,6 +199,7 @@ add_task(async function test_disabledLocally_wipe503() {
engines: {steam: {syncID: engine.syncID,
version: engine.version}}
});
let steamCollection = new ServerWBO("steam", PAYLOAD);
function service_unavailable(request, response) {
let body = "Service Unavailable";

View File

@ -27,6 +27,7 @@ function service_unavailable(request, response) {
}
function run_test() {
let logger = Log.repository.rootLogger;
Log.repository.rootLogger.addAppender(new Log.DumpAppender());
ensureLegacyIdentityManager();
@ -34,6 +35,7 @@ function run_test() {
Services.logins.removeAllLogins();
let johnHelper = track_collections_helper();
let johnU = johnHelper.with_updated_collection;
let johnColls = johnHelper.collections;
do_test_pending();

View File

@ -32,6 +32,8 @@ FakeCollection.prototype = {
};
async function setUpTestFixtures(server) {
let cryptoService = new FakeCryptoService();
Service.serverURL = server.baseURI + "/";
Service.clusterURL = server.baseURI + "/";

View File

@ -11,7 +11,7 @@ function run_test() {
do_check_eq(Status.service, STATUS_OK);
do_check_eq(Status.sync, SYNC_SUCCEEDED);
do_check_eq(Status.login, LOGIN_SUCCEEDED);
if (Status.engines.length) {
for (let name in Status.engines) {
do_throw("Status.engines should be empty.");
}
do_check_eq(Status.partial, false);
@ -73,7 +73,7 @@ function run_test() {
do_check_eq(Status.service, STATUS_OK);
do_check_eq(Status.sync, SYNC_SUCCEEDED);
if (Status.engines.length) {
for (name in Status.engines) {
do_throw("Status.engines should be empty.");
}

View File

@ -15,7 +15,7 @@ var server = httpd_setup({});
add_task(async function test_url_attributes() {
_("SyncEngine url attributes");
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
Service.clusterURL = "https://cluster/1.1/foo/";
let engine = makeSteamEngine();
try {
@ -29,7 +29,7 @@ add_task(async function test_url_attributes() {
add_task(async function test_syncID() {
_("SyncEngine.syncID corresponds to preference");
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeSteamEngine();
try {
// Ensure pristine environment
@ -49,7 +49,7 @@ add_task(async function test_syncID() {
add_task(async function test_lastSync() {
_("SyncEngine.lastSync and SyncEngine.lastSyncLocal correspond to preferences");
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeSteamEngine();
try {
// Ensure pristine environment
@ -139,7 +139,7 @@ add_task(async function test_previousFailed() {
add_task(async function test_resetClient() {
_("SyncEngine.resetClient resets lastSync and toFetch");
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeSteamEngine();
try {
// Ensure pristine environment
@ -171,7 +171,7 @@ add_task(async function test_wipeServer() {
let server = httpd_setup({
"/1.1/foo/storage/steam": steamCollection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
do_test_pending();
try {

View File

@ -97,7 +97,7 @@ add_task(async function test_syncStartup_emptyOrOutdatedGlobalsResetsSync() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
Service.identity.username = "foo";
let engine = makeRotaryEngine();
@ -141,7 +141,7 @@ add_task(async function test_syncStartup_serverHasNewerVersion() {
"/1.1/foo/storage/meta/global": global.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
Service.identity.username = "foo";
let engine = makeRotaryEngine();
@ -167,7 +167,7 @@ add_task(async function test_syncStartup_syncIDMismatchResetsClient() {
_("SyncEngine._syncStartup resets sync if syncIDs don't match");
let server = sync_httpd_setup({});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
Service.identity.username = "foo";
// global record with a different syncID than our engine has
@ -207,7 +207,7 @@ add_task(async function test_processIncoming_emptyServer() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
Service.identity.username = "foo";
let engine = makeRotaryEngine();
@ -246,7 +246,7 @@ add_task(async function test_processIncoming_createFromServer() {
"/1.1/foo/storage/rotary/scotsman": collection.wbo("scotsman").handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
Service.identity.username = "foo";
generateNewKeys(Service.collectionKeys);
@ -331,7 +331,7 @@ add_task(async function test_processIncoming_reconcile() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
Service.identity.username = "foo";
let engine = makeRotaryEngine();
@ -633,7 +633,7 @@ add_task(async function test_processIncoming_mobile_batchSize() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeRotaryEngine();
let meta_global = Service.recordManager.set(engine.metaURL,
@ -708,7 +708,7 @@ add_task(async function test_processIncoming_store_toFetch() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));
@ -720,9 +720,11 @@ add_task(async function test_processIncoming_store_toFetch() {
do_check_eq(engine.lastSync, 0);
do_check_empty(engine._store.items);
let error;
try {
await sync_engine_and_validate_telem(engine, true);
} catch (ex) {
error = ex;
}
// Only the first two batches have been applied.
@ -779,7 +781,7 @@ add_task(async function test_processIncoming_resume_toFetch() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));
@ -837,7 +839,7 @@ add_task(async function test_processIncoming_applyIncomingBatchSize_smaller() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));
@ -893,7 +895,7 @@ add_task(async function test_processIncoming_applyIncomingBatchSize_multiple() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));
@ -945,7 +947,7 @@ add_task(async function test_processIncoming_notify_count() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));
@ -1035,7 +1037,7 @@ add_task(async function test_processIncoming_previousFailed() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));
@ -1151,7 +1153,7 @@ add_task(async function test_processIncoming_failed_records() {
"/1.1/foo/storage/rotary": recording_handler(collection)
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));
@ -1264,7 +1266,7 @@ add_task(async function test_processIncoming_decrypt_failed() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));
@ -1321,7 +1323,7 @@ add_task(async function test_uploadOutgoing_toEmptyServer() {
"/1.1/foo/storage/rotary/scotsman": collection.wbo("scotsman").handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
let engine = makeRotaryEngine();
@ -1377,7 +1379,7 @@ add_task(async function test_uploadOutgoing_huge() {
"/1.1/foo/storage/rotary/flying": collection.wbo("flying").handler(),
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
let engine = makeRotaryEngine();
@ -1426,7 +1428,7 @@ add_task(async function test_uploadOutgoing_failed() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeRotaryEngine();
engine.lastSync = 123; // needs to be non-zero so that tracker is queried
@ -1521,7 +1523,8 @@ add_task(async function test_uploadOutgoing_MAX_UPLOAD_RECORDS() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
try {
// Confirm initial environment.
@ -1565,7 +1568,7 @@ add_task(async function test_uploadOutgoing_largeRecords() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
try {
engine._syncStartup();
@ -1587,7 +1590,7 @@ add_task(async function test_syncFinish_noDelete() {
let server = httpd_setup({});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeRotaryEngine();
engine._delete = {}; // Nothing to delete
engine._tracker.score = 100;
@ -1617,7 +1620,7 @@ add_task(async function test_syncFinish_deleteByIds() {
let server = httpd_setup({
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeRotaryEngine();
try {
@ -1668,7 +1671,7 @@ add_task(async function test_syncFinish_deleteLotsInBatches() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeRotaryEngine();
try {
@ -1719,7 +1722,7 @@ add_task(async function test_sync_partialUpload() {
let server = sync_httpd_setup({
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
generateNewKeys(Service.collectionKeys);
let engine = makeRotaryEngine();
@ -1801,7 +1804,7 @@ add_task(async function test_canDecrypt_noCryptoKeys() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeRotaryEngine();
try {
@ -1827,7 +1830,7 @@ add_task(async function test_canDecrypt_true() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let engine = makeRotaryEngine();
try {
@ -1858,7 +1861,7 @@ add_task(async function test_syncapplied_observer() {
"/1.1/foo/storage/rotary": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
let meta_global = Service.recordManager.set(engine.metaURL,
new WBORecord(engine.metaURL));

View File

@ -78,7 +78,7 @@ add_task(async function test_tab_engine_skips_incoming_local_record() {
"/1.1/foo/storage/tabs": collection.handler()
});
await SyncTestingInfrastructure(server);
let syncTesting = await SyncTestingInfrastructure(server);
Service.identity.username = "foo";
let meta_global = Service.recordManager.set(engine.metaURL,
@ -105,7 +105,7 @@ add_task(async function test_tab_engine_skips_incoming_local_record() {
});
add_test(function test_reconcile() {
let [engine, ] = getMocks();
let [engine, store] = getMocks();
_("Setup engine for reconciling");
engine._syncStartup();

View File

@ -93,6 +93,8 @@ function test_createRecord() {
store.shouldSkipWindow = mockShouldSkipWindow;
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1);
let tabs = store.getAllTabs();
let tabsize = JSON.stringify(tabs[0]).length;
let numtabs = Math.ceil(20000. / 77.);
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1);

View File

@ -160,10 +160,15 @@ add_task(async function test_uploading() {
let parent = PlacesUtils.toolbarFolderId;
let uri = Utils.makeURI("http://getfirefox.com/");
let title = "Get Firefox";
let bmk_id = PlacesUtils.bookmarks.insertBookmark(parent, uri,
PlacesUtils.bookmarks.DEFAULT_INDEX, "Get Firefox!");
let guid = store.GUIDForId(bmk_id);
let record = store.createRecord(guid);
let collection = server.user("foo").collection("bookmarks");
try {
let ping = await sync_engine_and_validate_telem(engine, false);
ok(!!ping);
@ -333,6 +338,7 @@ add_task(async function test_generic_engine_fail() {
Service.engineManager.register(SteamEngine);
let engine = Service.engineManager.get("steam");
engine.enabled = true;
let store = engine._store;
let server = serverForUsers({"foo": "password"}, {
meta: {global: {engines: {steam: {version: engine.version,
syncID: engine.syncID}}}},
@ -361,6 +367,7 @@ add_task(async function test_engine_fail_ioerror() {
Service.engineManager.register(SteamEngine);
let engine = Service.engineManager.get("steam");
engine.enabled = true;
let store = engine._store;
let server = serverForUsers({"foo": "password"}, {
meta: {global: {engines: {steam: {version: engine.version,
syncID: engine.syncID}}}},
@ -398,6 +405,7 @@ add_task(async function test_initial_sync_engines() {
Service.engineManager.register(SteamEngine);
let engine = Service.engineManager.get("steam");
engine.enabled = true;
let store = engine._store;
let engines = {};
// These are the only ones who actually have things to sync at startup.
let engineNames = ["clients", "bookmarks", "prefs", "tabs"];
@ -436,6 +444,7 @@ add_task(async function test_nserror() {
Service.engineManager.register(SteamEngine);
let engine = Service.engineManager.get("steam");
engine.enabled = true;
let store = engine._store;
let server = serverForUsers({"foo": "password"}, {
meta: {global: {engines: {steam: {version: engine.version,
syncID: engine.syncID}}}},
@ -511,6 +520,7 @@ add_task(async function test_no_foreign_engines_in_error_ping() {
Service.engineManager.register(BogusEngine);
let engine = Service.engineManager.get("bogus");
engine.enabled = true;
let store = engine._store;
let server = serverForUsers({"foo": "password"}, {
meta: {global: {engines: {bogus: {version: engine.version, syncID: engine.syncID}}}},
steam: {}
@ -531,6 +541,7 @@ add_task(async function test_sql_error() {
Service.engineManager.register(SteamEngine);
let engine = Service.engineManager.get("steam");
engine.enabled = true;
let store = engine._store;
let server = serverForUsers({"foo": "password"}, {
meta: {global: {engines: {steam: {version: engine.version,
syncID: engine.syncID}}}},
@ -558,6 +569,7 @@ add_task(async function test_no_foreign_engines_in_success_ping() {
Service.engineManager.register(BogusEngine);
let engine = Service.engineManager.get("bogus");
engine.enabled = true;
let store = engine._store;
let server = serverForUsers({"foo": "password"}, {
meta: {global: {engines: {bogus: {version: engine.version, syncID: engine.syncID}}}},
steam: {}

View File

@ -38,7 +38,7 @@ function run_test() {
do_check_eq(cryptoSvc.decrypt(cryptoSvc.encrypt("bacon", der_key, iv), der_key, iv), "bacon");
// Base64, 16-byte output.
der_key = Utils.deriveEncodedKeyFromPassphrase(der_passphrase, der_salt, 16);
var der_key = Utils.deriveEncodedKeyFromPassphrase(der_passphrase, der_salt, 16);
_("Derived key in base64: " + der_key);
do_check_eq("d2zG0d2cBfXnRwMUGyMwyg==", der_key);
do_check_eq(cryptoSvc.decrypt(cryptoSvc.encrypt("bacon", der_key, iv), der_key, iv), "bacon");

View File

@ -41,7 +41,7 @@ var Logger = {
// If the file already exists, append it, otherwise create it.
var fileflags = exists ? 0x02 | 0x08 | 0x10 : 0x02 | 0x08 | 0x20;
this._foStream.init(this._file, fileflags, 0o666, 0);
this._foStream.init(this._file, fileflags, 0666, 0);
this._converter = Cc["@mozilla.org/intl/converter-output-stream;1"]
.createInstance(Ci.nsIConverterOutputStream);
this._converter.init(this._foStream, "UTF-8", 0, 0);

View File

@ -22,7 +22,7 @@ Cu.import("resource://tps/logger.jsm");
var DumpBookmarks = function TPS_Bookmarks__DumpBookmarks() {
let cb = Async.makeSpinningCallback();
PlacesBackups.getBookmarksTree().then(result => {
let [bookmarks, ] = result;
let [bookmarks, count] = result;
Logger.logInfo("Dumping Bookmarks...\n" + JSON.stringify(bookmarks) + "\n\n");
cb(null);
}).then(null, error => {
@ -217,8 +217,9 @@ PlacesItem.prototype = {
folder_parts[i]);
if (subfolder_id == -1) {
return -1;
} else {
folder_id = subfolder_id;
}
folder_id = subfolder_id;
}
return folder_id;
},

View File

@ -167,11 +167,12 @@ FormData.prototype = {
// this item doesn't exist yet in the db, so we need to insert it
return FormDB.insertValue(this.fieldname, this.value,
this.hours_to_us(this.date));
} else {
/* Right now, we ignore this case. If bug 552531 is ever fixed,
we might need to add code here to update the firstUsed or
lastUsed fields, as appropriate.
*/
}
/* Right now, we ignore this case. If bug 552531 is ever fixed,
we might need to add code here to update the firstUsed or
lastUsed fields, as appropriate.
*/
});
},

View File

@ -17,6 +17,13 @@ Cu.import("resource://tps/logger.jsm");
Cu.import("resource://services-common/async.js");
var DumpHistory = function TPS_History__DumpHistory() {
let writer = {
value: "",
write: function PlacesItem__dump__write(aStr, aLen) {
this.value += aStr;
}
};
let query = PlacesUtils.history.getNewQuery();
let options = PlacesUtils.history.getNewQueryOptions();
let root = PlacesUtils.history.executeQuery(query, options).root;

View File

@ -49,7 +49,7 @@ var BrowserTabs = {
Find(uri, title, profile) {
// Find the uri in Weave's list of tabs for the given profile.
let engine = Weave.Service.engineManager.get("tabs");
for (let [, client] of Object.entries(engine.getAllClients())) {
for (let [guid, client] of Object.entries(engine.getAllClients())) {
if (!client.tabs) {
continue;
}

View File

@ -432,6 +432,7 @@ var TPS = {
this.shouldValidatePasswords = true;
try {
for (let password of passwords) {
let password_id = -1;
Logger.logInfo("executing action " + action.toUpperCase() +
" on password " + JSON.stringify(password));
let passwordOb = new Password(password);
@ -821,7 +822,7 @@ var TPS = {
let ajv = new ns.Ajv({ async: "co*" });
this.pingValidator = ajv.compile(schema);
} catch (e) {
this.DumpError(`Failed to load ping schema and AJV relative to "${testFile}".`, e);
this.DumpError(`Failed to load ping schema and AJV relative to "${testFile}".`, e);
}
},