addon-sdk/source/test/test-hotkeys.js

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     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 "use strict";
     7 const { Hotkey } = require("sdk/hotkeys");
     8 const { keyDown } = require("sdk/dom/events/keys");
     9 const { Loader } = require('sdk/test/loader');
    10 const timer = require("sdk/timers");
    11 const winUtils = require("sdk/deprecated/window-utils");
    13 exports["test hotkey: function key"] = function(assert, done) {
    14   var element = winUtils.activeBrowserWindow.document.documentElement;
    15   var showHotKey = Hotkey({
    16     combo: "f1",
    17     onPress: function() {
    18       assert.pass("first callback is called");
    19       assert.equal(this, showHotKey,
    20         'Context `this` in `onPress` should be the hotkey object');
    21       keyDown(element, "f2");
    22       showHotKey.destroy();
    23     }
    24   });
    26   var hideHotKey = Hotkey({
    27     combo: "f2",
    28     onPress: function() {
    29       assert.pass("second callback is called");
    30       hideHotKey.destroy();
    31       done();
    32     }
    33   });
    35   keyDown(element, "f1");
    36 };
    38 exports["test hotkey: accel alt shift"] = function(assert, done) {
    39   var element = winUtils.activeBrowserWindow.document.documentElement;
    40   var showHotKey = Hotkey({
    41     combo: "accel-shift-6",
    42     onPress: function() {
    43       assert.pass("first callback is called");
    44       keyDown(element, "accel-alt-shift-6");
    45       showHotKey.destroy();
    46     }
    47   });
    49   var hideHotKey = Hotkey({
    50     combo: "accel-alt-shift-6",
    51     onPress: function() {
    52       assert.pass("second callback is called");
    53       hideHotKey.destroy();
    54       done();
    55     }
    56   });
    58   keyDown(element, "accel-shift-6");
    59 };
    61 exports["test hotkey meta & control"] = function(assert, done) {
    62   var element = winUtils.activeBrowserWindow.document.documentElement;
    63   var showHotKey = Hotkey({
    64     combo: "meta-3",
    65     onPress: function() {
    66       assert.pass("first callback is called");
    67       keyDown(element, "alt-control-shift-b");
    68       showHotKey.destroy();
    69     }
    70   });
    72   var hideHotKey = Hotkey({
    73     combo: "Ctrl-Alt-Shift-B",
    74     onPress: function() {
    75       assert.pass("second callback is called");
    76       hideHotKey.destroy();
    77       done();
    78     }
    79   });
    81   keyDown(element, "meta-3");
    82 };
    84 exports["test hotkey: control-1 / meta--"] = function(assert, done) {
    85   var element = winUtils.activeBrowserWindow.document.documentElement;
    86   var showHotKey = Hotkey({
    87     combo: "control-1",
    88     onPress: function() {
    89       assert.pass("first callback is called");
    90       keyDown(element, "meta--");
    91       showHotKey.destroy();
    92     }
    93   });
    95   var hideHotKey = Hotkey({
    96     combo: "meta--",
    97     onPress: function() {
    98       assert.pass("second callback is called");
    99       hideHotKey.destroy();
   100       done();
   101     }
   102   });
   104   keyDown(element, "control-1");
   105 };
   107 exports["test invalid combos"] = function(assert) {
   108   assert.throws(function() {
   109     Hotkey({
   110       combo: "d",
   111       onPress: function() {}
   112     });
   113   }, "throws if no modifier is present");
   114   assert.throws(function() {
   115     Hotkey({
   116       combo: "alt",
   117       onPress: function() {}
   118     });
   119   }, "throws if no key is present");
   120   assert.throws(function() {
   121     Hotkey({
   122       combo: "alt p b",
   123       onPress: function() {}
   124     });
   125   }, "throws if more then one key is present");
   126 };
   128 exports["test no exception on unmodified keypress"] = function(assert) {
   129   var element = winUtils.activeBrowserWindow.document.documentElement;
   130   var someHotkey = Hotkey({
   131     combo: "control-alt-1",
   132     onPress: function() {
   133     }
   134   });
   135   keyDown(element, "a");
   136   assert.pass("No exception throw, unmodified keypress passed");
   137 };
   139 exports["test hotkey: automatic destroy"] = function(assert, done) {
   140   // Hacky way to be able to create unloadable modules via makeSandboxedLoader.
   141   let loader = Loader(module);
   143   var called = false;
   144   var element = loader.require("sdk/deprecated/window-utils").activeBrowserWindow.document.documentElement;
   145   var hotkey = loader.require("sdk/hotkeys").Hotkey({
   146     combo: "accel-shift-x",
   147     onPress: function() {
   148       called = true;
   149     }
   150   });
   152   // Unload the module so that previous hotkey is automatically destroyed
   153   loader.unload();
   155   // Ensure that the hotkey is really destroyed
   156   keyDown(element, "accel-shift-x");
   158   timer.setTimeout(function () {
   159     assert.ok(!called, "Hotkey is destroyed and not called.");
   160     done();
   161   }, 0);
   162 };
   164 require("test").run(exports);

mercurial