1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
<?xml version="1.0"?>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/licenses/publicdomain/
-->
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
type="text/css"?>
<?xml-stylesheet href="chrome://browser/content/places/places.css"?>
<?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="549192: History view not updated after deleting entry"
onload="runTest();">
<script type="application/javascript"
src="chrome://browser/content/places/places-tree.js"/>
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
<script type="application/javascript" src="head.js" />
<body xmlns="http://www.w3.org/1999/xhtml" />
<tree id="tree"
is="places-tree"
flatList="true"
flex="1">
<treecols>
<treecol label="Title" id="title" anonid="title" primary="true" style="order: 1;" flex="1"/>
</treecols>
<treechildren flex="1"/>
</tree>
<script type="application/javascript"><![CDATA[
/**
* Bug 874407
* Ensures that history views are updated properly after visits.
* Bug 549192
* Ensures that history views are updated after deleting entries.
*/
function runTest() {
SimpleTest.waitForExplicitFinish();
(async function() {
await PlacesUtils.history.clear();
// Add some visits.
let timeInMicroseconds = PlacesUtils.toPRTime(Date.now() - 10000);
function newTimeInMicroseconds() {
timeInMicroseconds = timeInMicroseconds + 1000;
return timeInMicroseconds;
}
const transition = PlacesUtils.history.TRANSITIONS.TYPED;
let places =
[{ uri: Services.io.newURI("https://example.tld/"),
visitDate: newTimeInMicroseconds(), transition },
{ uri: Services.io.newURI("https://example2.tld/"),
visitDate: newTimeInMicroseconds(), transition },
{ uri: Services.io.newURI("https://example3.tld/"),
visitDate: newTimeInMicroseconds(), transition }];
await PlacesTestUtils.addVisits(places);
// Make a history query.
let query = PlacesUtils.history.getNewQuery();
let opts = PlacesUtils.history.getNewQueryOptions();
opts.sortingMode = opts.SORT_BY_DATE_DESCENDING;
let queryURI = PlacesUtils.history.queryToQueryString(query, opts);
// Setup the places tree contents.
var tree = document.getElementById("tree");
tree.place = queryURI;
// loop through the rows and check them.
let treeView = tree.view;
let selection = treeView.selection;
let rc = treeView.rowCount;
for (let i = 0; i < rc; i++) {
selection.select(i);
let node = tree.selectedNode;
is(node.uri, places[rc - i - 1].uri.spec,
"Found expected node at position " + i + ".");
}
is(rc, 3, "Found expected number of rows.");
// First check live-update of the view when adding visits.
places.forEach(place => place.visitDate = newTimeInMicroseconds());
await PlacesTestUtils.addVisits(places);
for (let i = 0; i < rc; i++) {
selection.select(i);
let node = tree.selectedNode;
is(node.uri, places[rc - i - 1].uri.spec,
"Found expected node at position " + i + ".");
}
// Now remove the pages and verify live-update again.
for (let i = 0; i < rc; i++) {
selection.select(0);
let node = tree.selectedNode;
const promiseRemoved = PlacesTestUtils.waitForNotification(
"page-removed",
events => events[0].url === node.uri
);
tree.controller.remove();
const removeEvents = await promiseRemoved;
ok(
removeEvents[0].isRemovedFromStore,
"isRemovedFromStore should be true"
);
ok(treeView.treeIndexForNode(node) == -1, node.uri + " removed.");
is(treeView.rowCount, rc - i - 1, "Rows count decreased");
}
// Cleanup.
await PlacesUtils.history.clear();
})().then(() => SimpleTest.finish());
}
]]></script>
</window>
|