mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 01:35:35 +00:00
Bug 1095425 - Convert PlacesTransactions to the new Bookmarks.jsm API. r=standard8
MozReview-Commit-ID: 12pPCGmzV4X --HG-- extra : rebase_source : 1f8a73a5e84f34cd683abfba854c8413b0cd49b8
This commit is contained in:
parent
899e4b181b
commit
a2c238b900
@ -666,7 +666,10 @@ add_task(async function checkUndoVisitsState() {
|
||||
|
||||
add_task(async function checkHistoryRemovalCompletion() {
|
||||
AutoMigrate._errorMap = {bookmarks: 0, visits: 0, logins: 0};
|
||||
await AutoMigrate._removeSomeVisits([{url: "http://www.example.com/", limit: -1}]);
|
||||
await AutoMigrate._removeSomeVisits([{url: "http://www.example.com/",
|
||||
first: 0,
|
||||
last: PlacesUtils.toPRTime(new Date()),
|
||||
limit: -1}]);
|
||||
ok(true, "Removing visits should complete even if removing some visits failed.");
|
||||
Assert.equal(AutoMigrate._errorMap.visits, 1, "Should have logged the error for visits.");
|
||||
|
||||
|
@ -1992,7 +1992,9 @@ function rowsToItemsArray(rows) {
|
||||
item[prop] = row.getResultByName(prop);
|
||||
}
|
||||
for (let prop of ["dateAdded", "lastModified"]) {
|
||||
item[prop] = PlacesUtils.toDate(row.getResultByName(prop));
|
||||
let value = row.getResultByName(prop);
|
||||
if (value)
|
||||
item[prop] = PlacesUtils.toDate(value);
|
||||
}
|
||||
for (let prop of ["title", "parentGuid", "url" ]) {
|
||||
let val = row.getResultByName(prop);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -389,6 +389,8 @@ this.PlacesUtils = {
|
||||
* @return microseconds from the epoch.
|
||||
*/
|
||||
toPRTime(date) {
|
||||
if (typeof date != "number" && date.constructor.name != "Date")
|
||||
throw new Error("Invalid value passed to toPRTime");
|
||||
return date * 1000;
|
||||
},
|
||||
|
||||
@ -400,6 +402,8 @@ this.PlacesUtils = {
|
||||
* @return a Date object.
|
||||
*/
|
||||
toDate(time) {
|
||||
if (typeof time != "number")
|
||||
throw new Error("Invalid value passed to toDate");
|
||||
return new Date(parseInt(time / 1000));
|
||||
},
|
||||
|
||||
|
@ -270,6 +270,9 @@ async function ensureEqualBookmarksTrees(aOriginal,
|
||||
// ours and the one at deepEqual). This is fine for us because ids are not
|
||||
// restored by Redo.
|
||||
if (aIsRestoredItem) {
|
||||
// Ignore lastModified for newly created items, for performance reasons.
|
||||
if (!aOriginal.lastModified)
|
||||
aNew.lastModified = aOriginal.lastModified;
|
||||
Assert.deepEqual(aOriginal, aNew);
|
||||
if (isLivemarkTree(aNew))
|
||||
await ensureLivemarkCreatedByAddLivemark(aNew.guid);
|
||||
@ -373,12 +376,16 @@ add_task(async function test_new_folder_with_annotation() {
|
||||
ensureUndoState();
|
||||
let txn = PT.NewFolder(folder_info);
|
||||
folder_info.guid = await txn.transact();
|
||||
let originalInfo = await PlacesUtils.promiseBookmarksTree(folder_info.guid);
|
||||
let ensureDo = async function(aRedo = false) {
|
||||
ensureUndoState([[txn]], 0);
|
||||
await ensureItemsAdded(folder_info);
|
||||
ensureAnnotationsSet(folder_info.guid, [ANNO]);
|
||||
if (aRedo)
|
||||
ensureTimestampsUpdated(folder_info.guid, true);
|
||||
if (aRedo) {
|
||||
// Ignore lastModified in the comparison, for performance reasons.
|
||||
originalInfo.lastModified = null;
|
||||
await ensureBookmarksTreeRestoredCorrectly(originalInfo);
|
||||
}
|
||||
observer.reset();
|
||||
};
|
||||
|
||||
@ -411,11 +418,12 @@ add_task(async function test_new_bookmark() {
|
||||
let txn = PT.NewBookmark(bm_info);
|
||||
bm_info.guid = await txn.transact();
|
||||
|
||||
let originalInfo = await PlacesUtils.promiseBookmarksTree(bm_info.guid);
|
||||
let ensureDo = async function(aRedo = false) {
|
||||
ensureUndoState([[txn]], 0);
|
||||
await ensureItemsAdded(bm_info);
|
||||
if (aRedo)
|
||||
ensureTimestampsUpdated(bm_info.guid, true);
|
||||
await ensureBookmarksTreeRestoredCorrectly(originalInfo);
|
||||
observer.reset();
|
||||
};
|
||||
let ensureUndo = () => {
|
||||
@ -599,6 +607,12 @@ add_task(async function test_remove_folder() {
|
||||
return [folder_level_1_txn, folder_level_2_txn];
|
||||
});
|
||||
|
||||
let original_folder_level_1_tree =
|
||||
await PlacesUtils.promiseBookmarksTree(folder_level_1_info.guid);
|
||||
let original_folder_level_2_tree =
|
||||
Object.assign({ parentGuid: original_folder_level_1_tree.guid },
|
||||
original_folder_level_1_tree.children[0]);
|
||||
|
||||
ensureUndoState([[folder_level_2_txn_result, folder_level_1_txn_result]]);
|
||||
await ensureItemsAdded(folder_level_1_info, folder_level_2_info);
|
||||
observer.reset();
|
||||
@ -615,7 +629,7 @@ add_task(async function test_remove_folder() {
|
||||
ensureUndoState([ [remove_folder_2_txn],
|
||||
[folder_level_2_txn_result, folder_level_1_txn_result] ], 1);
|
||||
await ensureItemsAdded(folder_level_2_info);
|
||||
ensureTimestampsUpdated(folder_level_2_info.guid, true);
|
||||
await ensureBookmarksTreeRestoredCorrectly(original_folder_level_2_tree);
|
||||
observer.reset();
|
||||
|
||||
// Redo Remove "Folder Level 2"
|
||||
@ -630,7 +644,7 @@ add_task(async function test_remove_folder() {
|
||||
ensureUndoState([ [remove_folder_2_txn],
|
||||
[folder_level_2_txn_result, folder_level_1_txn_result] ], 1);
|
||||
await ensureItemsAdded(folder_level_2_info);
|
||||
ensureTimestampsUpdated(folder_level_2_info.guid, true);
|
||||
await ensureBookmarksTreeRestoredCorrectly(original_folder_level_2_tree);
|
||||
observer.reset();
|
||||
|
||||
// Undo the creation of both folders
|
||||
@ -645,8 +659,7 @@ add_task(async function test_remove_folder() {
|
||||
ensureUndoState([ [remove_folder_2_txn],
|
||||
[folder_level_2_txn_result, folder_level_1_txn_result] ], 1);
|
||||
await ensureItemsAdded(folder_level_1_info, folder_level_2_info);
|
||||
ensureTimestampsUpdated(folder_level_1_info.guid, true);
|
||||
ensureTimestampsUpdated(folder_level_2_info.guid, true);
|
||||
await ensureBookmarksTreeRestoredCorrectly(original_folder_level_1_tree);
|
||||
observer.reset();
|
||||
|
||||
// Redo Remove "Folder Level 2"
|
||||
@ -677,8 +690,6 @@ add_task(async function test_add_and_remove_bookmarks_with_additional_info() {
|
||||
const testURI = NetUtil.newURI("http://add.remove.tag");
|
||||
const TAG_1 = "TestTag1";
|
||||
const TAG_2 = "TestTag2";
|
||||
const KEYWORD = "test_keyword";
|
||||
const POST_DATA = "post_data";
|
||||
const ANNO = { name: "TestAnno", value: "TestAnnoValue" };
|
||||
|
||||
let folder_info = createTestFolderInfo();
|
||||
@ -689,13 +700,14 @@ add_task(async function test_add_and_remove_bookmarks_with_additional_info() {
|
||||
observer.reset();
|
||||
let b1_info = { parentGuid: folder_info.guid, url: testURI, tags: [TAG_1] };
|
||||
b1_info.guid = await PT.NewBookmark(b1_info).transact();
|
||||
let b1_originalInfo = await PlacesUtils.promiseBookmarksTree(b1_info.guid);
|
||||
ensureTags([TAG_1]);
|
||||
await PT.undo();
|
||||
ensureTags([]);
|
||||
|
||||
observer.reset();
|
||||
await PT.redo();
|
||||
ensureTimestampsUpdated(b1_info.guid, true);
|
||||
await ensureBookmarksTreeRestoredCorrectly(b1_originalInfo);
|
||||
ensureTags([TAG_1]);
|
||||
|
||||
// Check if the Remove transaction removes and restores tags of children
|
||||
@ -705,7 +717,7 @@ add_task(async function test_add_and_remove_bookmarks_with_additional_info() {
|
||||
|
||||
observer.reset();
|
||||
await PT.undo();
|
||||
ensureTimestampsUpdated(b1_info.guid, true);
|
||||
await ensureBookmarksTreeRestoredCorrectly(b1_originalInfo);
|
||||
ensureTags([TAG_1]);
|
||||
|
||||
await PT.redo();
|
||||
@ -713,27 +725,22 @@ add_task(async function test_add_and_remove_bookmarks_with_additional_info() {
|
||||
|
||||
observer.reset();
|
||||
await PT.undo();
|
||||
ensureTimestampsUpdated(b1_info.guid, true);
|
||||
await ensureBookmarksTreeRestoredCorrectly(b1_originalInfo);
|
||||
ensureTags([TAG_1]);
|
||||
|
||||
// * Check that no-op tagging (the uri is already tagged with TAG_1) is
|
||||
// also a no-op on undo.
|
||||
// * Test the "keyword" property of the NewBookmark transaction.
|
||||
observer.reset();
|
||||
let b2_info = { parentGuid: folder_info.guid,
|
||||
url: testURI, tags: [TAG_1, TAG_2],
|
||||
keyword: KEYWORD,
|
||||
postData: POST_DATA,
|
||||
url: testURI,
|
||||
tags: [TAG_1, TAG_2],
|
||||
annotations: [ANNO] };
|
||||
b2_info.guid = await PT.NewBookmark(b2_info).transact();
|
||||
let b2_post_creation_changes = [
|
||||
{ guid: b2_info.guid,
|
||||
isAnnoProperty: true,
|
||||
property: ANNO.name,
|
||||
newValue: ANNO.value },
|
||||
{ guid: b2_info.guid,
|
||||
property: "keyword",
|
||||
newValue: KEYWORD } ];
|
||||
newValue: ANNO.value } ];
|
||||
ensureItemsChanged(...b2_post_creation_changes);
|
||||
ensureTags([TAG_1, TAG_2]);
|
||||
|
||||
@ -742,9 +749,7 @@ add_task(async function test_add_and_remove_bookmarks_with_additional_info() {
|
||||
await ensureItemsRemoved(b2_info);
|
||||
ensureTags([TAG_1]);
|
||||
|
||||
// Check if Remove correctly restores keywords, tags and annotations.
|
||||
// Since both bookmarks share the same uri, they also share the keyword that
|
||||
// is not removed along with one of the bookmarks.
|
||||
// Check if Remove correctly restores tags and annotations.
|
||||
observer.reset();
|
||||
await PT.redo();
|
||||
ensureItemsChanged({ guid: b2_info.guid,
|
||||
@ -760,10 +765,6 @@ add_task(async function test_add_and_remove_bookmarks_with_additional_info() {
|
||||
await PT.Remove(folder_info.guid).transact();
|
||||
await ensureItemsRemoved(b1_info, b2_info, folder_info);
|
||||
ensureTags([]);
|
||||
// There is no keyword removal notification cause all bookmarks are removed
|
||||
// before the keyword itself, so there's no one to notify.
|
||||
let entry = await PlacesUtils.keywords.fetch(KEYWORD);
|
||||
Assert.equal(entry, null, "keyword has been removed");
|
||||
|
||||
observer.reset();
|
||||
await PT.undo();
|
||||
@ -880,6 +881,7 @@ add_task(async function test_add_and_remove_livemark() {
|
||||
let removeTxn = PT.Remove(guid);
|
||||
await removeTxn.transact();
|
||||
await ensureNonExistent(guid);
|
||||
|
||||
async function undo() {
|
||||
ensureUndoState([[removeTxn], [createLivemarkTxn]], 0);
|
||||
await PT.undo();
|
||||
|
Loading…
Reference in New Issue
Block a user