addon-sdk/source/test/test-browser-events.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 module.metadata = {
     8   engines: {
     9     "Firefox": "*"
    10   }
    11 };
    13 const { Loader } = require("sdk/test/loader");
    14 const { open, getMostRecentBrowserWindow, getOuterId } = require("sdk/window/utils");
    15 const { setTimeout } = require("sdk/timers");
    17 exports["test browser events"] = function(assert, done) {
    18   let loader = Loader(module);
    19   let { events } = loader.require("sdk/browser/events");
    20   let { on, off } = loader.require("sdk/event/core");
    21   let actual = [];
    23   on(events, "data", function handler(e) {
    24     actual.push(e);
    25     if (e.type === "load") window.close();
    26     if (e.type === "close") {
    27       // Unload the module so that all listeners set by observer are removed.
    29       let [ ready, load, close ] = actual;
    31       assert.equal(ready.type, "DOMContentLoaded");
    32       assert.equal(ready.target, window, "window ready");
    34       assert.equal(load.type, "load");
    35       assert.equal(load.target, window, "window load");
    37       assert.equal(close.type, "close");
    38       assert.equal(close.target, window, "window load");
    40       // Note: If window is closed right after this GC won't have time
    41       // to claim loader and there for this listener, there for it's safer
    42       // to remove listener.
    43       off(events, "data", handler);
    44       loader.unload();
    45       done();
    46     }
    47   });
    49   // Open window and close it to trigger observers.
    50   let window = open();
    51 };
    53 exports["test browser events ignore other wins"] = function(assert, done) {
    54   let loader = Loader(module);
    55   let { events: windowEvents } = loader.require("sdk/window/events");
    56   let { events: browserEvents } = loader.require("sdk/browser/events");
    57   let { on, off } = loader.require("sdk/event/core");
    58   let actualBrowser = [];
    59   let actualWindow = [];
    61   function browserEventHandler(e) actualBrowser.push(e)
    62   on(browserEvents, "data", browserEventHandler);
    63   on(windowEvents, "data", function handler(e) {
    64     actualWindow.push(e);
    65     // Delay close so that if "load" is also emitted on `browserEvents`
    66     // `browserEventHandler` will be invoked.
    67     if (e.type === "load") setTimeout(window.close);
    68     if (e.type === "close") {
    69       assert.deepEqual(actualBrowser, [], "browser events were not triggered");
    70       let [ open, ready, load, close ] = actualWindow;
    72       assert.equal(open.type, "open");
    73       assert.equal(open.target, window, "window is open");
    77       assert.equal(ready.type, "DOMContentLoaded");
    78       assert.equal(ready.target, window, "window ready");
    80       assert.equal(load.type, "load");
    81       assert.equal(load.target, window, "window load");
    83       assert.equal(close.type, "close");
    84       assert.equal(close.target, window, "window load");
    87       // Note: If window is closed right after this GC won't have time
    88       // to claim loader and there for this listener, there for it's safer
    89       // to remove listener.
    90       off(windowEvents, "data", handler);
    91       off(browserEvents, "data", browserEventHandler);
    92       loader.unload();
    93       done();
    94     }
    95   });
    97   // Open window and close it to trigger observers.
    98   let window = open("data:text/html,not a browser");
    99 };
   101 require("test").run(exports);

mercurial