Bug 1363373 - Browse to mitmproxy playback pages during browser init
MozReview-Commit-ID: 1Tbo3rG2gsq
--- a/testing/talos/talos/ffsetup.py
+++ b/testing/talos/talos/ffsetup.py
@@ -53,16 +53,18 @@ class FFSetup(object):
def __init__(self, browser_config, test_config):
self.browser_config, self.test_config = browser_config, test_config
self._tmp_dir = tempfile.mkdtemp()
self.env = None
# The profile dir must be named 'profile' because of xperf analysis
# (in etlparser.py). TODO fix that ?
self.profile_dir = os.path.join(self._tmp_dir, 'profile')
self.gecko_profile = None
+ self.mitmproxy = False
+ self.mitmproxy_recordings_list = None
def _init_env(self):
self.env = dict(os.environ)
for k, v in self.browser_config['env'].iteritems():
self.env[k] = str(v)
self.env['MOZ_CRASHREPORTER_NO_REPORT'] = '1'
if self.browser_config['symbols_path']:
self.env['MOZ_CRASHREPORTER'] = '1'
@@ -109,16 +111,22 @@ class FFSetup(object):
def _run_profile(self):
runner_cls = mozrunner.runners.get(
mozinfo.info.get(
'appname',
'firefox'),
mozrunner.Runner)
+ # if using mitmproxy we don't want the init_url to close the browser
+ if self.browser_config.get('mitmproxy', None):
+ self.browser_config['init_url'] = self.browser_config['init_url'] + '?close=False'
+ self.mitmproxy = True
+ self.mitmproxy_recordings_list = self.browser_config.get('mitmproxy_recordings_list', None)
+
if self.test_config.get('webextensions', None):
args = [self.browser_config["extra_args"], "-marionette"]
runner = runner_cls(profile=self.profile_dir,
binary=self.browser_config["browser_path"],
cmdargs=args,
process_class=ProcessHandlerMixin,
process_args={})
@@ -145,32 +153,55 @@ class FFSetup(object):
if not filename.endswith('.xpi'):
continue
if not os.path.exists(filename):
continue
addons.install(filename)
- # browse to init_url which will close the browser
+ # browse to init_url which will close the browser (if mitmproxy isn't being used)
client.navigate(self.browser_config["init_url"])
client.close()
else:
args = [self.browser_config["extra_args"], self.browser_config["init_url"]]
runner = runner_cls(profile=self.profile_dir,
binary=self.browser_config["browser_path"],
cmdargs=args,
process_class=ProcessHandlerMixin,
process_args={})
runner.start(outputTimeout=30)
proc = runner.process_handler
LOG.process_start(proc.pid, "%s %s" % (self.browser_config["browser_path"],
' '.join(args)))
+ # if using mitmproxy, the init_url will have left the browser open; now we want to
+ # browse to each of the test pages in the mitmproxy playback set, to initialize
+ if self.mitmproxy:
+ LOG.info("mitmproxy test pages init: browsing to each page in the playback archive")
+ try:
+ client = Marionette(host='localhost', port=2828)
+ client.start_session()
+ except Exception, e:
+ print e
+ raise TalosError("Failed test page init: couldn't establish mariontte connection")
+
+ try:
+ for test_page in self.mitmproxy_recordings_list:
+ LOG.info("mitmproxy test page init: %s" % test_page)
+ client.navigate(test_page)
+
+ LOG.info("mitmproxy test pages init complete, closing the browser")
+ client.close()
+ except Exception, e:
+ print e
+ raise TalosError("Failed mitmproxy test page init, %s" % e)
+ # TODO: Move above into own py module in /mitmproxy
+
try:
exit_code = proc.wait()
except Exception, e:
proc.kill()
raise TalosError("Browser Failed to close properly during warmup")
LOG.process_exit(proc.pid, exit_code)
--- a/testing/talos/talos/run_tests.py
+++ b/testing/talos/talos/run_tests.py
@@ -191,16 +191,17 @@ def run_tests(config, browser_config):
if config['gecko_profile']:
talos_results.add_extra_option('geckoProfile')
# some tests use mitmproxy to playback pages
mitmproxy_recordings_list = config.get('mitmproxy', False)
if mitmproxy_recordings_list is not False:
# needed so can tell talos ttest to allow external connections
browser_config['mitmproxy'] = True
+ browser_config['mitmproxy_recordings_list'] = mitmproxy_recordings_list
# start mitmproxy playback; this also generates the CA certificate
mitmdump_path = config.get('mitmdumpPath', False)
if mitmdump_path is False:
# cannot continue, need path for mitmdump playback tool
LOG.error('Aborting: mitmdumpPath was not provided on cmd line but is required')
sys.exit()
--- a/testing/talos/talos/tests/quit.js
+++ b/testing/talos/talos/tests/quit.js
@@ -68,16 +68,24 @@ function canQuitApplication()
return true;
}
function goQuitApplication(waitForSafeBrowsing)
{
const privs = 'UniversalPreferencesRead UniversalPreferencesWrite ' +
'UniversalXPConnect';
+ // getInfo has optional url param to not close the browser after init
+ if (window.location.search.indexOf("close=False") > -1) {
+ console.log('not closing the browser');
+ return;
+ } else {
+ console.log('will close the browser');
+ }
+
try
{
netscape.security.PrivilegeManager.enablePrivilege(privs);
}
catch(ex)
{
throw('goQuitApplication: privilege failure ' + ex);
}