Bug 1272652 - Fix Marionette tests. r=Gijs
MozReview-Commit-ID: DkxipslzzMO
--- a/browser/components/migration/MigrationUtils.jsm
+++ b/browser/components/migration/MigrationUtils.jsm
@@ -233,75 +233,72 @@ this.MigratorPrototype = {
let unblockMainThread = function () {
return new Promise(resolve => {
Services.tm.mainThread.dispatch(resolve, Ci.nsIThread.DISPATCH_NORMAL);
});
};
// Called either directly or through the bookmarks import callback.
let doMigrate = Task.async(function*() {
- // TODO: use Map (for the items) and Set (for the resources)
- // once they are iterable.
let resourcesGroupedByItems = new Map();
resources.forEach(function(resource) {
- if (resourcesGroupedByItems.has(resource.type))
- resourcesGroupedByItems.get(resource.type).push(resource);
- else
- resourcesGroupedByItems.set(resource.type, [resource]);
+ if (!resourcesGroupedByItems.has(resource.type)) {
+ resourcesGroupedByItems.set(resource.type, new Set());
+ }
+ resourcesGroupedByItems.get(resource.type).add(resource)
});
if (resourcesGroupedByItems.size == 0)
throw new Error("No items to import");
let notify = function(aMsg, aItemType) {
Services.obs.notifyObservers(null, aMsg, aItemType);
}
notify("Migration:Started");
for (let [key, value] of resourcesGroupedByItems) {
- // TODO: (bug 449811).
+ // Workaround bug 449811.
let migrationType = key, itemResources = value;
notify("Migration:ItemBeforeMigrate", migrationType);
let itemSuccess = false;
for (let res of itemResources) {
+ // Workaround bug 449811.
let resource = res;
let completeDeferred = PromiseUtils.defer();
let resourceDone = function(aSuccess) {
- let resourceIndex = itemResources.indexOf(resource);
- if (resourceIndex != -1) {
- itemResources.splice(resourceIndex, 1);
- itemSuccess |= aSuccess;
- if (itemResources.length == 0) {
- resourcesGroupedByItems.delete(migrationType);
- notify(itemSuccess ?
- "Migration:ItemAfterMigrate" : "Migration:ItemError",
- migrationType);
- if (resourcesGroupedByItems.size == 0)
- notify("Migration:Ended");
+ itemResources.delete(resource);
+ itemSuccess |= aSuccess;
+ if (itemResources.size == 0) {
+ notify(itemSuccess ?
+ "Migration:ItemAfterMigrate" : "Migration:ItemError",
+ migrationType);
+ resourcesGroupedByItems.delete(migrationType);
+ if (resourcesGroupedByItems.size == 0) {
+ notify("Migration:Ended");
}
- completeDeferred.resolve();
}
+ completeDeferred.resolve();
}
// If migrate throws, an error occurred, and the callback
// (itemMayBeDone) might haven't been called.
try {
resource.migrate(resourceDone);
}
catch(ex) {
Cu.reportError(ex);
resourceDone(false);
}
// Certain resources must be ran sequentially or they could fail,
// for example bookmarks and history (See bug 1272652).
- if (key == MigrationUtils.resourceTypes.BOOKMARKS ||
- key == MigrationUtils.resourceTypes.HISTORY) {
+ if (migrationType == MigrationUtils.resourceTypes.BOOKMARKS ||
+ migrationType == MigrationUtils.resourceTypes.HISTORY) {
yield completeDeferred.promise;
}
yield unblockMainThread();
}
}
});
--- a/browser/components/migration/tests/marionette/test_refresh_firefox.py
+++ b/browser/components/migration/tests/marionette/test_refresh_firefox.py
@@ -225,27 +225,34 @@ class TestFirefoxRefresh(MarionetteTestC
self.assertEqual(formHistoryCount, 1, "There should be only 1 entry in the form history")
def checkCookie(self):
cookieInfo = self.runCode("""
try {
let cookieEnum = Services.cookies.getCookiesFromHost(arguments[0]);
let cookie = null;
while (cookieEnum.hasMoreElements()) {
+ let hostCookie = cookieEnum.getNext();
+ hostCookie.QueryInterface(Ci.nsICookie2);
+ // getCookiesFromHost returns any cookie from the BASE host.
+ if (hostCookie.rawHost != arguments[0])
+ continue;
if (cookie != null) {
return "more than 1 cookie! That shouldn't happen!";
}
- cookie = cookieEnum.getNext();
- cookie.QueryInterface(Ci.nsICookie2);
+ cookie = hostCookie;
}
return {path: cookie.path, name: cookie.name, value: cookie.value};
} catch (ex) {
return "got exception trying to fetch cookie: " + ex;
}
""", script_args=[self._cookieHost])
+ if not isinstance(cookieInfo, dict):
+ self.fail(cookieInfo)
+ return
self.assertEqual(cookieInfo['path'], self._cookiePath)
self.assertEqual(cookieInfo['value'], self._cookieValue)
self.assertEqual(cookieInfo['name'], self._cookieName)
def checkSession(self):
tabURIs = self.runCode("""
return [... gBrowser.browsers].map(b => b.currentURI && b.currentURI.spec)
""")