summaryrefslogtreecommitdiffstats
path: root/browser/components/places/tests/chrome/test_bug549192.xhtml
blob: 8017c1f2f54d7a31ccf4c98687436f010d6689f8 (plain)
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
131
<?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="-moz-box-ordinal-group: 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("http://example.tld/"),
             visitDate: newTimeInMicroseconds(), transition },
           { uri: Services.io.newURI("http://example2.tld/"),
             visitDate: newTimeInMicroseconds(), transition },
           { uri: Services.io.newURI("http://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,
            "places"
          );

          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>