extensions/cookie/test/unit/test_permmanager_load_invalid_entries.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/extensions/cookie/test/unit/test_permmanager_load_invalid_entries.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,129 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +var DEBUG_TEST = false;
     1.8 +
     1.9 +function run_test() {
    1.10 +  // Setup a profile directory.
    1.11 +  var dir = do_get_profile();
    1.12 +  // Get the db file.
    1.13 +  var file = dir.clone();
    1.14 +  file.append("permissions.sqlite");
    1.15 +
    1.16 +  var storage = Cc["@mozilla.org/storage/service;1"]
    1.17 +                  .getService(Ci.mozIStorageService);
    1.18 +
    1.19 +  // Create database.
    1.20 +  var connection = storage.openDatabase(file);
    1.21 +  // The file should now exist.
    1.22 +  do_check_true(file.exists());
    1.23 +
    1.24 +  connection.schemaVersion = 3;
    1.25 +  connection.executeSimpleSQL(
    1.26 +    "CREATE TABLE moz_hosts (" +
    1.27 +      " id INTEGER PRIMARY KEY" +
    1.28 +      ",host TEXT" +
    1.29 +      ",type TEXT" +
    1.30 +      ",permission INTEGER" +
    1.31 +      ",expireType INTEGER" +
    1.32 +      ",expireTime INTEGER" +
    1.33 +      ",appId INTEGER" +
    1.34 +      ",isInBrowserElement INTEGER" +
    1.35 +    ")");
    1.36 +
    1.37 +  // Now we can inject garbadge in the database.
    1.38 +  var garbadge = [
    1.39 +    // Regular entry.
    1.40 +    { host: '42', type: '0', permission: 1, expireType: 0, expireTime: 0,
    1.41 +      appId: 0, isInBrowserElement: 0 },
    1.42 +
    1.43 +    // Special values in host (some being invalid).
    1.44 +    { host: 'scheme:file', type: '1', permission: 0, expireType: 0,
    1.45 +      expireTime: 0, appId: 0, isInBrowserElement: 0 },
    1.46 +    { host: '192.168.0.1', type: '2', permission: 0, expireType: 0,
    1.47 +      expireTime: 0, appId: 0, isInBrowserElement: 0 },
    1.48 +    { host: '2001:0db8:0000:0000:0000:ff00:0042:8329', type: '3', permission: 0,
    1.49 +      expireType: 0, expireTime: 0, appId: 0, isInBrowserElement: 0 },
    1.50 +    { host: '::1', type: '4', permission: 0, expireType: 0, expireTime: 0,
    1.51 +      appId: 0, isInBrowserElement: 0 },
    1.52 +
    1.53 +    // Permission is UNKNOWN_ACTION.
    1.54 +    { host: '42', type: '5', permission: Ci.nsIPermissionManager.UNKNOWN_ACTION,
    1.55 +      expireType: 0, expireTime: 0, appId: 0, isInBrowserElement: 0 },
    1.56 +
    1.57 +    // Permission is out of range.
    1.58 +    { host: '42', type: '6', permission: 100, expireType: 0, expireTime: 0,
    1.59 +      appId: 0, isInBrowserElement: 0 },
    1.60 +    { host: '42', type: '7', permission: -100, expireType: 0, expireTime: 0,
    1.61 +      appId: 0, isInBrowserElement: 0 },
    1.62 +
    1.63 +    // ExpireType is out of range.
    1.64 +    { host: '42', type: '8', permission: 1, expireType: -100, expireTime: 0,
    1.65 +      appId: 0, isInBrowserElement: 0 },
    1.66 +    { host: '42', type: '9', permission: 1, expireType: 100, expireTime: 0,
    1.67 +      appId: 0, isInBrowserElement: 0 },
    1.68 +
    1.69 +    // ExpireTime is at 0 with ExpireType = Time.
    1.70 +    { host: '42', type: '10', permission: 1,
    1.71 +      expireType: Ci.nsIPermissionManager.EXPIRE_TIME, expireTime: 0, appId: 0,
    1.72 +      isInBrowserElement: 0 },
    1.73 +
    1.74 +    // ExpireTime has a value with ExpireType != Time
    1.75 +    { host: '42', type: '11', permission: 1,
    1.76 +      expireType: Ci.nsIPermissionManager.EXPIRE_SESSION, expireTime: 1000,
    1.77 +      appId: 0, isInBrowserElement: 0 },
    1.78 +    { host: '42', type: '12', permission: 1,
    1.79 +      expireType: Ci.nsIPermissionManager.EXPIRE_NEVER, expireTime: 1000,
    1.80 +      appId: 0, isInBrowserElement: 0 },
    1.81 +
    1.82 +    // ExpireTime is negative.
    1.83 +    { host: '42', type: '13', permission: 1,
    1.84 +      expireType: Ci.nsIPermissionManager.EXPIRE_TIME, expireTime: -1,
    1.85 +      appId: 0, isInBrowserElement: 0 },
    1.86 +
    1.87 +    // AppId is negative.
    1.88 +    { host: '42', type: '14', permission: 1, expireType: 0, expireTime: 0,
    1.89 +      appId: -1, isInBrowserElement: 0 },
    1.90 +
    1.91 +    // IsInBrowserElement is negative or higher than 1.
    1.92 +    { host: '42', type: '15', permission: 1, expireType: 0, expireTime: 0,
    1.93 +      appId: 0, isInBrowserElement: -1 },
    1.94 +    { host: '42', type: '16', permission: 1, expireType: 0, expireTime: 0,
    1.95 +      appId: 0, isInBrowserElement: 10 },
    1.96 +
    1.97 +    // This insertion should be the last one. It is used to make sure we always
    1.98 +    // load it regardless of the previous entries validities.
    1.99 +    { host: 'example.org', type: 'test-load-invalid-entries',
   1.100 +      permission: Ci.nsIPermissionManager.ALLOW_ACTION, expireType: 0,
   1.101 +      expireTime: 0, appId: 0, isInBrowserElement: 0 },
   1.102 +  ];
   1.103 +
   1.104 +  for (var i=0; i<garbadge.length; ++i) {
   1.105 +    if (DEBUG_TEST) {
   1.106 +      dump("\n value #" + i + "\n\n");
   1.107 +    }
   1.108 +    var data = garbadge[i];
   1.109 +    connection.executeSimpleSQL(
   1.110 +      "INSERT INTO moz_hosts " +
   1.111 +      " (id, host, type, permission, expireType, expireTime, appId, isInBrowserElement) " +
   1.112 +      "VALUES (" + i + ", '" + data.host + "', '" + data.type + "', "
   1.113 +                 + data.permission + ", " + data.expireType + ", "
   1.114 +                 + data.expireTime + ", " + data.appId + ", "
   1.115 +                 + data.isInBrowserElement + ")"
   1.116 +    );
   1.117 +  }
   1.118 +
   1.119 +  // Initialize the permission manager service
   1.120 +  var pm = Cc["@mozilla.org/permissionmanager;1"]
   1.121 +             .getService(Ci.nsIPermissionManager);
   1.122 +
   1.123 +  // The schema should still be 3. We want this test to be updated for each
   1.124 +  // schema update.
   1.125 +  do_check_eq(connection.schemaVersion, 3);
   1.126 +
   1.127 +  // This permission should always be there.
   1.128 +  let principal = Cc["@mozilla.org/scriptsecuritymanager;1"]
   1.129 +                    .getService(Ci.nsIScriptSecurityManager)
   1.130 +                    .getNoAppCodebasePrincipal(NetUtil.newURI("http://example.org"));
   1.131 +  do_check_eq(pm.testPermissionFromPrincipal(principal, 'test-load-invalid-entries'), Ci.nsIPermissionManager.ALLOW_ACTION);
   1.132 +}

mercurial