summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/mozrunner/mozrunner/base/browser.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mozbase/mozrunner/mozrunner/base/browser.py')
-rw-r--r--testing/mozbase/mozrunner/mozrunner/base/browser.py122
1 files changed, 122 insertions, 0 deletions
diff --git a/testing/mozbase/mozrunner/mozrunner/base/browser.py b/testing/mozbase/mozrunner/mozrunner/base/browser.py
new file mode 100644
index 0000000000..0d7b88adc5
--- /dev/null
+++ b/testing/mozbase/mozrunner/mozrunner/base/browser.py
@@ -0,0 +1,122 @@
+# 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 copy
+import os
+import sys
+
+import mozinfo
+
+from ..application import DefaultContext, FirefoxContext
+from .runner import BaseRunner
+
+
+class GeckoRuntimeRunner(BaseRunner):
+ """
+ The base runner class used for local gecko runtime binaries,
+ such as Firefox and Thunderbird.
+ """
+
+ def __init__(self, binary, cmdargs=None, **runner_args):
+ self.show_crash_reporter = runner_args.pop("show_crash_reporter", False)
+ BaseRunner.__init__(self, **runner_args)
+
+ self.binary = binary
+ self.cmdargs = copy.copy(cmdargs) or []
+
+ if (
+ mozinfo.isWin
+ and (
+ isinstance(self.app_ctx, FirefoxContext)
+ or isinstance(self.app_ctx, DefaultContext)
+ )
+ and "--wait-for-browser" not in self.cmdargs
+ ):
+ # The launcher process is present in this configuration. Always
+ # pass this flag so that we can wait for the browser to complete
+ # its execution.
+ self.cmdargs.append("--wait-for-browser")
+
+ # allows you to run an instance of Firefox separately from any other instances
+ self.env["MOZ_NO_REMOTE"] = "1"
+
+ # Disable crash reporting dialogs that interfere with debugging
+ self.env["GNOME_DISABLE_CRASH_DIALOG"] = "1"
+ self.env["XRE_NO_WINDOWS_CRASH_DIALOG"] = "1"
+
+ # set the library path if needed on linux
+ if sys.platform == "linux2" and self.binary.endswith("-bin"):
+ dirname = os.path.dirname(self.binary)
+ if os.environ.get("LD_LIBRARY_PATH", None):
+ self.env["LD_LIBRARY_PATH"] = "%s:%s" % (
+ os.environ["LD_LIBRARY_PATH"],
+ dirname,
+ )
+ else:
+ self.env["LD_LIBRARY_PATH"] = dirname
+
+ @property
+ def command(self):
+ command = [self.binary, "-profile", self.profile.profile]
+
+ _cmdargs = [i for i in self.cmdargs if i != "-foreground"]
+ if len(_cmdargs) != len(self.cmdargs):
+ # foreground should be last; see
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=625614
+ self.cmdargs = _cmdargs
+ self.cmdargs.append("-foreground")
+ if mozinfo.isMac and "-foreground" not in self.cmdargs:
+ # runner should specify '-foreground' on Mac; see
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=916512
+ self.cmdargs.append("-foreground")
+
+ # Bug 775416 - Ensure that binary options are passed in first
+ command[1:1] = self.cmdargs
+ return command
+
+ def start(self, *args, **kwargs):
+ # ensure the profile exists
+ if not self.profile.exists():
+ self.profile.reset()
+ assert self.profile.exists(), (
+ "%s : failure to reset profile" % self.__class__.__name__
+ )
+
+ has_debugger = "debug_args" in kwargs and kwargs["debug_args"]
+ if has_debugger:
+ self.env["MOZ_CRASHREPORTER_DISABLE"] = "1"
+ else:
+ if not self.show_crash_reporter:
+ # hide the crash reporter window
+ self.env["MOZ_CRASHREPORTER_NO_REPORT"] = "1"
+ self.env["MOZ_CRASHREPORTER"] = "1"
+
+ BaseRunner.start(self, *args, **kwargs)
+
+
+class BlinkRuntimeRunner(BaseRunner):
+ """A base runner class for running apps like Google Chrome or Chromium."""
+
+ def __init__(self, binary, cmdargs=None, **runner_args):
+ super(BlinkRuntimeRunner, self).__init__(**runner_args)
+ self.binary = binary
+ self.cmdargs = cmdargs or []
+
+ data_dir, name = os.path.split(self.profile.profile)
+ profile_args = [
+ "--user-data-dir={}".format(data_dir),
+ "--profile-directory={}".format(name),
+ "--no-first-run",
+ ]
+ self.cmdargs.extend(profile_args)
+
+ @property
+ def command(self):
+ cmd = self.cmdargs[:]
+ if self.profile.addons:
+ cmd.append("--load-extension={}".format(",".join(self.profile.addons)))
+ return [self.binary] + cmd
+
+ def check_for_crashes(self, *args, **kwargs):
+ raise NotImplementedError