File: test_classifier_changetablepref.html

package info (click to toggle)
thunderbird 1%3A60.9.0-1~deb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,339,424 kB
  • sloc: cpp: 5,457,040; ansic: 2,360,385; python: 596,167; asm: 340,963; java: 326,296; xml: 258,830; sh: 84,445; makefile: 23,701; perl: 17,317; objc: 3,768; yacc: 1,766; ada: 1,681; lex: 1,364; pascal: 1,264; cs: 879; exp: 527; php: 436; lisp: 258; ruby: 153; awk: 152; sed: 53; csh: 27
file content (108 lines) | stat: -rw-r--r-- 3,771 bytes parent folder | download | duplicates (2)
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
<!DOCTYPE HTML>
<html>
<head>
  <title>Bug 1281083 - Changing the urlclassifier.*Table prefs doesn't take effect before the next browser restart.</title>
  <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="classifierHelper.js"></script>
  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
</head>

<body>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">

<script src="head.js"></script>
<script class="testbody" type="text/javascript">

const testTable = "moz-track-digest256";
const UPDATE_URL = "http://mochi.test:8888/tests/toolkit/components/url-classifier/tests/mochitest/update.sjs";

var Cc = SpecialPowers.Cc;
var Ci = SpecialPowers.Ci;

var timer = Cc["@mozilla.org/timer;1"]
            .createInstance(Ci.nsITimer);

// If default preference contain the table we want to test,
// We should change test table to a different one.
var trackingTables = SpecialPowers.getCharPref("urlclassifier.trackingTable").split(",");
ok(!trackingTables.includes(testTable), "test table should not be in the preference");

var listmanager = Cc["@mozilla.org/url-classifier/listmanager;1"].
                    getService(Ci.nsIUrlListManager);

is(listmanager.getGethashUrl(testTable), "",
   "gethash url for test table should be empty before setting to preference");

function loadTestFrame() {
  // gethash url of test table "moz-track-digest256" should be updated
  // after setting preference.
  var url = listmanager.getGethashUrl(testTable);
  var expected = SpecialPowers.getCharPref("browser.safebrowsing.provider.mozilla.gethashURL");

  is(url, expected, testTable + " matches its gethash url");

  // Trigger update
  listmanager.disableUpdate(testTable);
  listmanager.enableUpdate(testTable);
  listmanager.maybeToggleUpdateChecking();

  // We wait until "nextupdattime" was set as a signal that update is complete.
  waitForUpdateSuccess(function() {
    document.getElementById("testFrame").src = "bug_1281083.html";
  });
}

function waitForUpdateSuccess(callback) {
  let nextupdatetime =
    SpecialPowers.getCharPref("browser.safebrowsing.provider.mozilla.nextupdatetime");

  if (nextupdatetime !== "1") {
    callback();
    return;
  }

  timer.initWithCallback(function() {
    waitForUpdateSuccess(callback);
  }, 10, Ci.nsITimer.TYPE_ONE_SHOT);
}

function runTest() {
  /**
   * In this test we try to modify only urlclassifier.*Table preference to see if
   * url specified in the table will be blocked after update.
   */
  var pushPrefPromise = SpecialPowers.pushPrefEnv(
    {"set": [["urlclassifier.trackingTable", testTable]]});

  // To make sure url is not blocked by an already blocked url.
  // Here we use non-tracking.example.com as a tracked url.
  // Since this table is only used in this bug, so it won't affect other testcases.
  var addCompletePromise =
    addCompletionToServer(testTable, "bug1281083.example.com/", UPDATE_URL);

  Promise.all([pushPrefPromise, addCompletePromise])
    .then(() => {
      loadTestFrame();
    });
}

// Set nextupdatetime to 1 to trigger an update
SpecialPowers.pushPrefEnv(
  {"set": [["privacy.trackingprotection.enabled", true],
           ["channelclassifier.allowlist_example", true],
           ["browser.safebrowsing.provider.mozilla.nextupdatetime", "1"],
           ["browser.safebrowsing.provider.mozilla.lists", testTable],
           ["browser.safebrowsing.provider.mozilla.updateURL", UPDATE_URL]]},
  runTest);

// Expected finish() call is in "bug_1281083.html".
SimpleTest.waitForExplicitFinish();

</script>
</pre>
<iframe id="testFrame" width="100%" height="100%" onload=""></iframe>
</body>
</html>