Revision control

Copy as Markdown

Other Tools

/* -*- Mode: JavaScript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
*
* Any copyright is dedicated to the Public Domain.
*
* ***** END LICENSE BLOCK ***** */
/*
* Test content length for the news protocol. This focuses on necko URLs
* that are run externally.
*/
// The basic daemon to use for testing Nntpd.sys.mjs implementations
var daemon = setupNNTPDaemon();
var server;
var localserver;
function run_test() {
server = makeServer(NNTP_RFC977_handler, daemon);
server.start();
localserver = setupLocalServer(server.port);
try {
// Get the folder and new mail
const folder = localserver.rootFolder.getChildNamed(
"test.subscribe.simple"
);
folder.clearFlag(Ci.nsMsgFolderFlags.Offline);
folder.getNewMessages(null, {
OnStopRunningUrl() {
localserver.closeCachedConnections();
},
});
server.performTest();
Assert.equal(folder.getTotalMessages(false), 1);
Assert.ok(folder.hasNewMessages);
server.resetTest();
// Get the message URI
const msgHdr = folder.firstNewMessage;
const messageUri = folder.getUriForMsg(msgHdr);
// Convert this to a URI that necko can run
const messageService = MailServices.messageServiceFromURI(messageUri);
const neckoURL = messageService.getUrlForUri(messageUri);
// Don't use the necko URL directly. Instead, get the spec and create a new
// URL using the IO service
const urlToRun = Services.io.newURI(neckoURL.spec);
// Get a channel from this URI, and check its content length
const channel = Services.io.newChannelFromURI(
urlToRun,
null,
Services.scriptSecurityManager.getSystemPrincipal(),
null,
Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
Ci.nsIContentPolicy.TYPE_OTHER
);
Assert.equal(channel.contentLength, kSimpleNewsArticle.length);
// Now try an attachment. &part=1.2
// XXX the message doesn't really have an attachment
const attachmentURL = Services.io.newURI(neckoURL.spec + "&part=1.2");
Services.io.newChannelFromURI(
attachmentURL,
null,
Services.scriptSecurityManager.getSystemPrincipal(),
null,
Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
Ci.nsIContentPolicy.TYPE_OTHER
);
// Currently attachments have their content length set to the length of the
// entire message
Assert.equal(channel.contentLength, kSimpleNewsArticle.length);
} catch (e) {
server.stop();
do_throw(e);
}
}