Commit 4d2af2a5 authored by Arthur Edelstein's avatar Arthur Edelstein Committed by Matthew Finkel
Browse files

Bug 12620: TorBrowser regression tests

Regression tests for Bug #2950: Make Permissions Manager memory-only

Regression tests for TB4: Tor Browser's Firefox preference overrides.

Note: many more functional tests could be made here

Regression tests for #2874: Block Components.interfaces from content

Bug 18923: Add a script to run all Tor Browser specific tests

Regression tests for Bug #16441: Suppress "Reset Tor Browser" prompt.
parent 0098c38f
# This script runs all the Mochitest tests that have been added or
# modified since the last ffxbld commit.
# It does not currently run XPCShell tests. We should change this if we
# start using this type or other types of tests.
# The logs of the tests are stored in the tbb-tests.log file.
# Ignored tests are listed in the tbb-tests-ignore.txt file.
if [ -n "$USE_TESTS_LIST" ] && [ -f tbb-tests-list.txt ]
echo "Using tests list from file tbb-tests-list.txt"
tests=($(cat tbb-tests-list.txt))
ffxbld_commit=$(git log -500 --format='oneline' | grep "TB3: Tor Browser's official .mozconfigs." \
| head -1 | cut -d ' ' -f 1)
tests=($(git diff --name-status "$ffxbld_commit" HEAD | \
grep -e '^[AM].*/test_[^/]\+\.\(html\|xul\)$' \
-e '^[AM].*/browser_[^/]\+\.js$' \
| sed 's/^[AM]\s\+//'))
echo 'The following tests will be run:'
for i in "${!tests[@]}"
if [ -z "$USE_TESTS_LIST" ] \
&& grep -q "^${tests[$i]}$" tbb-tests-ignore.txt
unset "tests[$i]"
echo "- ${tests[$i]}"
if [ -n "$WRITE_TESTS_LIST" ]
rm -f tbb-tests-list.txt
for i in "${!tests[@]}"
echo "${tests[$i]}" >> tbb-tests-list.txt
exit 0
rm -f tbb-tests.log
echo $'\n''Starting tests'
# We need `security.nocertdb = false` because of #18087. That pref is
# forced to have the same value as `browser.privatebrowsing.autostart` in
# torbutton, so we just set `browser.privatebrowsing.autostart=false` here.
./mach mochitest --log-tbpl tbb-tests.log \
--setpref network.file.path_blacklist='' \
--setpref extensions.torbutton.use_nontor_proxy=true \
--setpref browser.privatebrowsing.autostart=false \
echo "*************************"
echo "*************************"
echo "Summary of failed tests:"
grep --color=never TEST-UNEXPECTED-FAIL tbb-tests.log
// # Test for TB4: Tor Browser's Firefox preference overrides
// This is a minimal test to check whether the 000-tor-browser.js
// pref overrides are being used at all or not. More comprehensive
// pref tests are maintained in the tor-browser-bundle-testsuite project.
function test() {
let expectedPrefs = [
// Homepage
["browser.startup.homepage", "about:tor"],
// Disable the "Refresh" prompt that is displayed for stale profiles.
["browser.disableResetPrompt", true],
// Version placeholder
["torbrowser.version", "dev-build"],
let getPref = function (prefName) {
let type = Services.prefs.getPrefType(prefName);
if (type === Services.prefs.PREF_INT) return Services.prefs.getIntPref(prefName);
if (type === Services.prefs.PREF_BOOL) return Services.prefs.getBoolPref(prefName);
if (type === Services.prefs.PREF_STRING) return Services.prefs.getCharPref(prefName);
// Something went wrong.
throw new Error("Can't access pref " + prefName);
let testPref = function([key, expectedValue]) {
let foundValue = getPref(key);
is(foundValue, expectedValue, "Pref '" + key + "' should be '" + expectedValue +"'.");
} // end function test()
// # Regression tests for tor Bug #2950, Make Permissions Manager memory-only
// Ensures that permissions.sqlite file in profile directory is not written to,
// even when we write a value to Firefox's permissions database.
// The requisite test() function.
function test() {
// Needed because of asynchronous part later in the test.
// Shortcut
let Ci = Components.interfaces;
// ## utility functions
// __principal(spec)__.
// Creates a principal instance from a spec
// (string address such as "").
let principal = spec => Services.scriptSecurityManager.createContentPrincipalFromOrigin(spec);
// __setPermission(spec, key, value)__.
// Sets the site permission of type key to value, for the site located at address spec.
let setPermission = (spec, key, value) => SitePermissions.setForPrincipal(principal(spec), key, value);
// __getPermission(spec, key)__.
// Reads the site permission value for permission type key, for the site
// located at address spec.
let getPermission = (spec, key) => SitePermissions.getForPrincipal(principal(spec), key);
// __profileDirPath__.
// The Firefox Profile directory. Expected location of various persistent files.
let profileDirPath = Services.dirsvc.get("ProfD", Components.interfaces.nsIFile).path;
// __fileInProfile(fileName)__.
// Returns an nsIFile instance corresponding to a file in the Profile directory.
let fileInProfile = fileName => FileUtils.File(profileDirPath + "/" + fileName);
// ## Now let's run the test.
let SITE = "",
KEY = "popup";
let permissionsFile = fileInProfile("permissions.sqlite"),
lastModifiedTime = null,
newModifiedTime = null;
if (permissionsFile.exists()) {
lastModifiedTime = permissionsFile.lastModifiedTime;
// Read the original value of the permission.
let originalValue = getPermission(SITE, KEY);
// We need to delay by at least 1000 ms, because that's the granularity
// of file time stamps, it seems.
function () {
// Set the permission to a new value.
setPermission(SITE, KEY, SitePermissions.BLOCK);
// Now read back the permission value again.
let newReadValue = getPermission(SITE, KEY);
// Compare to confirm that the permission
// value was successfully changed.
Assert.notDeepEqual(originalValue, newReadValue, "Set a value in permissions db (perhaps in memory).");
// If file existed or now exists, get the current time stamp.
if (permissionsFile.exists()) {
newModifiedTime = permissionsFile.lastModifiedTime;
// If file was created or modified since we began this test,
// then permissions db is not memory only. Complain!
is(lastModifiedTime, newModifiedTime, "Don't write to permissions.sqlite file on disk.");
// We are done with the test.
}, 1100);
} // test()
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at
MOCHITEST_MANIFESTS += ['mochitest.ini']
BROWSER_CHROME_MANIFESTS += [ 'browser.ini' ]
Tor bug
<meta charset="utf-8">
<title>Test for Tor Bug 2874</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="application/javascript">
is(typeof Components, 'undefined', "The global window object should not expose a Components property to untrusted content.");
<a target="_blank" href="">Tor Bug 2874</a>
<p id="display"></p>
<div id="content" style="display: none">
<pre id="test">
......@@ -96,7 +96,8 @@ if CONFIG['MOZ_WEBRTC'] and CONFIG['COMPILE_ENVIRONMENT']:
DIRS += ['/testing/specialpowers']
DIRS += ['/testing/specialpowers',
DIRS += [
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment