diff options
Diffstat (limited to 'dom/chrome-webidl/SessionStoreUtils.webidl')
-rw-r--r-- | dom/chrome-webidl/SessionStoreUtils.webidl | 169 |
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; +}; |