const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
const TEST_APP_ID = "xpcshell@tests.mozilla.org";
const EVENT_NAME = "blocklist-data-gfxItems";
const SAMPLE_GFX_RECORD = {
"driverVersionComparator": "LESS_THAN_OR_EQUAL",
"driverVersion": "8.17.12.5896",
"vendor": "0x10de",
"blockID": "g36",
"feature": "DIRECT3D_9_LAYERS",
"devices": ["0x0a6c", "geforce"],
"featureStatus": "BLOCKED_DRIVER_VERSION",
"last_modified": 1458035931837,
"os": "WINNT 6.1",
"id": "3f947f16-37c2-4e96-d356-78b26363729b",
"versionRange": {"minVersion": 0, "maxVersion": "*"}
};
function Blocklist() {
let blocklist = Cc["@mozilla.org/extensions/blocklist;1"].
getService().wrappedJSObject;
blocklist._clear();
return blocklist;
}
function run_test() {
run_next_test();
}
add_task(function* test_sends_serialized_data() {
const blocklist = Blocklist();
blocklist._gfxEntries = [SAMPLE_GFX_RECORD];
const expected = "blockID:g36\tdevices:0x0a6c,geforce\tdriverVersion:8.17.12.5896\t" +
"driverVersionComparator:LESS_THAN_OR_EQUAL\tfeature:DIRECT3D_9_LAYERS\t" +
"featureStatus:BLOCKED_DRIVER_VERSION\tos:WINNT 6.1\tvendor:0x10de\t" +
"versionRange:0,*";
let received;
const observe = (subject, topic, data) => { received = data };
Services.obs.addObserver(observe, EVENT_NAME, false);
blocklist._notifyObserversBlocklistGFX();
equal(received, expected);
Services.obs.removeObserver(observe, EVENT_NAME);
});
add_task(function* test_parsing_fails_if_devices_contains_comma() {
const input = "" +
"" +
" " +
" " +
" 0x2,582" +
" 0x2782" +
" " +
" " +
"" +
"";
const blocklist = Blocklist();
blocklist._loadBlocklistFromString(input);
equal(blocklist._gfxEntries[0].devices.length, 1);
equal(blocklist._gfxEntries[0].devices[0], "0x2782");
});
add_task(function* test_empty_values_are_ignored() {
const input = "" +
"" +
" " +
" " +
" " +
"" +
"";
const blocklist = Blocklist();
let received;
const observe = (subject, topic, data) => { received = data };
Services.obs.addObserver(observe, EVENT_NAME, false);
blocklist._loadBlocklistFromString(input);
ok(received.indexOf("os" < 0));
Services.obs.removeObserver(observe, EVENT_NAME);
});
add_task(function* test_empty_devices_are_ignored() {
const input = "" +
"" +
" " +
" " +
" " +
"" +
"";
const blocklist = Blocklist();
let received;
const observe = (subject, topic, data) => { received = data };
Services.obs.addObserver(observe, EVENT_NAME, false);
blocklist._loadBlocklistFromString(input);
ok(received.indexOf("devices" < 0));
Services.obs.removeObserver(observe, EVENT_NAME);
});
add_task(function* test_version_range_default_values() {
const input = "" +
"" +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
"" +
"";
const blocklist = Blocklist();
blocklist._loadBlocklistFromString(input);
equal(blocklist._gfxEntries[0].versionRange.minVersion, "13.0b2");
equal(blocklist._gfxEntries[0].versionRange.maxVersion, "42.0");
equal(blocklist._gfxEntries[1].versionRange.minVersion, "0");
equal(blocklist._gfxEntries[1].versionRange.maxVersion, "2.0");
equal(blocklist._gfxEntries[2].versionRange.minVersion, "1.0");
equal(blocklist._gfxEntries[2].versionRange.maxVersion, "*");
equal(blocklist._gfxEntries[3].versionRange.minVersion, "0");
equal(blocklist._gfxEntries[3].versionRange.maxVersion, "*");
equal(blocklist._gfxEntries[4].versionRange.minVersion, "0");
equal(blocklist._gfxEntries[4].versionRange.maxVersion, "*");
});
add_task(function* test_blockid_attribute() {
const input = "" +
"" +
" " +
" 0x10de " +
" " +
" " +
" DIRECT3D_9_LAYERS " +
" " +
"" +
"";
const blocklist = Blocklist();
blocklist._loadBlocklistFromString(input);
equal(blocklist._gfxEntries[0].blockID, "g60");
ok(!blocklist._gfxEntries[1].hasOwnProperty("blockID"));
});