michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: var DEBUG_TEST = false; michael@0: michael@0: function run_test() { michael@0: // Setup a profile directory. michael@0: var dir = do_get_profile(); michael@0: // Get the db file. michael@0: var file = dir.clone(); michael@0: file.append("permissions.sqlite"); michael@0: michael@0: var storage = Cc["@mozilla.org/storage/service;1"] michael@0: .getService(Ci.mozIStorageService); michael@0: michael@0: // Create database. michael@0: var connection = storage.openDatabase(file); michael@0: // The file should now exist. michael@0: do_check_true(file.exists()); michael@0: michael@0: connection.schemaVersion = 3; michael@0: connection.executeSimpleSQL( michael@0: "CREATE TABLE moz_hosts (" + michael@0: " id INTEGER PRIMARY KEY" + michael@0: ",host TEXT" + michael@0: ",type TEXT" + michael@0: ",permission INTEGER" + michael@0: ",expireType INTEGER" + michael@0: ",expireTime INTEGER" + michael@0: ",appId INTEGER" + michael@0: ",isInBrowserElement INTEGER" + michael@0: ")"); michael@0: michael@0: // Now we can inject garbadge in the database. michael@0: var garbadge = [ michael@0: // Regular entry. michael@0: { host: '42', type: '0', permission: 1, expireType: 0, expireTime: 0, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: michael@0: // Special values in host (some being invalid). michael@0: { host: 'scheme:file', type: '1', permission: 0, expireType: 0, michael@0: expireTime: 0, appId: 0, isInBrowserElement: 0 }, michael@0: { host: '192.168.0.1', type: '2', permission: 0, expireType: 0, michael@0: expireTime: 0, appId: 0, isInBrowserElement: 0 }, michael@0: { host: '2001:0db8:0000:0000:0000:ff00:0042:8329', type: '3', permission: 0, michael@0: expireType: 0, expireTime: 0, appId: 0, isInBrowserElement: 0 }, michael@0: { host: '::1', type: '4', permission: 0, expireType: 0, expireTime: 0, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: michael@0: // Permission is UNKNOWN_ACTION. michael@0: { host: '42', type: '5', permission: Ci.nsIPermissionManager.UNKNOWN_ACTION, michael@0: expireType: 0, expireTime: 0, appId: 0, isInBrowserElement: 0 }, michael@0: michael@0: // Permission is out of range. michael@0: { host: '42', type: '6', permission: 100, expireType: 0, expireTime: 0, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: { host: '42', type: '7', permission: -100, expireType: 0, expireTime: 0, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: michael@0: // ExpireType is out of range. michael@0: { host: '42', type: '8', permission: 1, expireType: -100, expireTime: 0, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: { host: '42', type: '9', permission: 1, expireType: 100, expireTime: 0, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: michael@0: // ExpireTime is at 0 with ExpireType = Time. michael@0: { host: '42', type: '10', permission: 1, michael@0: expireType: Ci.nsIPermissionManager.EXPIRE_TIME, expireTime: 0, appId: 0, michael@0: isInBrowserElement: 0 }, michael@0: michael@0: // ExpireTime has a value with ExpireType != Time michael@0: { host: '42', type: '11', permission: 1, michael@0: expireType: Ci.nsIPermissionManager.EXPIRE_SESSION, expireTime: 1000, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: { host: '42', type: '12', permission: 1, michael@0: expireType: Ci.nsIPermissionManager.EXPIRE_NEVER, expireTime: 1000, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: michael@0: // ExpireTime is negative. michael@0: { host: '42', type: '13', permission: 1, michael@0: expireType: Ci.nsIPermissionManager.EXPIRE_TIME, expireTime: -1, michael@0: appId: 0, isInBrowserElement: 0 }, michael@0: michael@0: // AppId is negative. michael@0: { host: '42', type: '14', permission: 1, expireType: 0, expireTime: 0, michael@0: appId: -1, isInBrowserElement: 0 }, michael@0: michael@0: // IsInBrowserElement is negative or higher than 1. michael@0: { host: '42', type: '15', permission: 1, expireType: 0, expireTime: 0, michael@0: appId: 0, isInBrowserElement: -1 }, michael@0: { host: '42', type: '16', permission: 1, expireType: 0, expireTime: 0, michael@0: appId: 0, isInBrowserElement: 10 }, michael@0: michael@0: // This insertion should be the last one. It is used to make sure we always michael@0: // load it regardless of the previous entries validities. michael@0: { host: 'example.org', type: 'test-load-invalid-entries', michael@0: permission: Ci.nsIPermissionManager.ALLOW_ACTION, expireType: 0, michael@0: expireTime: 0, appId: 0, isInBrowserElement: 0 }, michael@0: ]; michael@0: michael@0: for (var i=0; i