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
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* Test that temporary files for draft are surely removed.
*/
var gMsgCompose;
var gExpectedFiles;
var progressListener = {
onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) {
if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP) {
do_timeout(0, checkResult);
}
},
onProgressChange(
aWebProgress,
aRequest,
aCurSelfProgress,
aMaxSelfProgress,
aCurTotalProgress,
aMaxTotalProgress
) {},
onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {},
onStatusChange(aWebProgress, aRequest, aStatus, aMessage) {},
onSecurityChange(aWebProgress, aRequest, state) {},
onContentBlockingEvent(aWebProgress, aRequest, aEvent) {},
QueryInterface: ChromeUtils.generateQI([
"nsIWebProgressListener",
"nsISupportsWeakReference",
]),
};
/**
* Get the count of temporary files. Because nsIFile.createUnique creates a random
* file name, we iterate the tmp dir and count the files that match filename
* patterns.
*/
async function getTemporaryFilesCount() {
let tmpDir = Services.dirsvc.get("TmpD", Ci.nsIFile).path;
let entries = await IOUtils.getChildren(tmpDir);
let tempFiles = {
"nsmail.tmp": 0,
"nscopy.tmp": 0,
"nsemail.eml": 0,
"nsemail.tmp": 0,
"nsqmail.tmp": 0,
};
for (const path of entries) {
for (let pattern of Object.keys(tempFiles)) {
let [name, extName] = pattern.split(".");
if (PathUtils.filename(path).startsWith(name) && path.endsWith(extName)) {
tempFiles[pattern]++;
}
}
}
return tempFiles;
}
/**
* Temp files should be deleted as soon as the draft is finished saving, so the
* counts should be the same as before.
*/
async function checkResult() {
let filesCount = await getTemporaryFilesCount();
for (let [pattern, count] of Object.entries(filesCount)) {
Assert.equal(
count,
gExpectedFiles[pattern],
`${pattern} should not exists`
);
}
do_test_finished();
}
add_task(async function () {
gExpectedFiles = await getTemporaryFilesCount();
// Ensure we have at least one mail account
localAccountUtils.loadLocalMailAccount();
gMsgCompose = Cc["@mozilla.org/messengercompose/compose;1"].createInstance(
Ci.nsIMsgCompose
);
let fields = Cc[
"@mozilla.org/messengercompose/composefields;1"
].createInstance(Ci.nsIMsgCompFields);
let params = Cc[
"@mozilla.org/messengercompose/composeparams;1"
].createInstance(Ci.nsIMsgComposeParams);
fields.from = "Nobody <nobody@tinderbox.test>";
fields.body = "body text";
fields.useMultipartAlternative = true;
params.composeFields = fields;
params.format = Ci.nsIMsgCompFormat.HTML;
gMsgCompose.initialize(params, null, null);
let identity = getSmtpIdentity(null, getBasicSmtpServer());
localAccountUtils.rootFolder.createLocalSubfolder("Drafts");
let progress = Cc["@mozilla.org/messenger/progress;1"].createInstance(
Ci.nsIMsgProgress
);
progress.registerListener(progressListener);
do_test_pending();
gMsgCompose.sendMsg(
Ci.nsIMsgSend.nsMsgSaveAsDraft,
identity,
"",
null,
progress
);
});
|