|
1 #!/usr/bin/python |
|
2 # |
|
3 # This Source Code Form is subject to the terms of the Mozilla Public |
|
4 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
6 |
|
7 from mozprofile import FirefoxProfile, Profile, Preferences |
|
8 from mozprofile.permissions import ServerLocations |
|
9 from mozrunner import FirefoxRunner, CLI |
|
10 from mozhttpd import MozHttpd |
|
11 import json |
|
12 import socket |
|
13 import threading |
|
14 import os |
|
15 import sys |
|
16 import shutil |
|
17 import tempfile |
|
18 from datetime import datetime |
|
19 from mozbuild.base import MozbuildObject |
|
20 from buildconfig import substs |
|
21 |
|
22 PORT = 8888 |
|
23 |
|
24 if __name__ == '__main__': |
|
25 cli = CLI() |
|
26 debug_args, interactive = cli.debugger_arguments() |
|
27 |
|
28 build = MozbuildObject.from_environment() |
|
29 httpd = MozHttpd(port=PORT, |
|
30 docroot=os.path.join(build.topsrcdir, "build", "pgo")) |
|
31 httpd.start(block=False) |
|
32 |
|
33 locations = ServerLocations() |
|
34 locations.add_host(host='127.0.0.1', |
|
35 port=PORT, |
|
36 options='primary,privileged') |
|
37 |
|
38 #TODO: mozfile.TemporaryDirectory |
|
39 profilePath = tempfile.mkdtemp() |
|
40 try: |
|
41 #TODO: refactor this into mozprofile |
|
42 prefpath = os.path.join(build.topsrcdir, "testing", "profiles", "prefs_general.js") |
|
43 prefs = {} |
|
44 prefs.update(Preferences.read_prefs(prefpath)) |
|
45 interpolation = { "server": "%s:%d" % httpd.httpd.server_address, |
|
46 "OOP": "false"} |
|
47 prefs = json.loads(json.dumps(prefs) % interpolation) |
|
48 for pref in prefs: |
|
49 prefs[pref] = Preferences.cast(prefs[pref]) |
|
50 profile = FirefoxProfile(profile=profilePath, |
|
51 preferences=prefs, |
|
52 addons=[os.path.join(build.distdir, 'xpi-stage', 'quitter')], |
|
53 locations=locations) |
|
54 |
|
55 env = os.environ.copy() |
|
56 env["MOZ_CRASHREPORTER_NO_REPORT"] = "1" |
|
57 env["XPCOM_DEBUG_BREAK"] = "warn" |
|
58 |
|
59 # For VC12, make sure we can find the right bitness of pgort120.dll |
|
60 if "VS120COMNTOOLS" in env and not substs["HAVE_64BIT_OS"]: |
|
61 vc12dir = os.path.abspath(os.path.join(env["VS120COMNTOOLS"], |
|
62 "../../VC/bin")) |
|
63 if os.path.exists(vc12dir): |
|
64 env["PATH"] = vc12dir + ";" + env["PATH"] |
|
65 |
|
66 jarlog = os.getenv("JARLOG_FILE") |
|
67 if jarlog: |
|
68 env["MOZ_JAR_LOG_FILE"] = os.path.abspath(jarlog) |
|
69 print "jarlog: %s" % env["MOZ_JAR_LOG_FILE"] |
|
70 |
|
71 cmdargs = ["http://localhost:%d/index.html" % PORT] |
|
72 runner = FirefoxRunner(profile=profile, |
|
73 binary=build.get_binary_path(where="staged-package"), |
|
74 cmdargs=cmdargs, |
|
75 env=env) |
|
76 runner.start(debug_args=debug_args, interactive=interactive) |
|
77 runner.wait() |
|
78 httpd.stop() |
|
79 finally: |
|
80 shutil.rmtree(profilePath) |