tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

SessionStoreUtils.webidl (6141B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 interface nsIDocShell;
      6 interface nsISupports;
      7 interface nsISessionStoreRestoreData;
      8 
      9 /**
     10 * A callback passed to SessionStoreUtils.forEachNonDynamicChildFrame().
     11 */
     12 callback SessionStoreUtilsFrameCallback = undefined (WindowProxy frame, unsigned long index);
     13 
     14 /**
     15 * SessionStore utility functions implemented in C++ for performance reasons.
     16 */
     17 [ChromeOnly, Exposed=Window]
     18 namespace SessionStoreUtils {
     19  /**
     20   * Calls the given |callback| once for each non-dynamic child frame of the
     21   * given |window|.
     22   */
     23  [Throws]
     24  undefined forEachNonDynamicChildFrame(WindowProxy window,
     25                                        SessionStoreUtilsFrameCallback callback);
     26 
     27  /**
     28   * Takes the given listener, wraps it in a filter that filters out events from
     29   * dynamic docShells, and adds that filter as a listener for the given event
     30   * type on the given event target.  The listener that was added is returned
     31   * (as nsISupports) so that it can later be removed via
     32   * removeDynamicFrameFilteredListener.
     33   *
     34   * This is implemented as a native filter, rather than a JS-based one, for
     35   * performance reasons.
     36   */
     37  [Throws]
     38  nsISupports? addDynamicFrameFilteredListener(EventTarget target,
     39                                               DOMString type,
     40                                               any listener,
     41                                               boolean useCapture,
     42                                               optional boolean mozSystemGroup = false);
     43 
     44  /**
     45   * Remove the passed-in filtered listener from the given event target, if it's
     46   * currently a listener for the given event type there.  The 'listener'
     47   * argument must be something that was returned by
     48   * addDynamicFrameFilteredListener.
     49   *
     50   * This is needed, instead of the normal removeEventListener, because the
     51   * caller doesn't actually have something that WebIDL considers an
     52   * EventListener.
     53   */
     54  [Throws]
     55  undefined removeDynamicFrameFilteredListener(EventTarget target,
     56                                               DOMString type,
     57                                               nsISupports listener,
     58                                               boolean useCapture,
     59                                               optional boolean mozSystemGroup = false);
     60 
     61  /*
     62   * Save the docShell.allow* properties
     63   */
     64  ByteString collectDocShellCapabilities(nsIDocShell docShell);
     65 
     66  /*
     67   * Restore the docShell.allow* properties
     68   */
     69  undefined restoreDocShellCapabilities(nsIDocShell docShell,
     70                                        ByteString disallowCapabilities);
     71 
     72  /**
     73   * Collects scroll position data for any given |frame| in the frame hierarchy.
     74   *
     75   * @param document (DOMDocument)
     76   *
     77   * @return {scroll: "x,y"} e.g. {scroll: "100,200"}
     78   *         Returns null when there is no scroll data we want to store for the
     79   *         given |frame|.
     80   */
     81  CollectedData? collectScrollPosition(WindowProxy window);
     82 
     83  /**
     84   * Restores scroll position data for any given |frame| in the frame hierarchy.
     85   *
     86   * @param frame (DOMWindow)
     87   * @param value (object, see collectScrollPosition())
     88   */
     89  undefined restoreScrollPosition(Window frame, optional CollectedData data = {});
     90 
     91  /**
     92   * Collect form data for a given |frame| *not* including any subframes.
     93   *
     94   * The returned object may have an "id", "xpath", or "innerHTML" key or a
     95   * combination of those three. Form data stored under "id" is for input
     96   * fields with id attributes. Data stored under "xpath" is used for input
     97   * fields that don't have a unique id and need to be queried using XPath.
     98   * The "innerHTML" key is used for editable documents (designMode=on).
     99   *
    100   * Example:
    101   *   {
    102   *     id: {input1: "value1", input3: "value3"},
    103   *     xpath: {
    104   *       "/xhtml:html/xhtml:body/xhtml:input[@name='input2']" : "value2",
    105   *       "/xhtml:html/xhtml:body/xhtml:input[@name='input4']" : "value4"
    106   *     }
    107   *   }
    108   *
    109   * @return object
    110   *         Returns null when there is no scroll data
    111   */
    112  CollectedData? collectFormData(WindowProxy window);
    113 
    114  boolean restoreFormData(Document document, optional CollectedData data = {});
    115 
    116   nsISessionStoreRestoreData constructSessionStoreRestoreData();
    117 
    118   [Throws]
    119   Promise<undefined> initializeRestore(CanonicalBrowsingContext browsingContext,
    120                                        nsISessionStoreRestoreData? data);
    121 
    122   [NewObject]
    123   Promise<undefined> restoreDocShellState(
    124      CanonicalBrowsingContext browsingContext,
    125      UTF8String? url,
    126      ByteString? docShellCaps);
    127 
    128   undefined restoreSessionStorageFromParent(
    129     CanonicalBrowsingContext browsingContext,
    130     record<UTF8String, record<DOMString, DOMString>> sessionStorage);
    131 };
    132 
    133 [GenerateConversionToJS, GenerateInit]
    134 dictionary CollectedFileListValue
    135 {
    136  DOMString type = "file";
    137  required sequence<DOMString> fileList;
    138 };
    139 
    140 [GenerateConversionToJS, GenerateInit]
    141 dictionary CollectedNonMultipleSelectValue
    142 {
    143  required long selectedIndex;
    144  required DOMString value;
    145 };
    146 
    147 [GenerateConversionToJS, GenerateInit]
    148 dictionary CollectedCustomElementValue
    149 {
    150  (File or USVString or FormData)? value = null;
    151  (File or USVString or FormData)? state = null;
    152 };
    153 
    154 // object contains either a CollectedFileListValue or a CollectedNonMultipleSelectValue or Sequence<DOMString>
    155 // or a CollectedCustomElementValue
    156 typedef (DOMString or boolean or object) CollectedFormDataValue;
    157 
    158 dictionary CollectedData
    159 {
    160  ByteString scroll;
    161  record<DOMString, CollectedFormDataValue> id;
    162  record<DOMString, CollectedFormDataValue> xpath;
    163  DOMString innerHTML;
    164  ByteString url;
    165  // mChildren contains CollectedData instances
    166  sequence<object?> children;
    167 };
    168 
    169 dictionary InputElementData {
    170  sequence<DOMString> id;
    171  sequence<DOMString> type;
    172  sequence<long> valueIdx;
    173  sequence<long> selectedIndex;
    174  sequence<DOMString> selectVal;
    175  sequence<DOMString> strVal;
    176  sequence<boolean> boolVal;
    177 };