From 2b9a2800ce66cf805043be6ef18d9ef58670b04d Mon Sep 17 00:00:00 2001 From: AmirNakhaeii Date: Sat, 24 Jun 2023 17:36:35 -0400 Subject: [PATCH 1/4] gh-105983: added incognito / private mode to webbrowser.py --- Lib/webbrowser.py | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 8b0628745c57fc..249610b6081981 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -102,6 +102,13 @@ def open_new_tab(url): return open(url, 2) +def open_new_incognito_tab(url): + """Open url in a new incognito / private page ("tab") of the default browser. + + If not possible, then the behavior becomes equivalent to open_new(). + """ + return open(url, 3) + def _synthesize(browser, *, preferred=False): """Attempt to synthesize a controller based on existing controllers. @@ -153,7 +160,9 @@ def open_new(self, url): def open_new_tab(self, url): return self.open(url, 2) - + + def open_new_incognito_tab(self, url): + return self.open(url, 3) class GenericBrowser(BaseBrowser): """Class for all browsers started with a command @@ -218,6 +227,7 @@ class UnixBrowser(BaseBrowser): remote_action = None remote_action_newwin = None remote_action_newtab = None + remote_action_new_incognito_tab = None def _invoke(self, args, remote, autoraise, url=None): raise_opt = [] @@ -261,10 +271,11 @@ def open(self, url, new=0, autoraise=True): elif new == 1: action = self.remote_action_newwin elif new == 2: - if self.remote_action_newtab is None: + if action := self.remote_action_newtab is None: + action = self.remote_action_newwin + elif new == 3: + if action := self.remote_action_new_incognito_tab is None: action = self.remote_action_newwin - else: - action = self.remote_action_newtab else: raise Error("Bad 'new' parameter to open(); " + "expected 0, 1, or 2, got %s" % new) @@ -288,6 +299,7 @@ class Mozilla(UnixBrowser): remote_action = "" remote_action_newwin = "-new-window" remote_action_newtab = "-new-tab" + remote_action_new_incognito_tab = "--private-window" background = True @@ -298,6 +310,7 @@ class Epiphany(UnixBrowser): remote_args = ['%action', '%s'] remote_action = "-n" remote_action_newwin = "-w" + remote_action_new_incognito_tab = "-i" background = True @@ -308,6 +321,7 @@ class Chrome(UnixBrowser): remote_action = "" remote_action_newwin = "--new-window" remote_action_newtab = "" + remote_action_new_incognito_tab = "--incognito" background = True Chromium = Chrome @@ -320,6 +334,7 @@ class Opera(UnixBrowser): remote_action = "" remote_action_newwin = "--new-window" remote_action_newtab = "" + remote_action_new_incognito_tab = "--private" background = True @@ -330,6 +345,7 @@ class Elinks(UnixBrowser): remote_action = "" remote_action_newwin = ",new-window" remote_action_newtab = ",new-tab" + remote_action_new_incognito_tab = "" background = False # elinks doesn't like its stdout to be redirected - @@ -397,6 +413,7 @@ class Edge(UnixBrowser): remote_action = "" remote_action_newwin = "--new-window" remote_action_newtab = "" + remote_action_new_incognito_tab = "--private" background = True @@ -590,23 +607,24 @@ def open(self, url, new=0, autoraise=True): def main(): import getopt - usage = """Usage: %s [-n | -t | -h] url + usage = """Usage: %s [-n | -t | -h | -i] url -n: open new window -t: open new tab + -i: open new incognito / private tab -h, --help: show help""" % sys.argv[0] try: - opts, args = getopt.getopt(sys.argv[1:], 'ntdh',['help']) + opts, args = getopt.getopt(sys.argv[1:], 'ntdhi',['help']) except getopt.error as msg: print(msg, file=sys.stderr) print(usage, file=sys.stderr) sys.exit(1) new_win = 0 for o, a in opts: - if o == '-n': new_win = 1 - elif o == '-t': new_win = 2 - elif o == '-h' or o == '--help': - print(usage, file=sys.stderr) - sys.exit() + match o: + case '-n': new_win = 1 + case '-t': new_win = 2 + case '-i': new_win = 3 + case '-h' | '--help': print(usage, file=sys.stderr); sys.exit() if len(args) != 1: print(usage, file=sys.stderr) sys.exit(1) From 545784d94cbd9edf8067fd6d13c3b0e9454a225b Mon Sep 17 00:00:00 2001 From: AmirNakhaeii Date: Sat, 24 Jun 2023 17:59:32 -0400 Subject: [PATCH 2/4] gh-105983: Fixed some logical errors --- Lib/webbrowser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 249610b6081981..b2861a6b21427c 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -271,10 +271,10 @@ def open(self, url, new=0, autoraise=True): elif new == 1: action = self.remote_action_newwin elif new == 2: - if action := self.remote_action_newtab is None: + if (action := self.remote_action_newtab) is None: action = self.remote_action_newwin elif new == 3: - if action := self.remote_action_new_incognito_tab is None: + if (action := self.remote_action_new_incognito_tab) is None: action = self.remote_action_newwin else: raise Error("Bad 'new' parameter to open(); " + From f1a20fbf5c9bc5ea25603fc58f72873d4c861d24 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Sat, 24 Jun 2023 23:51:28 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2023-06-24-23-51-27.gh-issue-105983.qTo-Jq.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2023-06-24-23-51-27.gh-issue-105983.qTo-Jq.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-06-24-23-51-27.gh-issue-105983.qTo-Jq.rst b/Misc/NEWS.d/next/Core and Builtins/2023-06-24-23-51-27.gh-issue-105983.qTo-Jq.rst new file mode 100644 index 00000000000000..bc2af2373adf27 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-06-24-23-51-27.gh-issue-105983.qTo-Jq.rst @@ -0,0 +1,2 @@ +Add incognito / private mode to webbrowser module +open browser in incognito mode when in open() function new parameter is equal 3 From 9e9811b12c7722f9ed6eae96b02e0df2fa8e390a Mon Sep 17 00:00:00 2001 From: AmirHo3ein <136080247+AmirNakhaeii@users.noreply.github.com> Date: Sun, 25 Jun 2023 17:54:16 +0330 Subject: [PATCH 4/4] gh-105983: Fix incognito flag for edge browser --- Lib/webbrowser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index b2861a6b21427c..d72af7b44b50b2 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -413,7 +413,7 @@ class Edge(UnixBrowser): remote_action = "" remote_action_newwin = "--new-window" remote_action_newtab = "" - remote_action_new_incognito_tab = "--private" + remote_action_new_incognito_tab = "--inprivate" background = True