Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 const Cc = Components.classes;
6 const Ci = Components.interfaces;
7 const Cu = Components.utils;
8 const Cr = Components.results;
10 Cu.import("resource://testing-common/httpd.js");
12 const nsIBLS = Ci.nsIBlocklistService;
13 const URI_EXTENSION_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul";
15 var gBlocklist = null;
16 var gPrefs = null;
17 var gTestserver = null;
19 var gNextTestPart = null;
22 var PLUGINS = [{
23 // Tests a plugin whose state goes from not-blocked, to outdated
24 name: "test_bug514327_outdated",
25 version: "5",
26 disabled: false,
27 blocklisted: false
28 }, {
29 // Used to trigger the blocklist dialog, which indicates the blocklist has updated
30 name: "test_bug514327_1",
31 version: "5",
32 disabled: false,
33 blocklisted: false
34 }, {
35 // Used to trigger the blocklist dialog, which indicates the blocklist has updated
36 name: "test_bug514327_2",
37 version: "5",
38 disabled: false,
39 blocklisted: false
40 } ];
43 // A fake plugin host for the blocklist service to use
44 var PluginHost = {
45 getPluginTags: function(countRef) {
46 countRef.value = PLUGINS.length;
47 return PLUGINS;
48 },
50 QueryInterface: function(iid) {
51 if (iid.equals(Ci.nsIPluginHost)
52 || iid.equals(Ci.nsISupports))
53 return this;
55 throw Components.results.NS_ERROR_NO_INTERFACE;
56 }
57 }
59 var PluginHostFactory = {
60 createInstance: function (outer, iid) {
61 if (outer != null)
62 throw Components.results.NS_ERROR_NO_AGGREGATION;
63 return PluginHost.QueryInterface(iid);
64 }
65 };
67 // Don't need the full interface, attempts to call other methods will just
68 // throw which is just fine
69 var WindowWatcher = {
70 openWindow: function(parent, url, name, features, arguments) {
71 // Should be called to list the newly blocklisted items
72 do_check_eq(url, URI_EXTENSION_BLOCKLIST_DIALOG);
73 // Should only include one item
74 do_check_eq(arguments.wrappedJSObject.list.length, 1);
75 // And that item should be the blocked plugin, not the outdated one
76 var item = arguments.wrappedJSObject.list[0];
77 do_check_true(item.item instanceof Ci.nsIPluginTag);
78 do_check_neq(item.name, "test_bug514327_outdated");
80 // Call the next test after the blocklist has finished up
81 do_timeout(0, gNextTestPart);
82 },
84 QueryInterface: function(iid) {
85 if (iid.equals(Ci.nsIWindowWatcher)
86 || iid.equals(Ci.nsISupports))
87 return this;
89 throw Cr.NS_ERROR_NO_INTERFACE;
90 }
91 }
93 var WindowWatcherFactory = {
94 createInstance: function createInstance(outer, iid) {
95 if (outer != null)
96 throw Components.results.NS_ERROR_NO_AGGREGATION;
97 return WindowWatcher.QueryInterface(iid);
98 }
99 };
101 var registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
102 registrar.registerFactory(Components.ID("{721c3e73-969e-474b-a6dc-059fd288c428}"),
103 "Fake Plugin Host",
104 "@mozilla.org/plugin/host;1", PluginHostFactory);
105 registrar.registerFactory(Components.ID("{1dfeb90a-2193-45d5-9cb8-864928b2af55}"),
106 "Fake Window Watcher",
107 "@mozilla.org/embedcomp/window-watcher;1", WindowWatcherFactory);
110 function do_update_blocklist(aDatafile, aNextPart) {
111 gNextTestPart = aNextPart;
113 gPrefs.setCharPref("extensions.blocklist.url", "http://localhost:" + gPort + "/data/" + aDatafile);
114 gBlocklist.QueryInterface(Ci.nsITimerCallback).notify(null);
115 }
117 function run_test() {
118 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
120 gTestserver = new HttpServer();
121 gTestserver.registerDirectory("/data/", do_get_file("data"));
122 gTestserver.start(-1);
123 gPort = gTestserver.identity.primaryPort;
125 startupManager();
127 // initialize the blocklist with no entries
128 copyBlocklistToProfile(do_get_file("data/test_bug514327_3_empty.xml"));
130 gPrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
131 gBlocklist = Cc["@mozilla.org/extensions/blocklist;1"].getService(nsIBLS);
133 // should NOT be marked as outdated by the blocklist
134 do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_NOT_BLOCKED);
136 do_test_pending();
138 // update blocklist with data that marks the plugin as outdated
139 do_update_blocklist("test_bug514327_3_outdated_1.xml", test_part_1);
140 }
142 function test_part_1() {
143 // plugin should now be marked as outdated
144 do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_OUTDATED);
145 // and the notifyUser pref should be set to true
146 do_check_true(gPrefs.getBoolPref("plugins.update.notifyUser"));
148 // preternd the user has been notified, reset the pref
149 gPrefs.setBoolPref("plugins.update.notifyUser", false);
151 // update blocklist with data that marks the plugin as outdated
152 do_update_blocklist("test_bug514327_3_outdated_2.xml", test_part_2);
153 }
155 function test_part_2() {
156 // plugin should still be marked as outdated
157 do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_OUTDATED);
158 // and the notifyUser pref should NOT be set to true, as the plugin was already outdated
159 do_check_false(gPrefs.getBoolPref("plugins.update.notifyUser"));
161 finish();
162 }
164 function finish() {
165 gTestserver.stop(do_test_finished);
166 }