fix: Add null checks for tab permissions and conversions in TabManagerBase, ensuring stability with empty tabs, p=#11302

This commit is contained in:
Vedaant Rajoo
2025-11-15 17:56:05 -08:00
committed by GitHub
parent 58c2c2cd8f
commit 38ebe91674

View File

@@ -0,0 +1,64 @@
diff --git a/toolkit/components/extensions/parent/ext-tabs-base.js b/toolkit/components/extensions/parent/ext-tabs-base.js
index d3c2d62406d17a14b0288752c34b6dd4350f032a..2f970d41b8ada9a13fc18b8d2a6607b973983072 100644
--- a/toolkit/components/extensions/parent/ext-tabs-base.js
+++ b/toolkit/components/extensions/parent/ext-tabs-base.js
@@ -1942,6 +1942,7 @@ class TabManagerBase {
*/
addActiveTabPermission(nativeTab) {
let tab = this.getWrapper(nativeTab);
+ if (!tab) return; // Empty tabs aren't tracked, nothing to add
if (
this.extension.hasPermission("activeTab") ||
(this.extension.originControls &&
@@ -1963,7 +1964,9 @@ class TabManagerBase {
* The native tab for which to revoke permissions.
*/
revokeActiveTabPermission(nativeTab) {
- this.getWrapper(nativeTab).activeTabWindowID = null;
+ let wrapper = this.getWrapper(nativeTab);
+ if (!wrapper) return; // Empty tabs arent tracked, nothing to revoke
+ wrapper.activeTabWindowID = null;
}
/**
@@ -1976,7 +1979,9 @@ class TabManagerBase {
* True if the extension has activeTab permissions for this tab.
*/
hasActiveTabPermission(nativeTab) {
- return this.getWrapper(nativeTab).hasActiveTabPermission;
+ let wrapper = this.getWrapper(nativeTab);
+ if (!wrapper) return false; // Empty tabs arent tracked, nothing to check
+ return wrapper.hasActiveTabPermission;
}
/**
@@ -1987,6 +1992,7 @@ class TabManagerBase {
*/
activateScripts(nativeTab) {
let tab = this.getWrapper(nativeTab);
+ if (!tab) return; // Empty tabs aren't tracked, nothing to activate
if (
this.extension.originControls &&
!tab.matchesHostPermission &&
@@ -2019,7 +2025,9 @@ class TabManagerBase {
* True if the extension has permissions for this tab.
*/
hasTabPermission(nativeTab) {
- return this.getWrapper(nativeTab).hasTabPermission;
+ let wrapper = this.getWrapper(nativeTab);
+ if (!wrapper) return false; // Empty tabs arent tracked, nothing to check
+ return wrapper.hasTabPermission;
}
/**
@@ -2066,7 +2074,9 @@ class TabManagerBase {
* @returns {object}
*/
convert(nativeTab, fallbackTabSize = null) {
- return this.getWrapper(nativeTab).convert(fallbackTabSize);
+ let wrapper = this.getWrapper(nativeTab);
+ if (!wrapper) return null; // Empty tabs aren't tracked, can't convert
+ return wrapper.convert(fallbackTabSize);
}
/**