diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-06-11 19:14:14 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-06-11 19:14:14 +0200 |
commit | b0d3c8eee3ee78c011feeac36cf7c8ee9785b63b (patch) | |
tree | a92b03c89138f37b73582152348ee4503343a1e7 /qutebrowser | |
parent | c6cdd3f8440b22a294911ebed0492beea8913c49 (diff) | |
download | qutebrowser-b0d3c8eee3ee78c011feeac36cf7c8ee9785b63b.tar.gz qutebrowser-b0d3c8eee3ee78c011feeac36cf7c8ee9785b63b.zip |
Greasemonkey: Make sure script names are unique
Fixes #6353
Diffstat (limited to 'qutebrowser')
-rw-r--r-- | qutebrowser/browser/greasemonkey.py | 15 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 7 |
2 files changed, 21 insertions, 1 deletions
diff --git a/qutebrowser/browser/greasemonkey.py b/qutebrowser/browser/greasemonkey.py index 03db3be0c..7fea5820c 100644 --- a/qutebrowser/browser/greasemonkey.py +++ b/qutebrowser/browser/greasemonkey.py @@ -67,6 +67,7 @@ class GreasemonkeyScript: self.runs_on_sub_frames = True self.jsworld = "main" self.name = '' + self.dedup_suffix = 1 for name, value in properties: if name == 'name': @@ -104,6 +105,20 @@ class GreasemonkeyScript: def __str__(self): return self.name + def full_name(self) -> str: + """Get the full name of this script. + + This includes a GM- prefix, its namespace (if any) and deduplication + counter suffix, if set. + """ + parts = ['GM-'] + if self.namespace is not None: + parts += [self.namespace, '/'] + parts.append(self.name) + if self.dedup_suffix > 1: + parts.append(f"-{self.dedup_suffix}") + return ''.join(parts) + @classmethod def parse(cls, source, filename=None): """GreasemonkeyScript factory. diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index f9b636bde..b2ca42cbe 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -1112,7 +1112,12 @@ class _WebEngineScripts(QObject): page_scripts = self._widget.page().scripts() self._remove_all_greasemonkey_scripts() + seen_names = set() for script in scripts: + while script.full_name() in seen_names: + script.dedup_suffix += 1 + seen_names.add(script.full_name()) + new_script = QWebEngineScript() try: @@ -1144,7 +1149,7 @@ class _WebEngineScripts(QObject): new_script.setInjectionPoint(QWebEngineScript.DocumentReady) new_script.setSourceCode(script.code()) - new_script.setName(f"GM-{script.name}") + new_script.setName(script.full_name()) new_script.setRunsOnSubFrames(script.runs_on_sub_frames) if script.needs_document_end_workaround(): |