mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 00:32:11 +00:00
e0fc545cbc
Depends on D174115 Differential Revision: https://phabricator.services.mozilla.com/D179278
178 lines
6.0 KiB
Plaintext
178 lines
6.0 KiB
Plaintext
/* 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;
|
|
};
|
|
|
|
[GenerateConversionToJS, GenerateInit]
|
|
dictionary CollectedCustomElementValue
|
|
{
|
|
(File or USVString or FormData)? value = null;
|
|
(File or USVString or FormData)? state = null;
|
|
};
|
|
|
|
// object contains either a CollectedFileListValue or a CollectedNonMultipleSelectValue or Sequence<DOMString>
|
|
// or a CollectedCustomElementValue
|
|
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;
|
|
};
|