summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/DocShellCapabilities.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/DocShellCapabilities.jsm')
-rw-r--r--browser/components/sessionstore/DocShellCapabilities.jsm50
1 files changed, 50 insertions, 0 deletions
diff --git a/browser/components/sessionstore/DocShellCapabilities.jsm b/browser/components/sessionstore/DocShellCapabilities.jsm
new file mode 100644
index 000000000..098aae86f
--- /dev/null
+++ b/browser/components/sessionstore/DocShellCapabilities.jsm
@@ -0,0 +1,50 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+* License, v. 2.0. If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["DocShellCapabilities"];
+
+/**
+ * The external API exported by this module.
+ */
+this.DocShellCapabilities = Object.freeze({
+ collect: function (docShell) {
+ return DocShellCapabilitiesInternal.collect(docShell);
+ },
+
+ restore: function (docShell, disallow) {
+ return DocShellCapabilitiesInternal.restore(docShell, disallow);
+ },
+});
+
+/**
+ * Internal functionality to save and restore the docShell.allow* properties.
+ */
+var DocShellCapabilitiesInternal = {
+ // List of docShell capabilities to (re)store. These are automatically
+ // retrieved from a given docShell if not already collected before.
+ // This is made so they're automatically in sync with all nsIDocShell.allow*
+ // properties.
+ caps: null,
+
+ allCapabilities: function (docShell) {
+ if (!this.caps) {
+ let keys = Object.keys(docShell);
+ this.caps = keys.filter(k => k.startsWith("allow")).map(k => k.slice(5));
+ }
+ return this.caps;
+ },
+
+ collect: function (docShell) {
+ let caps = this.allCapabilities(docShell);
+ return caps.filter(cap => !docShell["allow" + cap]);
+ },
+
+ restore: function (docShell, disallow) {
+ let caps = this.allCapabilities(docShell);
+ for (let cap of caps)
+ docShell["allow" + cap] = !disallow.has(cap);
+ },
+};