From e6dc62e51a38a80ba78cfb78101196a8534449f3 Mon Sep 17 00:00:00 2001 From: Richard Bloor Date: Fri, 14 Feb 2025 05:48:08 +1300 Subject: [PATCH 1/4] Bug 1943050 new `webExtension.api.userScripts` --- webextensions/api/runtime.json | 42 ++++ webextensions/api/userScripts.json | 235 ++++++++++++++---- .../manifest/optional_permissions.json | 20 ++ webextensions/manifest/permissions.json | 20 ++ 4 files changed, 275 insertions(+), 42 deletions(-) diff --git a/webextensions/api/runtime.json b/webextensions/api/runtime.json index b7b9184b18f7c5..c45785fa123197 100644 --- a/webextensions/api/runtime.json +++ b/webextensions/api/runtime.json @@ -1162,6 +1162,48 @@ } } }, + "onUserScriptConnect": { + "__compat": { + "support": { + "chrome": { + "version_added": "115", + "notes": "Available for use with Manifest V3 only." + }, + "edge": "mirror", + "firefox": { + "version_added": "136", + "notes": "Available for use with Manifest V3 only." + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + } + }, + "onUserScriptMessage": { + "__compat": { + "support": { + "chrome": { + "version_added": "115", + "notes": "Available for use with Manifest V3 only." + }, + "edge": "mirror", + "firefox": { + "version_added": "136", + "notes": "Available for use with Manifest V3 only." + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + } + }, "openOptionsPage": { "__compat": { "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/openOptionsPage", diff --git a/webextensions/api/userScripts.json b/webextensions/api/userScripts.json index 3ec2308a2f3bdd..a9691fc28dbe39 100644 --- a/webextensions/api/userScripts.json +++ b/webextensions/api/userScripts.json @@ -2,16 +2,74 @@ "webextensions": { "api": { "userScripts": { + "__compat": { + "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts", + "support": { + "chrome": { + "version_added": "115", + "notes": "Available for use with Manifest V3 only." + }, + "edge": "mirror", + "firefox": { + "version_added": "136", + "notes": "Available for use with Manifest V3 only." + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + }, + "ExecutionWorld": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + } + }, "RegisteredUserScript": { "__compat": { "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts/RegisteredUserScript", "support": { "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { "version_added": false }, + "safari_ios": "mirror" + } + } + }, + "ScriptSource": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, "edge": "mirror", "firefox": { - "version_added": "68" + "version_added": "136" }, "firefox_android": "mirror", "opera": "mirror", @@ -20,38 +78,93 @@ }, "safari_ios": "mirror" } - }, - "unregister": { - "__compat": { - "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts/RegisteredUserScript/unregister", - "support": { - "chrome": { - "version_added": false - }, - "edge": "mirror", - "firefox": { - "version_added": "68" - }, - "firefox_android": "mirror", - "opera": "mirror", - "safari": { - "version_added": false - }, - "safari_ios": "mirror" - } + } + }, + "UserScriptFilter": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" } } }, - "onBeforeScript": { + "WorldProperties": { "__compat": { - "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts/onBeforeScript", "support": { "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { "version_added": false }, + "safari_ios": "mirror" + } + } + }, + "configureWorld": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, "edge": "mirror", "firefox": { - "version_added": "68" + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + } + }, + "getScripts": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + } + }, + "getWorldConfigurations": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" }, "firefox_android": "mirror", "opera": "mirror", @@ -67,11 +180,49 @@ "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts/register", "support": { "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + } + }, + "resetWorldConfiguration": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { "version_added": false }, + "safari_ios": "mirror" + } + } + }, + "unregister": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, "edge": "mirror", "firefox": { - "version_added": "68" + "version_added": "136" }, "firefox_android": "mirror", "opera": "mirror", @@ -80,24 +231,24 @@ }, "safari_ios": "mirror" } - }, - "cookieStoreId": { - "__compat": { - "support": { - "chrome": { - "version_added": false - }, - "edge": "mirror", - "firefox": { - "version_added": "98" - }, - "firefox_android": "mirror", - "opera": "mirror", - "safari": { - "version_added": false - }, - "safari_ios": "mirror" - } + } + }, + "update": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136" + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" } } } diff --git a/webextensions/manifest/optional_permissions.json b/webextensions/manifest/optional_permissions.json index f675f61ee70eca..af2f6699199c7c 100644 --- a/webextensions/manifest/optional_permissions.json +++ b/webextensions/manifest/optional_permissions.json @@ -831,6 +831,26 @@ } } }, + "userScripts": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": "136", + "notes": "Provided as an optional-only permission." + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + } + }, "webNavigation": { "__compat": { "support": { diff --git a/webextensions/manifest/permissions.json b/webextensions/manifest/permissions.json index 8e412172f19ffb..4c32652e916dbf 100644 --- a/webextensions/manifest/permissions.json +++ b/webextensions/manifest/permissions.json @@ -949,6 +949,26 @@ } } }, + "userScripts": { + "__compat": { + "support": { + "chrome": { + "version_added": "115" + }, + "edge": "mirror", + "firefox": { + "version_added": false, + "notes": "Provided as an optional-only permission." + }, + "firefox_android": "mirror", + "opera": "mirror", + "safari": { + "version_added": false + }, + "safari_ios": "mirror" + } + } + }, "webNavigation": { "__compat": { "support": { From aeebfaa449fe87d375a3a02e63aa0ee4fa8f3091 Mon Sep 17 00:00:00 2001 From: Richard Bloor Date: Thu, 20 Feb 2025 06:53:47 +1300 Subject: [PATCH 2/4] Additional note on runtime events (from feedback) --- webextensions/api/runtime.json | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/webextensions/api/runtime.json b/webextensions/api/runtime.json index c45785fa123197..56dc1f5c33262e 100644 --- a/webextensions/api/runtime.json +++ b/webextensions/api/runtime.json @@ -1167,12 +1167,18 @@ "support": { "chrome": { "version_added": "115", - "notes": "Available for use with Manifest V3 only." + "notes": [ + "Available for use with Manifest V3 only.", + "Always available, even if the extension has no way of firing the event." + ] }, "edge": "mirror", "firefox": { "version_added": "136", - "notes": "Available for use with Manifest V3 only." + "notes": [ + "Available for use with Manifest V3 only.", + "Requires the [`userScripts` permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions#optional-only_permissions)." + ] }, "firefox_android": "mirror", "opera": "mirror", @@ -1188,12 +1194,18 @@ "support": { "chrome": { "version_added": "115", - "notes": "Available for use with Manifest V3 only." + "notes": [ + "Available for use with Manifest V3 only.", + "Always available, even if the extension has no way of firing the event." + ] }, "edge": "mirror", "firefox": { "version_added": "136", - "notes": "Available for use with Manifest V3 only." + "notes": [ + "Available for use with Manifest V3 only.", + "Requires the [`userScripts` permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions#optional-only_permissions)." + ] }, "firefox_android": "mirror", "opera": "mirror", From f07d13218348c01601bdf097840c8b1f090a6121 Mon Sep 17 00:00:00 2001 From: rebloor Date: Fri, 21 Feb 2025 04:21:05 +1300 Subject: [PATCH 3/4] Apply suggestions from eview Co-authored-by: Rob Wu --- webextensions/api/runtime.json | 4 ++-- webextensions/manifest/optional_permissions.json | 2 +- webextensions/manifest/permissions.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/webextensions/api/runtime.json b/webextensions/api/runtime.json index 56dc1f5c33262e..d522b6d9247fa4 100644 --- a/webextensions/api/runtime.json +++ b/webextensions/api/runtime.json @@ -1177,7 +1177,7 @@ "version_added": "136", "notes": [ "Available for use with Manifest V3 only.", - "Requires the [`userScripts` permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions#optional-only_permissions)." + "Requires the [`userScripts` permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts#permissions)." ] }, "firefox_android": "mirror", @@ -1204,7 +1204,7 @@ "version_added": "136", "notes": [ "Available for use with Manifest V3 only.", - "Requires the [`userScripts` permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions#optional-only_permissions)." + "Requires the [`userScripts` permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts#permissions)." ] }, "firefox_android": "mirror", diff --git a/webextensions/manifest/optional_permissions.json b/webextensions/manifest/optional_permissions.json index af2f6699199c7c..38059fa64439c0 100644 --- a/webextensions/manifest/optional_permissions.json +++ b/webextensions/manifest/optional_permissions.json @@ -840,7 +840,7 @@ "edge": "mirror", "firefox": { "version_added": "136", - "notes": "Provided as an optional-only permission." + "notes": "Provided as an [optional-only permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions#optional-only_permissions)." }, "firefox_android": "mirror", "opera": "mirror", diff --git a/webextensions/manifest/permissions.json b/webextensions/manifest/permissions.json index 4c32652e916dbf..b9c6028708f9e7 100644 --- a/webextensions/manifest/permissions.json +++ b/webextensions/manifest/permissions.json @@ -958,7 +958,7 @@ "edge": "mirror", "firefox": { "version_added": false, - "notes": "Provided as an optional-only permission." + "notes": "Provided as an [optional-only permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions#optional-only_permissions)." }, "firefox_android": "mirror", "opera": "mirror", From 0177cdb609111c848a3cafd18504bb1354855205 Mon Sep 17 00:00:00 2001 From: Richard Bloor Date: Fri, 21 Feb 2025 04:34:19 +1300 Subject: [PATCH 4/4] Unsupported in Firefox for Android --- webextensions/api/runtime.json | 8 +++-- webextensions/api/userScripts.json | 52 ++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/webextensions/api/runtime.json b/webextensions/api/runtime.json index d522b6d9247fa4..efd3c01b068b8a 100644 --- a/webextensions/api/runtime.json +++ b/webextensions/api/runtime.json @@ -1180,7 +1180,9 @@ "Requires the [`userScripts` permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts#permissions)." ] }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -1207,7 +1209,9 @@ "Requires the [`userScripts` permission](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/userScripts#permissions)." ] }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false diff --git a/webextensions/api/userScripts.json b/webextensions/api/userScripts.json index a9691fc28dbe39..e460b790491a9b 100644 --- a/webextensions/api/userScripts.json +++ b/webextensions/api/userScripts.json @@ -14,7 +14,9 @@ "version_added": "136", "notes": "Available for use with Manifest V3 only." }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -32,7 +34,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -52,7 +56,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -71,7 +77,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -90,7 +98,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -109,7 +119,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -128,7 +140,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -147,7 +161,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -166,7 +182,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -186,7 +204,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -205,7 +225,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -224,7 +246,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false @@ -243,7 +267,9 @@ "firefox": { "version_added": "136" }, - "firefox_android": "mirror", + "firefox_android": { + "version_added": false + }, "opera": "mirror", "safari": { "version_added": false