addon-sdk/source/test/addons/page-mod-debugger-pre/main.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 { Cu } = require('chrome');
     7 const { PageMod } = require('sdk/page-mod');
     8 const tabs = require('sdk/tabs');
     9 const promise = require('sdk/core/promise')
    10 const { getMostRecentBrowserWindow } = require('sdk/window/utils');
    11 const { data } = require('sdk/self');
    12 const { set } = require('sdk/preferences/service');
    14 const { DebuggerServer } = Cu.import('resource://gre/modules/devtools/dbg-server.jsm', {});
    15 const { DebuggerClient } = Cu.import('resource://gre/modules/devtools/dbg-client.jsm', {});
    17 let gClient;
    18 let ok;
    19 let testName = 'testDebugger';
    20 let iframeURL = 'data:text/html;charset=utf-8,' + testName;
    21 let TAB_URL = 'data:text/html;charset=utf-8,' + encodeURIComponent('<iframe src="' + iframeURL + '" />');
    22 TAB_URL = data.url('index.html');
    23 let mod;
    25 exports.testDebugger = function(assert, done) {
    26   ok = assert.ok.bind(assert);
    27   assert.pass('starting test');
    28   set('devtools.debugger.log', true);
    30   mod = PageMod({
    31     include: TAB_URL,
    32     attachTo: ['existing', 'top', 'frame'],
    33     contentScriptFile: data.url('script.js'),
    34   });
    35   ok(true, 'PageMod was created');
    37   if (!DebuggerServer.initialized) {
    38     DebuggerServer.init(() => true);
    39     DebuggerServer.addBrowserActors();
    40   }
    42   let transport = DebuggerServer.connectPipe();
    43   gClient = new DebuggerClient(transport);
    44   gClient.connect((aType, aTraits) => {
    45     tabs.open({
    46       url: TAB_URL,
    47       onLoad: function(tab) {
    48         assert.pass('tab loaded');
    50         attachTabActorForUrl(gClient, TAB_URL).
    51           then(_ => { assert.pass('attachTabActorForUrl called'); return _; }).
    52           then(attachThread).
    53           then(testDebuggerStatement).
    54           then(_ => { assert.pass('testDebuggerStatement called') }).
    55           then(closeConnection).
    56           then(_ => { assert.pass('closeConnection called') }).
    57           then(done).
    58           then(null, aError => {
    59             ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
    60           });
    61       }
    62     });
    63   });
    64 }
    66 function attachThread([aGrip, aResponse]) {
    67   let deferred = promise.defer();
    69   // Now attach and resume...
    70   gClient.request({ to: aResponse.threadActor, type: "attach" }, () => {
    71     gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
    72       ok(true, "Pause wasn't called before we've attached.");
    73       deferred.resolve([aGrip, aResponse]);
    74     });
    75   });
    77   return deferred.promise;
    78 }
    80 function testDebuggerStatement([aGrip, aResponse]) {
    81   let deferred = promise.defer();
    82   ok(aGrip, 'aGrip existss')
    84   gClient.addListener("paused", (aEvent, aPacket) => {
    85     ok(true, 'there was a pause event');
    86     gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
    87       ok(true, "The pause handler was triggered on a debugger statement.");
    88       deferred.resolve();
    89     });
    90   });
    92   let debuggee = getMostRecentBrowserWindow().gBrowser.selectedTab.linkedBrowser.contentWindow.wrappedJSObject;
    93   debuggee.runDebuggerStatement();
    94   ok(true, 'called runDebuggerStatement');
    96   return deferred.promise;
    97 }
    99 function getTabActorForUrl(aClient, aUrl) {
   100   let deferred = promise.defer();
   102   aClient.listTabs(aResponse => {
   103     let tabActor = aResponse.tabs.filter(aGrip => aGrip.url == aUrl).pop();
   104     deferred.resolve(tabActor);
   105   });
   107   return deferred.promise;
   108 }
   110 function attachTabActorForUrl(aClient, aUrl) {
   111   let deferred = promise.defer();
   113   getTabActorForUrl(aClient, aUrl).then(aGrip => {
   114     aClient.attachTab(aGrip.actor, aResponse => {
   115       deferred.resolve([aGrip, aResponse]);
   116     });
   117   });
   119   return deferred.promise;
   120 }
   122 function closeConnection() {
   123   let deferred = promise.defer();
   124   gClient.close(deferred.resolve);
   125   return deferred.promise;
   126 }
   128 require('sdk/test/runner').runTestsFromModule(module);

mercurial