var prefetch = Cc[
"@mozilla.org/prefetch-service;1"].getService(
Ci.nsIPrefetchService
);
var ReferrerInfo = Components.Constructor(
"@mozilla.org/referrer-info;1",
"nsIReferrerInfo",
"init"
);
var ios = Services.io;
var prefs = Services.prefs;
var parser =
new DOMParser();
var doc;
var docbody =
'<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' +
'<link id="node1"/><link id="node2"/>' +
"</body></html>";
var node1;
var node2;
function run_test() {
prefs.setBoolPref(
"network.prefetch-next",
true);
doc = parser.parseFromString(docbody,
"text/html");
node1 = doc.getElementById(
"node1");
node2 = doc.getElementById(
"node2");
run_next_test();
}
add_test(
function test_cancel1() {
var uri = ios.newURI(
"http://localhost/1");
var referrerInfo =
new ReferrerInfo(Ci.nsIReferrerInfo.EMPTY,
true, uri);
prefetch.prefetchURI(uri, referrerInfo, node1,
true);
Assert.ok(prefetch.hasMoreElements(),
"There is a request in the queue");
// Trying to prefetch again the same uri with the same node will fail.
var didFail = 0;
try {
prefetch.prefetchURI(uri, referrerInfo, node1,
true);
}
catch (e) {
didFail = 1;
}
Assert.ok(
didFail == 1,
"Prefetching the same request with the same node fails."
);
Assert.ok(prefetch.hasMoreElements(),
"There is still request in the queue");
prefetch.cancelPrefetchPreloadURI(uri, node1);
Assert.ok(!prefetch.hasMoreElements(),
"There is no request in the queue");
run_next_test();
});
add_test(
function test_cancel2() {
// Prefetch a uri with 2 different nodes. There should be 2 request
// in the queue and canceling one will not cancel the other.
var uri = ios.newURI(
"http://localhost/1");
var referrerInfo =
new ReferrerInfo(Ci.nsIReferrerInfo.EMPTY,
true, uri);
prefetch.prefetchURI(uri, referrerInfo, node1,
true);
prefetch.prefetchURI(uri, referrerInfo, node2,
true);
Assert.ok(prefetch.hasMoreElements(),
"There are requests in the queue");
prefetch.cancelPrefetchPreloadURI(uri, node1);
Assert.ok(
prefetch.hasMoreElements(),
"There is still one more request in the queue"
);
prefetch.cancelPrefetchPreloadURI(uri, node2);
Assert.ok(!prefetch.hasMoreElements(),
"There is no request in the queue");
run_next_test();
});
add_test(
function test_cancel3() {
// Request a prefetch of a uri. Trying to cancel a prefetch for the same uri
// with a different node will fail.
var uri = ios.newURI(
"http://localhost/1");
var referrerInfo =
new ReferrerInfo(Ci.nsIReferrerInfo.EMPTY,
true, uri);
prefetch.prefetchURI(uri, referrerInfo, node1,
true);
Assert.ok(prefetch.hasMoreElements(),
"There is a request in the queue");
var didFail = 0;
try {
prefetch.cancelPrefetchPreloadURI(uri, node2,
true);
}
catch (e) {
didFail = 1;
}
Assert.ok(didFail == 1,
"Canceling the request failed");
Assert.ok(
prefetch.hasMoreElements(),
"There is still a request in the queue"
);
prefetch.cancelPrefetchPreloadURI(uri, node1);
Assert.ok(!prefetch.hasMoreElements(),
"There is no request in the queue");
run_next_test();
});
add_test(
function test_cancel4() {
// Request a prefetch of a uri. Trying to cancel a prefetch for a different uri
// with the same node will fail.
var uri1 = ios.newURI(
"http://localhost/1");
var uri2 = ios.newURI(
"http://localhost/2");
var referrerInfo =
new ReferrerInfo(Ci.nsIReferrerInfo.EMPTY,
true, uri1);
prefetch.prefetchURI(uri1, referrerInfo, node1,
true);
Assert.ok(prefetch.hasMoreElements(),
"There is a request in the queue");
var didFail = 0;
try {
prefetch.cancelPrefetchPreloadURI(uri2, node1);
}
catch (e) {
didFail = 1;
}
Assert.ok(didFail == 1,
"Canceling the request failed");
Assert.ok(
prefetch.hasMoreElements(),
"There is still a request in the queue"
);
prefetch.cancelPrefetchPreloadURI(uri1, node1);
Assert.ok(!prefetch.hasMoreElements(),
"There is no request in the queue");
run_next_test();
});