#literal #!/usr/bin/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 http://mozilla.org/MPL/2.0/. import SimpleHTTPServer import SocketServer import threading import os import sys import logging from getopt import getopt from automation import Automation PORT = 8888 SCRIPT_DIR = os.path.abspath(os.path.realpath(os.path.dirname(sys.argv[0]))) PROFILE_DIRECTORY = os.path.abspath(os.path.join(SCRIPT_DIR, "./leakprofile")) os.chdir(SCRIPT_DIR) class EasyServer(SocketServer.TCPServer): allow_reuse_address = True if __name__ == '__main__': automation = Automation() DIST_BIN = os.path.join(SCRIPT_DIR, automation.DIST_BIN) opts, extraArgs = getopt(sys.argv[1:], 'l:') if len(opts) > 0: try: automation.log.addHandler(logging.FileHandler(opts[0][1], "w")) except: automation.log.info("Unable to open logfile " + opts[0][1] + \ "ONLY logging to stdout.") httpd = EasyServer(("", PORT), SimpleHTTPServer.SimpleHTTPRequestHandler) t = threading.Thread(target=httpd.serve_forever) t.setDaemon(True) t.start() automation.setServerInfo("localhost", PORT) # keep a profile reference so that it is not cleaned up immediately via __del__ profile = automation.initializeProfile(PROFILE_DIRECTORY) browserEnv = automation.environment() if not "XPCOM_DEBUG_BREAK" in browserEnv: browserEnv["XPCOM_DEBUG_BREAK"] = "stack" url = "http://localhost:%d/bloatcycle.html" % PORT appPath = os.path.join(SCRIPT_DIR, automation.DEFAULT_APP) status = automation.runApp(url, browserEnv, appPath, PROFILE_DIRECTORY, extraArgs, timeout=1800) sys.exit(status)