diff options
Diffstat (limited to 'comm/suite/components/places/tests/chrome/test_bug549491.xul')
-rw-r--r-- | comm/suite/components/places/tests/chrome/test_bug549491.xul | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/comm/suite/components/places/tests/chrome/test_bug549491.xul b/comm/suite/components/places/tests/chrome/test_bug549491.xul new file mode 100644 index 0000000000..f211d62fd2 --- /dev/null +++ b/comm/suite/components/places/tests/chrome/test_bug549491.xul @@ -0,0 +1,100 @@ +<?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://communicator/content/places/places.css"?> +<?xml-stylesheet href="chrome://communicator/skin/places/organizer.css"?> +<?xul-overlay href="chrome://communicator/content/places/placesOverlay.xul"?> + +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + title="549491: 'The root node is never visible' exception when details of the root node are modified " + onload="runTest();"> + + <script src="chrome://mochikit/content/MochiKit/packed.js" /> + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" /> + <script src="head.js" /> + + <body xmlns="http://www.w3.org/1999/xhtml" /> + + <tree id="tree" + type="places" + flatList="true" + flex="1"> + <treecols> + <treecol label="Title" id="title" anonid="title" primary="true" ordinal="1" flex="1"/> + <splitter class="tree-splitter"/> + <treecol label="Date" anonid="date" flex="1"/> + </treecols> + <treechildren flex="1"/> + </tree> + + <script> + <![CDATA[ + /** + * Bug 549491 + * https://bugzilla.mozilla.org/show_bug.cgi?id=549491 + * + * Ensures that changing the details of places tree's root-node doesn't + * throw. + */ + const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); + + SimpleTest.waitForExplicitFinish(); + + function runTest() { + // The mochitest page is added to history. + waitForClearHistory(continue_test); + } + + function continue_test() { + addVisits( + {uri: Services.io.newURI("http://example.tld/"), + visitDate: Date.now() * 1000, + transition: PlacesUtils.history.TRANSITION_TYPED}, + function() { + // Make a history query. + let query = PlacesUtils.history.getNewQuery(); + let opts = PlacesUtils.history.getNewQueryOptions(); + let queryURI = PlacesUtils.history.queriesToQueryString([query], 1, opts); + + // Setup the places tree contents. + let tree = document.getElementById("tree"); + tree.place = queryURI; + + let rootNode = tree.result.root; + let obs = tree.view.QueryInterface(Ci.nsINavHistoryResultObserver); + obs.nodeHistoryDetailsChanged(rootNode, rootNode.time, rootNode.accessCount); + obs.nodeTitleChanged(rootNode, rootNode.title); + ok(true, "No exceptions thrown"); + + // Cleanup. + waitForClearHistory(SimpleTest.finish); + }); + } + + /** + * Clears history invoking callback when done. + */ + function waitForClearHistory(aCallback) { + const TOPIC_EXPIRATION_FINISHED = "places-expiration-finished"; + let observer = { + observe: function(aSubject, aTopic, aData) { + Services.obs.removeObserver(this, TOPIC_EXPIRATION_FINISHED); + aCallback(); + } + }; + Services.obs.addObserver(observer, TOPIC_EXPIRATION_FINISHED); + let hs = Cc["@mozilla.org/browser/nav-history-service;1"]. + getService(Ci.nsINavHistoryService); + hs.QueryInterface(Ci.nsIBrowserHistory).removeAllPages(); + } + + ]]></script> +</window> |