summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/content-policy/browser_dnsPrefetch.js
blob: 2f29d0fa352536962b9d7f3b007555678088c6de (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
/* 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/. */

/**
 * The purpose of this test is to ensure that dns prefetch is turned off in
 * the message pane and compose windows. It also checks that dns prefetch is
 * currently turned off in content tabs, although when bug 545407 is fixed, it
 * should be turned back on again.
 */

"use strict";

var composeHelper = ChromeUtils.import(
  "resource://testing-common/mozmill/ComposeHelpers.jsm"
);
var { open_content_tab_with_url } = ChromeUtils.import(
  "resource://testing-common/mozmill/ContentTabHelpers.jsm"
);
var {
  assert_nothing_selected,
  assert_selected_and_displayed,
  be_in_folder,
  close_message_window,
  create_folder,
  get_about_3pane,
  get_about_message,
  mc,
  open_selected_message_in_new_window,
  select_click_row,
  select_shift_click_row,
} = ChromeUtils.import(
  "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
);

var folder = null;
var gMsgNo = 0;
var gMsgHdr = null;

// These two constants are used to build the message body.
var msgBody =
  '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n' +
  "<html>\n" +
  "<head>\n" +
  "\n" +
  '<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">\n' +
  "</head>\n" +
  '<body bgcolor="#ffffff" text="#000000">\n' +
  "dns prefetch test message\n" +
  "</body>\n</html>\n";

add_setup(async function () {
  folder = await create_folder("dnsPrefetch");
});

function addToFolder(aSubject, aBody, aFolder) {
  let msgId = Services.uuid.generateUUID() + "@mozillamessaging.invalid";

  let source =
    "From - Sat Nov  1 12:39:54 2008\n" +
    "X-Mozilla-Status: 0001\n" +
    "X-Mozilla-Status2: 00000000\n" +
    "Message-ID: <" +
    msgId +
    ">\n" +
    "Date: Wed, 11 Jun 2008 20:32:02 -0400\n" +
    "From: Tester <tests@mozillamessaging.invalid>\n" +
    "User-Agent: Thunderbird 3.0a2pre (Macintosh/2008052122)\n" +
    "MIME-Version: 1.0\n" +
    "To: recipient@mozillamessaging.invalid\n" +
    "Subject: " +
    aSubject +
    "\n" +
    "Content-Type: text/html; charset=ISO-8859-1\n" +
    "Content-Transfer-Encoding: 7bit\n" +
    "\n" +
    aBody +
    "\n";

  aFolder.QueryInterface(Ci.nsIMsgLocalMailFolder);
  aFolder.gettingNewMessages = true;

  aFolder.addMessage(source);
  aFolder.gettingNewMessages = false;

  return aFolder.msgDatabase.getMsgHdrForMessageID(msgId);
}

function addMsgToFolder(folder) {
  let msgDbHdr = addToFolder("exposed test message " + gMsgNo, msgBody, folder);

  // select the newly created message
  gMsgHdr = select_click_row(gMsgNo);

  Assert.equal(
    msgDbHdr,
    gMsgHdr,
    "Should have selected the same message header as the generated header"
  );

  assert_selected_and_displayed(gMsgNo);

  return gMsgNo++;
}

/**
 * Check remote content in a compose window.
 *
 * @param test        The test from TESTS that is being performed.
 * @param replyType   The type of the compose window, 0 = normal compose,
 *                    1 = reply, 2 = forward.
 * @param loadAllowed Whether or not the load is expected to be allowed.
 */
function checkComposeWindow(replyType) {
  let errMsg = "";
  let replyWindow = null;
  switch (replyType) {
    case 0:
      replyWindow = composeHelper.open_compose_new_mail();
      errMsg = "new mail";
      break;
    case 1:
      replyWindow = composeHelper.open_compose_with_reply();
      errMsg = "reply";
      break;
    case 2:
      replyWindow = composeHelper.open_compose_with_forward();
      errMsg = "forward";
      break;
  }

  // Check the prefetch in the compose window.
  Assert.ok(
    !replyWindow.window.document.getElementById("messageEditor").docShell
      .allowDNSPrefetch,
    `Should have disabled DNS prefetch in the compose window (${errMsg})`
  );

  composeHelper.close_compose_window(replyWindow);
}

add_task(async function test_dnsPrefetch_message() {
  // Now we have started up, simply check that DNS prefetch is disabled
  let aboutMessage = get_about_message();
  Assert.ok(
    !aboutMessage.document.getElementById("messagepane").docShell
      .allowDNSPrefetch,
    "messagepane should have disabled DNS prefetch at startup"
  );
  let about3Pane = get_about_3pane();
  Assert.ok(
    !about3Pane.document.getElementById("multiMessageBrowser").docShell
      .allowDNSPrefetch.allowDNSPrefetch,
    "multimessagepane should have disabled DNS prefetch at startup"
  );

  await be_in_folder(folder);

  assert_nothing_selected();

  let firstMsg = addMsgToFolder(folder);

  // Now we've got a message selected, check again.
  Assert.ok(
    !aboutMessage.document.getElementById("messagepane").docShell
      .allowDNSPrefetch,
    "Should keep DNS Prefetch disabled on messagepane after selecting message"
  );

  let secondMsg = addMsgToFolder(folder);
  select_shift_click_row(firstMsg);
  assert_selected_and_displayed(firstMsg, secondMsg);

  Assert.ok(
    !about3Pane.document.getElementById("multiMessageBrowser").docShell
      .allowDNSPrefetch,
    "Should keep DNS Prefetch disabled on multimessage after selecting message"
  );

  select_shift_click_row(secondMsg);
});

add_task(async function test_dnsPrefetch_standaloneMessage() {
  let msgc = await open_selected_message_in_new_window();
  assert_selected_and_displayed(msgc, gMsgHdr);

  // Check the docshell.
  let aboutMessage = get_about_message(msgc.window);
  Assert.ok(
    !aboutMessage.document.getElementById("messagepane").docShell
      .allowDNSPrefetch,
    "Should disable DNS Prefetch on messagepane in standalone message window."
  );

  close_message_window(msgc);
});

add_task(function test_dnsPrefetch_compose() {
  checkComposeWindow(0);
  checkComposeWindow(1);
  checkComposeWindow(2);
});

add_task(async function test_dnsPrefetch_contentTab() {
  // To open a tab we're going to have to cheat and use tabmail so we can load
  // in the data of what we want.
  let tabmail = mc.window.document.getElementById("tabmail");
  let preCount = tabmail.tabContainer.allTabs.length;

  let dataurl =
    "data:text/html,<html><head><title>test dns prefetch</title>" +
    "</head><body>test dns prefetch</body></html>";

  let newTab = open_content_tab_with_url(dataurl);

  await SpecialPowers.spawn(tabmail.getBrowserForSelectedTab(), [], () => {
    Assert.ok(docShell, "docShell should be available");
    Assert.ok(docShell.allowDNSPrefetch, "allowDNSPrefetch should be enabled");
  });

  tabmail.closeTab(newTab);

  if (tabmail.tabContainer.allTabs.length != preCount) {
    throw new Error("The content tab didn't close");
  }

  Assert.report(
    false,
    undefined,
    undefined,
    "Test ran to completion successfully"
  );
});