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.webidl184
1 files changed, 184 insertions, 0 deletions
diff --git a/dom/chrome-webidl/SessionStoreUtils.webidl b/dom/chrome-webidl/SessionStoreUtils.webidl
new file mode 100644
index 0000000000..f47e1e5522
--- /dev/null
+++ b/dom/chrome-webidl/SessionStoreUtils.webidl
@@ -0,0 +1,184 @@
+/* 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;
+
+/**
+ * A callback passed to SessionStoreUtils.forEachNonDynamicChildFrame().
+ */
+callback SessionStoreUtilsFrameCallback = void (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]
+ void 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]
+ void 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
+ */
+ void 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())
+ */
+ void 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 = {});
+
+ /**
+ * Restores all sessionStorage "super cookies".
+ * @param aDocShell
+ * A tab's docshell (containing the sessionStorage)
+ * @param aStorageData
+ * A nested object with storage data to be restored that has hosts as
+ * keys and per-origin session storage data as strings. For example:
+ * {"https://example.com^userContextId=1": {"key": "value", "my_number": "123"}}
+ */
+ void restoreSessionStorage(nsIDocShell docShell, record<DOMString, record<DOMString, DOMString>> data);
+};
+
+[GenerateConversionToJS, GenerateInit]
+dictionary CollectedFileListValue
+{
+ required DOMString type;
+ 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;
+};
+
+[GenerateConversionToJS]
+dictionary UpdateSessionStoreData {
+ ByteString docShellCaps;
+ boolean isPrivate;
+ sequence<ByteString> positions;
+ sequence<long> positionDescendants;
+ // The following are for input data
+ InputElementData id;
+ InputElementData xpath;
+ sequence<long> inputDescendants;
+ sequence<long> numId;
+ sequence<long> numXPath;
+ sequence<DOMString> innerHTML;
+ sequence<ByteString> url;
+ // for sessionStorage
+ sequence<ByteString> storageOrigins;
+ sequence<DOMString> storageKeys;
+ sequence<DOMString> storageValues;
+ boolean isFullStorage;
+};