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