summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/in-content/tests/browser_security.js
blob: e6eb2a91d7a552705dbf864e72b90db952fde88b (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
const PREFS = [
  "browser.safebrowsing.phishing.enabled",
  "browser.safebrowsing.malware.enabled",

  "browser.safebrowsing.downloads.enabled",

  "browser.safebrowsing.downloads.remote.block_potentially_unwanted",
  "browser.safebrowsing.downloads.remote.block_uncommon"
];

let originals = PREFS.map(pref => [pref, Services.prefs.getBoolPref(pref)])
let originalMalwareTable = Services.prefs.getCharPref("urlclassifier.malwareTable");
registerCleanupFunction(function() {
  originals.forEach(([pref, val]) => Services.prefs.setBoolPref(pref, val))
  Services.prefs.setCharPref("urlclassifier.malwareTable", originalMalwareTable);
});

// test the safebrowsing preference
add_task(function*() {
  function* checkPrefSwitch(val1, val2) {
    Services.prefs.setBoolPref("browser.safebrowsing.phishing.enabled", val1);
    Services.prefs.setBoolPref("browser.safebrowsing.malware.enabled", val2);

    yield openPreferencesViaOpenPreferencesAPI("security", undefined, { leaveOpen: true });

    let doc = gBrowser.selectedBrowser.contentDocument;
    let checkbox = doc.getElementById("enableSafeBrowsing");
    let blockDownloads = doc.getElementById("blockDownloads");
    let blockUncommon = doc.getElementById("blockUncommonUnwanted");
    let checked = checkbox.checked;
    is(checked, val1 && val2, "safebrowsing preference is initialized correctly");
    // should be disabled when checked is false (= pref is turned off)
    is(blockDownloads.hasAttribute("disabled"), !checked, "block downloads checkbox is set correctly");
    is(blockUncommon.hasAttribute("disabled"), !checked, "block uncommon checkbox is set correctly");

    // click the checkbox
    EventUtils.synthesizeMouseAtCenter(checkbox, {}, gBrowser.selectedBrowser.contentWindow);

    // check that both settings are now turned on or off
    is(Services.prefs.getBoolPref("browser.safebrowsing.phishing.enabled"), !checked,
       "safebrowsing.enabled is set correctly");
    is(Services.prefs.getBoolPref("browser.safebrowsing.malware.enabled"), !checked,
       "safebrowsing.malware.enabled is set correctly");

    // check if the other checkboxes have updated
    checked = checkbox.checked;
    is(blockDownloads.hasAttribute("disabled"), !checked, "block downloads checkbox is set correctly");
    is(blockUncommon.hasAttribute("disabled"), !checked || !blockDownloads.checked, "block uncommon checkbox is set correctly");

    yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
  }

  yield checkPrefSwitch(true, true);
  yield checkPrefSwitch(false, true);
  yield checkPrefSwitch(true, false);
  yield checkPrefSwitch(false, false);
});

// test the download protection preference
add_task(function*() {
  function* checkPrefSwitch(val) {
    Services.prefs.setBoolPref("browser.safebrowsing.downloads.enabled", val);

    yield openPreferencesViaOpenPreferencesAPI("security", undefined, { leaveOpen: true });

    let doc = gBrowser.selectedBrowser.contentDocument;
    let checkbox = doc.getElementById("blockDownloads");
    let blockUncommon = doc.getElementById("blockUncommonUnwanted");
    let checked = checkbox.checked;
    is(checked, val, "downloads preference is initialized correctly");
    // should be disabled when val is false (= pref is turned off)
    is(blockUncommon.hasAttribute("disabled"), !val, "block uncommon checkbox is set correctly");

    // click the checkbox
    EventUtils.synthesizeMouseAtCenter(checkbox, {}, gBrowser.selectedBrowser.contentWindow);

    // check that setting is now turned on or off
    is(Services.prefs.getBoolPref("browser.safebrowsing.downloads.enabled"), !checked,
       "safebrowsing.downloads preference is set correctly");

    // check if the uncommon warning checkbox has updated
    is(blockUncommon.hasAttribute("disabled"), val, "block uncommon checkbox is set correctly");

    yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
  }

  yield checkPrefSwitch(true);
  yield checkPrefSwitch(false);
});

// test the unwanted/uncommon software warning preference
add_task(function*() {
  function* checkPrefSwitch(val1, val2) {
    Services.prefs.setBoolPref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", val1);
    Services.prefs.setBoolPref("browser.safebrowsing.downloads.remote.block_uncommon", val2);

    yield openPreferencesViaOpenPreferencesAPI("security", undefined, { leaveOpen: true });

    let doc = gBrowser.selectedBrowser.contentDocument;
    let checkbox = doc.getElementById("blockUncommonUnwanted");
    let checked = checkbox.checked;
    is(checked, val1 && val2, "unwanted/uncommon preference is initialized correctly");

    // click the checkbox
    EventUtils.synthesizeMouseAtCenter(checkbox, {}, gBrowser.selectedBrowser.contentWindow);

    // check that both settings are now turned on or off
    is(Services.prefs.getBoolPref("browser.safebrowsing.downloads.remote.block_potentially_unwanted"), !checked,
       "block_potentially_unwanted is set correctly");
    is(Services.prefs.getBoolPref("browser.safebrowsing.downloads.remote.block_uncommon"), !checked,
       "block_uncommon is set correctly");

    // when the preference is on, the malware table should include these ids
    let malwareTable = Services.prefs.getCharPref("urlclassifier.malwareTable").split(",");
    is(malwareTable.includes("goog-unwanted-shavar"), !checked,
       "malware table doesn't include goog-unwanted-shavar");
    is(malwareTable.includes("test-unwanted-simple"), !checked,
       "malware table doesn't include test-unwanted-simple");
    let sortedMalware = malwareTable.slice(0);
    sortedMalware.sort();
    Assert.deepEqual(malwareTable, sortedMalware, "malware table has been sorted");

    yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
  }

  yield* checkPrefSwitch(true, true);
  yield* checkPrefSwitch(false, true);
  yield* checkPrefSwitch(true, false);
  yield* checkPrefSwitch(false, false);
});