addon-sdk/source/test/addons/private-browsing-supported/test-global-private-browsing.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/. */
     4 'use strict';
     6 const windowUtils = require('sdk/deprecated/window-utils');
     7 const { isWindowPBSupported, isGlobalPBSupported } = require('sdk/private-browsing/utils');
     8 const { getFrames, getWindowTitle, onFocus, isWindowPrivate, windows, isBrowser } = require('sdk/window/utils');
     9 const { open, close, focus } = require('sdk/window/helpers');
    10 const { isPrivate } = require('sdk/private-browsing');
    11 const { Panel } = require('sdk/panel');
    12 const { Widget } = require('sdk/widget');
    13 const { fromIterator: toArray } = require('sdk/util/array');
    15 let { Loader } = require('sdk/test/loader');
    16 let loader = Loader(module, {
    17   console: Object.create(console, {
    18     error: {
    19       value: function(e) !/DEPRECATED:/.test(e) ? console.error(e) : undefined
    20     }
    21   })
    22 });
    23 const pb = loader.require('sdk/private-browsing');
    25 function makeEmptyBrowserWindow(options) {
    26   options = options || {};
    27   return open('chrome://browser/content/browser.xul', {
    28     features: {
    29       chrome: true,
    30       private: !!options.private,
    31       toolbar: true
    32     }
    33   });
    34 }
    36 exports.testShowPanelAndWidgetOnPrivateWindow = function(assert, done) {
    37   var myPrivateWindow;
    38   var finished = false;
    39   var privateWindow;
    40   var privateWindowClosed = false;
    42   pb.once('start', function() {
    43     assert.pass('private browsing mode started');
    45     // make a new private window
    46     makeEmptyBrowserWindow().then(function(window) {
    47       myPrivateWindow = window;
    49       let wt = windowUtils.WindowTracker({
    50         onTrack: function(window) {
    51           if (!isBrowser(window) || window !== myPrivateWindow) return;
    53           assert.ok(isWindowPrivate(window), 'window is private onTrack!');
    54           let panel = Panel({
    55             onShow: function() {
    56               assert.ok(this.isShowing, 'the panel is showing on the private window');
    58               let count = 0;
    59               let widget = Widget({
    60                 id: "testShowPanelAndWidgetOnPrivateWindow-id",
    61                 label: "My Hello Widget",
    62                 content: "Hello!",
    63                 onAttach: function(mod) {
    64                   count++;
    65                   if (count == 2) {
    66                     panel.destroy();
    67                     widget.destroy();
    68                     close(window);
    69                   }
    70                 }
    71               });
    72             }
    73           }).show(null, window.gBrowser);
    74         },
    75         onUntrack: function(window) {
    76           if (window === myPrivateWindow) {
    77             wt.unload();
    79             pb.once('stop', function() {
    80               assert.pass('private browsing mode end');
    81               done();
    82             });
    84             pb.deactivate();
    85           }
    86         }
    87       });
    89       assert.equal(isWindowPrivate(window), true, 'the opened window is private');
    90       assert.equal(isPrivate(window), true, 'the opened window is private');
    91       assert.ok(getFrames(window).length > 1, 'there are frames for private window');
    92       assert.equal(getWindowTitle(window), window.document.title,
    93                    'getWindowTitle works');
    94     });
    95   });
    96   pb.activate();
    97 };
    99 exports.testWindowTrackerDoesNotIgnorePrivateWindows = function(assert, done) {
   100   var myPrivateWindow;
   101   var count = 0;
   103   let wt = windowUtils.WindowTracker({
   104     onTrack: function(window) {
   105       if (!isBrowser(window) || !isWindowPrivate(window)) return;
   106       assert.ok(isWindowPrivate(window), 'window is private onTrack!');
   107       if (++count == 1)
   108         close(window);
   109     },
   110     onUntrack: function(window) {
   111       if (count == 1 && isWindowPrivate(window)) {
   112         wt.unload();
   114         pb.once('stop', function() {
   115           assert.pass('private browsing mode end');
   116           done();
   117         });
   118         pb.deactivate();
   119       }
   120     }
   121   });
   123   pb.once('start', function() {
   124     assert.pass('private browsing mode started');
   125     makeEmptyBrowserWindow();
   126   });
   127   pb.activate();
   128 }
   130 exports.testWindowIteratorDoesNotIgnorePrivateWindows = function(assert, done) {
   131   pb.once('start', function() {
   132     // make a new private window
   133     makeEmptyBrowserWindow().then(function(window) {
   134       assert.ok(isWindowPrivate(window), "window is private");
   135       assert.equal(isPrivate(window), true, 'the opened window is private');
   136       assert.ok(toArray(windowUtils.windowIterator()).indexOf(window) > -1,
   137                 "window is in windowIterator()");
   138       assert.ok(windows(null, { includePrivate: true }).indexOf(window) > -1,
   139                 "window is in windows()");
   141       return close(window).then(function() {
   142         pb.once('stop', function() {
   143           done();
   144         });
   145         pb.deactivate();
   146       });
   147     }).then(null, assert.fail);
   148   });
   149   pb.activate();
   150 };

mercurial