summaryrefslogtreecommitdiffstats
path: root/dom/chrome-webidl/SessionStoreUtils.webidl
diff options
context:
space:
mode:
Diffstat (limited to 'dom/chrome-webidl/SessionStoreUtils.webidl')
-rw-r--r--dom/chrome-webidl/SessionStoreUtils.webidl169
1 files changed, 169 insertions, 0 deletions
diff --git a/dom/chrome-webidl/SessionStoreUtils.webidl b/dom/chrome-webidl/SessionStoreUtils.webidl
new file mode 100644
index 0000000000..9032c784c4
--- /dev/null
+++ b/dom/chrome-webidl/SessionStoreUtils.webidl
@@ -0,0 +1,169 @@
+/* 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/. */
+
+interface nsIDocShell;
+interface nsISupports;
+interface nsISessionStoreRestoreData;
+
+/**
+ * A callback passed to SessionStoreUtils.forEachNonDynamicChildFrame().
+ */
+callback SessionStoreUtilsFrameCallback = undefined (WindowProxy frame, unsigned long index);
+
+/**
+ * SessionStore utility functions implemented in C++ for performance reasons.
+ */
+[ChromeOnly, Exposed=Window]
+namespace SessionStoreUtils {
+ /**
+ * Calls the given |callback| once for each non-dynamic child frame of the
+ * given |window|.
+ */
+ [Throws]
+ undefined forEachNonDynamicChildFrame(WindowProxy window,
+ SessionStoreUtilsFrameCallback callback);
+
+ /**
+ * Takes the given listener, wraps it in a filter that filters out events from
+ * dynamic docShells, and adds that filter as a listener for the given event
+ * type on the given event target. The listener that was added is returned
+ * (as nsISupports) so that it can later be removed via
+ * removeDynamicFrameFilteredListener.
+ *
+ * This is implemented as a native filter, rather than a JS-based one, for
+ * performance reasons.
+ */
+ [Throws]
+ nsISupports? addDynamicFrameFilteredListener(EventTarget target,
+ DOMString type,
+ any listener,
+ boolean useCapture,
+ optional boolean mozSystemGroup = false);
+
+ /**
+ * Remove the passed-in filtered listener from the given event target, if it's
+ * currently a listener for the given event type there. The 'listener'
+ * argument must be something that was returned by
+ * addDynamicFrameFilteredListener.
+ *
+ * This is needed, instead of the normal removeEventListener, because the
+ * caller doesn't actually have something that WebIDL considers an
+ * EventListener.
+ */
+ [Throws]
+ undefined removeDynamicFrameFilteredListener(EventTarget target,
+ DOMString type,
+ nsISupports listener,
+ boolean useCapture,
+ optional boolean mozSystemGroup = false);
+
+ /*
+ * Save the docShell.allow* properties
+ */
+ ByteString collectDocShellCapabilities(nsIDocShell docShell);
+
+ /*
+ * Restore the docShell.allow* properties
+ */
+ undefined restoreDocShellCapabilities(nsIDocShell docShell,
+ ByteString disallowCapabilities);
+
+ /**
+ * Collects scroll position data for any given |frame| in the frame hierarchy.
+ *
+ * @param document (DOMDocument)
+ *
+ * @return {scroll: "x,y"} e.g. {scroll: "100,200"}
+ * Returns null when there is no scroll data we want to store for the
+ * given |frame|.
+ */
+ CollectedData? collectScrollPosition(WindowProxy window);
+
+ /**
+ * Restores scroll position data for any given |frame| in the frame hierarchy.
+ *
+ * @param frame (DOMWindow)
+ * @param value (object, see collectScrollPosition())
+ */
+ undefined restoreScrollPosition(Window frame, optional CollectedData data = {});
+
+ /**
+ * Collect form data for a given |frame| *not* including any subframes.
+ *
+ * The returned object may have an "id", "xpath", or "innerHTML" key or a
+ * combination of those three. Form data stored under "id" is for input
+ * fields with id attributes. Data stored under "xpath" is used for input
+ * fields that don't have a unique id and need to be queried using XPath.
+ * The "innerHTML" key is used for editable documents (designMode=on).
+ *
+ * Example:
+ * {
+ * id: {input1: "value1", input3: "value3"},
+ * xpath: {
+ * "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value2",
+ * "/xhtml:html/xhtml:body/xhtml:input[@name='input4']" : "value4"
+ * }
+ * }
+ *
+ * @return object
+ * Returns null when there is no scroll data
+ */
+ CollectedData? collectFormData(WindowProxy window);
+
+ boolean restoreFormData(Document document, optional CollectedData data = {});
+
+ nsISessionStoreRestoreData constructSessionStoreRestoreData();
+
+ [Throws]
+ Promise<undefined> initializeRestore(CanonicalBrowsingContext browsingContext,
+ nsISessionStoreRestoreData? data);
+
+ [NewObject]
+ Promise<undefined> restoreDocShellState(
+ CanonicalBrowsingContext browsingContext,
+ UTF8String? url,
+ ByteString? docShellCaps);
+
+ undefined restoreSessionStorageFromParent(
+ CanonicalBrowsingContext browsingContext,
+ record<UTF8String, record<DOMString, DOMString>> sessionStorage);
+};
+
+[GenerateConversionToJS, GenerateInit]
+dictionary CollectedFileListValue
+{
+ DOMString type = "file";
+ required sequence<DOMString> fileList;
+};
+
+[GenerateConversionToJS, GenerateInit]
+dictionary CollectedNonMultipleSelectValue
+{
+ required long selectedIndex;
+ required DOMString value;
+};
+
+// object contains either a CollectedFileListValue or a CollectedNonMultipleSelectValue or Sequence<DOMString>
+typedef (DOMString or boolean or object) CollectedFormDataValue;
+
+dictionary CollectedData
+{
+ ByteString scroll;
+ record<DOMString, CollectedFormDataValue> id;
+ record<DOMString, CollectedFormDataValue> xpath;
+ DOMString innerHTML;
+ ByteString url;
+ // mChildren contains CollectedData instances
+ sequence<object?> children;
+};
+
+dictionary InputElementData {
+ sequence<DOMString> id;
+ sequence<DOMString> type;
+ sequence<long> valueIdx;
+ sequence<long> selectedIndex;
+ sequence<DOMString> selectVal;
+ sequence<DOMString> strVal;
+ sequence<boolean> boolVal;
+};