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.

michael@0 1 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 4 "use strict";
michael@0 5
michael@0 6 const { Cu } = require('chrome');
michael@0 7 const { PageMod } = require('sdk/page-mod');
michael@0 8 const tabs = require('sdk/tabs');
michael@0 9 const promise = require('sdk/core/promise')
michael@0 10 const { getMostRecentBrowserWindow } = require('sdk/window/utils');
michael@0 11 const { data } = require('sdk/self');
michael@0 12 const { set } = require('sdk/preferences/service');
michael@0 13
michael@0 14 const { DebuggerServer } = Cu.import('resource://gre/modules/devtools/dbg-server.jsm', {});
michael@0 15 const { DebuggerClient } = Cu.import('resource://gre/modules/devtools/dbg-client.jsm', {});
michael@0 16
michael@0 17 let gClient;
michael@0 18 let ok;
michael@0 19 let testName = 'testDebugger';
michael@0 20 let iframeURL = 'data:text/html;charset=utf-8,' + testName;
michael@0 21 let TAB_URL = 'data:text/html;charset=utf-8,' + encodeURIComponent('<iframe src="' + iframeURL + '" />');
michael@0 22 TAB_URL = data.url('index.html');
michael@0 23 let mod;
michael@0 24
michael@0 25 exports.testDebugger = function(assert, done) {
michael@0 26 ok = assert.ok.bind(assert);
michael@0 27 assert.pass('starting test');
michael@0 28 set('devtools.debugger.log', true);
michael@0 29
michael@0 30 mod = PageMod({
michael@0 31 include: TAB_URL,
michael@0 32 attachTo: ['existing', 'top', 'frame'],
michael@0 33 contentScriptFile: data.url('script.js'),
michael@0 34 });
michael@0 35 ok(true, 'PageMod was created');
michael@0 36
michael@0 37 if (!DebuggerServer.initialized) {
michael@0 38 DebuggerServer.init(() => true);
michael@0 39 DebuggerServer.addBrowserActors();
michael@0 40 }
michael@0 41
michael@0 42 let transport = DebuggerServer.connectPipe();
michael@0 43 gClient = new DebuggerClient(transport);
michael@0 44 gClient.connect((aType, aTraits) => {
michael@0 45 tabs.open({
michael@0 46 url: TAB_URL,
michael@0 47 onLoad: function(tab) {
michael@0 48 assert.pass('tab loaded');
michael@0 49
michael@0 50 attachTabActorForUrl(gClient, TAB_URL).
michael@0 51 then(_ => { assert.pass('attachTabActorForUrl called'); return _; }).
michael@0 52 then(attachThread).
michael@0 53 then(testDebuggerStatement).
michael@0 54 then(_ => { assert.pass('testDebuggerStatement called') }).
michael@0 55 then(closeConnection).
michael@0 56 then(_ => { assert.pass('closeConnection called') }).
michael@0 57 then(done).
michael@0 58 then(null, aError => {
michael@0 59 ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
michael@0 60 });
michael@0 61 }
michael@0 62 });
michael@0 63 });
michael@0 64 }
michael@0 65
michael@0 66 function attachThread([aGrip, aResponse]) {
michael@0 67 let deferred = promise.defer();
michael@0 68
michael@0 69 // Now attach and resume...
michael@0 70 gClient.request({ to: aResponse.threadActor, type: "attach" }, () => {
michael@0 71 gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
michael@0 72 ok(true, "Pause wasn't called before we've attached.");
michael@0 73 deferred.resolve([aGrip, aResponse]);
michael@0 74 });
michael@0 75 });
michael@0 76
michael@0 77 return deferred.promise;
michael@0 78 }
michael@0 79
michael@0 80 function testDebuggerStatement([aGrip, aResponse]) {
michael@0 81 let deferred = promise.defer();
michael@0 82 ok(aGrip, 'aGrip existss')
michael@0 83
michael@0 84 gClient.addListener("paused", (aEvent, aPacket) => {
michael@0 85 ok(true, 'there was a pause event');
michael@0 86 gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
michael@0 87 ok(true, "The pause handler was triggered on a debugger statement.");
michael@0 88 deferred.resolve();
michael@0 89 });
michael@0 90 });
michael@0 91
michael@0 92 let debuggee = getMostRecentBrowserWindow().gBrowser.selectedTab.linkedBrowser.contentWindow.wrappedJSObject;
michael@0 93 debuggee.runDebuggerStatement();
michael@0 94 ok(true, 'called runDebuggerStatement');
michael@0 95
michael@0 96 return deferred.promise;
michael@0 97 }
michael@0 98
michael@0 99 function getTabActorForUrl(aClient, aUrl) {
michael@0 100 let deferred = promise.defer();
michael@0 101
michael@0 102 aClient.listTabs(aResponse => {
michael@0 103 let tabActor = aResponse.tabs.filter(aGrip => aGrip.url == aUrl).pop();
michael@0 104 deferred.resolve(tabActor);
michael@0 105 });
michael@0 106
michael@0 107 return deferred.promise;
michael@0 108 }
michael@0 109
michael@0 110 function attachTabActorForUrl(aClient, aUrl) {
michael@0 111 let deferred = promise.defer();
michael@0 112
michael@0 113 getTabActorForUrl(aClient, aUrl).then(aGrip => {
michael@0 114 aClient.attachTab(aGrip.actor, aResponse => {
michael@0 115 deferred.resolve([aGrip, aResponse]);
michael@0 116 });
michael@0 117 });
michael@0 118
michael@0 119 return deferred.promise;
michael@0 120 }
michael@0 121
michael@0 122 function closeConnection() {
michael@0 123 let deferred = promise.defer();
michael@0 124 gClient.close(deferred.resolve);
michael@0 125 return deferred.promise;
michael@0 126 }
michael@0 127
michael@0 128 require('sdk/test/runner').runTestsFromModule(module);

mercurial