addon-sdk/source/test/addons/private-browsing-supported/test-page-mod.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 const { getMostRecentBrowserWindow } = require('sdk/window/utils');
     2 const { PageMod } = require("sdk/page-mod");
     3 const { getActiveTab, setTabURL, openTab, closeTab } = require('sdk/tabs/utils');
     4 const xulApp = require('sdk/system/xul-app');
     5 const windowHelpers = require('sdk/window/helpers');
     6 const { defer } = require("sdk/core/promise");
     7 const { isPrivate } = require('sdk/private-browsing');
     8 const { isTabPBSupported, isWindowPBSupported } = require('sdk/private-browsing/utils');
    10 function openWebpage(url, enablePrivate) {
    11   let { promise, resolve, reject } = defer();
    13   if (xulApp.is("Fennec")) {
    14     let chromeWindow = getMostRecentBrowserWindow();
    15     let rawTab = openTab(chromeWindow, url, {
    16       isPrivate: enablePrivate
    17     });
    19     resolve(function() {
    20       closeTab(rawTab)
    21     });
    23     return promise;
    24   }
    25   else {
    26     windowHelpers.open("", {
    27       features: {
    28         toolbar: true,
    29         private: enablePrivate
    30       }
    31     }).then(function(chromeWindow) {
    32       if (isPrivate(chromeWindow) !== !!enablePrivate)
    33         reject(new Error("Window should have Private set to " + !!enablePrivate));
    35       let tab = getActiveTab(chromeWindow);
    36       setTabURL(tab, url);
    38       resolve(function(){
    39         windowHelpers.close(chromeWindow);
    40       });
    41     });
    43     return promise;
    44   }
    45 }
    47 exports["test page-mod on private tab"] = function (assert, done) {
    48   // Only set private mode when explicitely supported.
    49   // (fennec 19 has some intermediate PB support where isTabPBSupported
    50   // will be false, but isPrivate(worker.tab) will be true if we open a private
    51   // tab)
    52   let setPrivate = isTabPBSupported || isWindowPBSupported;
    54   let id = Date.now().toString(36);
    55   let frameUri = "data:text/html;charset=utf-8," + id;
    56   let uri = "data:text/html;charset=utf-8," +
    57             encodeURIComponent(id + "<iframe src='" + frameUri + "'><iframe>");
    59   let count = 0;
    61   openWebpage(uri, setPrivate).then(function(close) {
    62     PageMod({
    63       include: [uri, frameUri],
    65       onAttach: function(worker) {
    66         assert.ok(worker.tab.url == uri || worker.tab.url == frameUri,
    67                   "Got a worker attached to the private window tab");
    69         if (setPrivate) {
    70           assert.ok(isPrivate(worker), "The worker is really private");
    71           assert.ok(isPrivate(worker.tab), "The document is really private");
    72         }
    73         else {
    74           assert.ok(!isPrivate(worker),
    75                     "private browsing isn't supported, " +
    76                     "so that the worker isn't private");
    77           assert.ok(!isPrivate(worker.tab),
    78                     "private browsing isn't supported, " +
    79                     "so that the document isn't private");
    80         }
    82         if (++count == 2) {
    83           this.destroy();
    84           close();
    85           done();
    86         }
    87       }
    88     });
    89   }).then(null, assert.fail);
    90 };
    92 exports["test page-mod on non-private tab"] = function (assert, done) {
    93   let id = Date.now().toString(36);
    94   let url = "data:text/html;charset=utf-8," + encodeURIComponent(id);
    96   openWebpage(url, false).then(function(close){
    97     PageMod({
    98       include: url,
    99       onAttach: function(worker) {
   100         assert.equal(worker.tab.url, url,
   101                      "Got a worker attached to the private window tab");
   102         assert.ok(!isPrivate(worker), "The worker is really non-private");
   103         assert.ok(!isPrivate(worker.tab), "The document is really non-private");
   105         this.destroy();
   106         close();
   107         done();
   108       }
   109     });
   110   }).then(null, assert.fail);
   111 }

mercurial