Merge pull request #2661 from mhils/browser-win

Fix browser addon on Windows
This commit is contained in:
Aldo Cortesi 2017-12-12 09:10:05 +13:00 committed by GitHub
commit 25cf3db658
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 10 deletions

View File

@ -1,15 +1,27 @@
import shutil
import subprocess
import sys
import tempfile
import typing
from mitmproxy import command
from mitmproxy import ctx
platformPaths = {
"linux": "google-chrome",
"win32": "chrome.exe",
"darwin": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
}
def get_chrome_executable() -> typing.Optional[str]:
for browser in (
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
# https://stackoverflow.com/questions/40674914/google-chrome-path-in-windows-10
r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
r"C:\Program Files (x86)\Google\Application\chrome.exe",
# Linux binary names from Python's webbrowser module.
"google-chrome",
"chrome",
"chromium",
"chromium-browser",
):
if shutil.which(browser):
return browser
return None
class Browser:
@ -29,8 +41,8 @@ class Browser:
else:
self.done()
cmd = platformPaths.get(sys.platform)
if not cmd: # pragma: no cover
cmd = get_chrome_executable()
if not cmd:
ctx.log.alert("Your platform is not supported yet - please submit a patch.")
return
@ -59,4 +71,4 @@ class Browser:
self.browser.kill()
self.tdir.cleanup()
self.browser = None
self.tdir = None
self.tdir = None

View File

@ -5,7 +5,8 @@ from mitmproxy.test import taddons
def test_browser():
with mock.patch("subprocess.Popen") as po:
with mock.patch("subprocess.Popen") as po, mock.patch("shutil.which") as which:
which.return_value = "chrome"
b = browser.Browser()
with taddons.context() as tctx:
b.start()
@ -18,3 +19,13 @@ def test_browser():
assert tctx.master.has_log("already running")
b.done()
assert not b.browser
def test_no_browser():
with mock.patch("shutil.which") as which:
which.return_value = False
b = browser.Browser()
with taddons.context() as tctx:
b.start()
assert tctx.master.has_log("platform is not supported")