/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * 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/. */ #include "domstubs.idl" #include "nsIDocShellTreeItem.idl" #include "nsIRequest.idl" %{ C++ #include "js/TypeDecls.h" #include "mozilla/Maybe.h" #include "mozilla/NotNull.h" #include "mozilla/UniquePtr.h" #include "nsCOMPtr.h" #include "nsIURI.h" class nsPresContext; class nsIPresShell; class nsDocShellLoadInfo; namespace mozilla { class Encoding; class HTMLEditor; namespace dom { class BrowsingContext; class ClientSource; } // namespace dom } %} /** * The nsIDocShell interface. */ [ptr] native nsPresContext(nsPresContext); [ptr] native nsIPresShell(nsIPresShell); [ref] native MaybeURI(mozilla::Maybe>); [ref] native Encoding(const mozilla::Encoding*); native UniqueClientSource(mozilla::UniquePtr); interface nsIURI; interface nsIChannel; interface nsIContentViewer; interface nsIDocShellLoadInfo; interface nsIEditor; interface nsIEditingSession; interface nsISimpleEnumerator; interface nsIInputStream; interface nsIRequest; interface nsISHEntry; interface nsILayoutHistoryState; interface nsISecureBrowserUI; interface nsIScriptGlobalObject; interface nsIDOMStorage; interface nsIPrincipal; interface nsIWebBrowserPrint; interface nsIPrivacyTransitionObserver; interface nsIReflowObserver; interface nsIScrollObserver; interface nsITabParent; interface nsITabChild; interface nsICommandManager; interface nsICommandParams; interface nsILoadURIDelegate; native TabChildRef(already_AddRefed); native nsDocShellLoadInfoPtr(nsDocShellLoadInfo*); webidl BrowsingContext; webidl ContentFrameMessageManager; webidl EventTarget; [scriptable, builtinclass, uuid(049234fe-da10-478b-bc5d-bc6f9a1ba63d)] interface nsIDocShell : nsIDocShellTreeItem { /** * Loads a given URI. This will give priority to loading the requested URI * in the object implementing this interface. If it can't be loaded here * however, the URL dispatcher will go through its normal process of content * loading. * * @param uri - The URI to load. * @param loadInfo - This is the extended load info for this load. This * most often will be null, but if you need to do * additional setup for this load you can get a loadInfo * object by calling createLoadInfo. Once you have this * object you can set the needed properties on it and * then pass it to loadURI. * @param aLoadFlags - Flags to modify load behaviour. Flags are defined in * nsIWebNavigation. Note that using flags outside * LOAD_FLAGS_MASK is only allowed if passing in a * non-null loadInfo. And even some of those might not * be allowed. Use at your own risk. */ [noscript]void loadURI(in nsIURI uri, in nsDocShellLoadInfoPtr loadInfo, in unsigned long aLoadFlags, in boolean firstParty); const long INTERNAL_LOAD_FLAGS_NONE = 0x0; const long INTERNAL_LOAD_FLAGS_INHERIT_PRINCIPAL = 0x1; const long INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER = 0x2; const long INTERNAL_LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP = 0x4; // This flag marks the first load in this object // @see nsIWebNavigation::LOAD_FLAGS_FIRST_LOAD const long INTERNAL_LOAD_FLAGS_FIRST_LOAD = 0x8; const long INTERNAL_LOAD_FLAGS_BYPASS_CLASSIFIER = 0x10; const long INTERNAL_LOAD_FLAGS_FORCE_ALLOW_COOKIES = 0x20; // Whether the load should be treated as srcdoc load, rather than a URI one. const long INTERNAL_LOAD_FLAGS_IS_SRCDOC = 0x40; // Whether this is the load of a frame's original src attribute const long INTERNAL_LOAD_FLAGS_ORIGINAL_FRAME_SRC = 0x80; const long INTERNAL_LOAD_FLAGS_NO_OPENER = 0x100; // Whether a top-level data URI navigation is allowed for that load const long INTERNAL_LOAD_FLAGS_FORCE_ALLOW_DATA_URI = 0x200; // Whether the load was triggered by user interaction. const long INTERNAL_LOAD_FLAGS_IS_USER_TRIGGERED = 0x1000; /** * Loads the given URI. This method is identical to loadURI(...) except * that its parameter list is broken out instead of being packaged inside * of an nsIDocShellLoadInfo object... * * @param aURI - The URI to load. * @param aOriginalURI - The URI to set as the originalURI on the channel * that does the load. If null, aURI will be set as * the originalURI. * @param aResultPrincipalURI - The URI to be set to loadInfo.resultPrincipalURI * When Nothing, there will be no change * When Some, the principal URI will overwrite even * with a null value. * @param aKeepResultPrincipalURIIfSet - If a refresh is caused by * http-equiv="refresh" we want to set * aResultPrincipalURI, but we do not want * to overwrite the channel's * ResultPrincipalURI, if it has already * been set on the channel by a protocol * handler. * @param aLoadReplace - If set LOAD_REPLACE flag will be set on the * channel. aOriginalURI is null, this argument is * ignored. * @param aReferrer - Referring URI * @param aReferrerPolicy - Referrer policy * @param aTriggeringPrincipal - A non-null principal that initiated that load. * Please note that this is the principal that is * used for security checks. If the argument aURI * is provided by the web, then please do not pass * a SystemPrincipal as the triggeringPrincipal. * @param aPrincipalToInherit - Principal to be inherited for that load. If this * argument is null then principalToInherit is * computed as follows: * a) If INTERNAL_LOAD_FLAGS_INHERIT_PRINCIPAL, and * aLoadType is not LOAD_NORMAL_EXTERNAL, and the * URI would normally inherit a principal, then * principalToInherit is set to the current * document's principal, or parent document if * there is not a current document. * b) If principalToInherit is still null (e.g. if * some of the conditions of (a) were not satisfied), * then no inheritance of any sort will happen: the * load will just get a principal based on the URI * being loaded. * @param aFlags - Any of the load flags defined within above. * @param aStopActiveDoc - Flag indicating whether loading the current * document should be stopped. * @param aWindowTarget - Window target for the load. * @param aTypeHint - A hint as to the content-type of the resulting * data. May be null or empty if no hint. * @param aFileName - Non-null when the link should be downloaded as the given filename. * @param aPostDataStream - Post data stream (if POSTing) * @param aHeadersStream - Stream containing "extra" request headers... * @param aLoadFlags - Flags to modify load behaviour. Flags are defined * in nsIWebNavigation. * @param aSHEntry - Active Session History entry (if loading from SH) * @param aSrcdoc When INTERNAL_LOAD_FLAGS_IS_SRCDOC is set, the * contents of this parameter will be loaded instead * of aURI. * @param aSourceDocShell - The source browsing context for the navigation. * @param aBaseURI - The base URI to be used for the load. Set in * srcdoc loads as it cannot otherwise be inferred * in certain situations such as view-source. */ [noscript]void internalLoad(in nsIURI aURI, in nsIURI aOriginalURI, [const] in MaybeURI aResultPrincipalURI, in bool aKeepResultPrincipalURIIfSet, in boolean aLoadReplace, in nsIURI aReferrer, in unsigned long aReferrerPolicy, in nsIPrincipal aTriggeringPrincipal, in nsIPrincipal aPrincipalToInherit, in uint32_t aFlags, in AString aWindowTarget, in string aTypeHint, in AString aFileName, in nsIInputStream aPostDataStream, in nsIInputStream aHeadersStream, in unsigned long aLoadFlags, in nsISHEntry aSHEntry, in boolean aFirstParty, in AString aSrcdoc, in nsIDocShell aSourceDocShell, in nsIURI aBaseURI, out nsIDocShell aDocShell, out nsIRequest aRequest); /** * Do either a history.pushState() or history.replaceState() operation, * depending on the value of aReplace. */ [implicit_jscontext] void addState(in jsval aData, in AString aTitle, in AString aURL, in boolean aReplace); /** * Reset state to a new content model within the current document and the document * viewer. Called by the document before initiating an out of band document.write(). */ void prepareForNewContentModel(); /** * For editors and suchlike who wish to change the URI associated with the * document. Note if you want to get the current URI, use the read-only * property on nsIWebNavigation. */ void setCurrentURI(in nsIURI aURI); /** * Notify the associated content viewer and all child docshells that they are * about to be hidden. If |isUnload| is true, then the document is being * unloaded and all dynamic subframe history entries are removed as well. * * @param isUnload * True to fire the unload event in addition to the pagehide event, * and remove all dynamic subframe history entries. */ [noscript] void firePageHideNotification(in boolean isUnload); /** * Presentation context for the currently loaded document. This may be null. */ [noscript] readonly attribute nsPresContext presContext; /** * Presentation shell for the currently loaded document. This may be null. */ [noscript,notxpcom] nsIPresShell GetPresShell(); /** * Presentation shell for the oldest document, if this docshell is * currently transitioning between documents. */ [noscript] readonly attribute nsIPresShell eldestPresShell; /** * Content Viewer that is currently loaded for this DocShell. This may * change as the underlying content changes. */ readonly attribute nsIContentViewer contentViewer; /** * This attribute allows chrome to tie in to handle DOM events that may * be of interest to chrome. */ attribute EventTarget chromeEventHandler; /** * This allows chrome to set a custom User agent on a specific docshell */ attribute AString customUserAgent; /** * Whether CSS error reporting is enabled. */ attribute boolean cssErrorReportingEnabled; /** * Whether to allow plugin execution */ attribute boolean allowPlugins; /** * Whether to allow Javascript execution */ attribute boolean allowJavascript; /** * Attribute stating if refresh based redirects can be allowed */ attribute boolean allowMetaRedirects; /** * Attribute stating if it should allow subframes (framesets/iframes) or not */ attribute boolean allowSubframes; /** * Attribute stating whether or not images should be loaded. */ attribute boolean allowImages; /** * Attribute stating whether or not media (audio/video) should be loaded. */ [infallible] attribute boolean allowMedia; /** * Attribute that determines whether DNS prefetch is allowed for this subtree * of the docshell tree. Defaults to true. Setting this will make it take * effect starting with the next document loaded in the docshell. */ attribute boolean allowDNSPrefetch; /** * Attribute that determines whether window control (move/resize) is allowed. */ attribute boolean allowWindowControl; /** * True if the docshell allows its content to be handled by a content listener * other than the docshell itself, including the external helper app service, * and false otherwise. Defaults to true. */ [infallible] attribute boolean allowContentRetargeting; /** * True if new child docshells should allow content retargeting. * Setting allowContentRetargeting also overwrites this value. */ [infallible] attribute boolean allowContentRetargetingOnChildren; /** * True if this docShell should inherit the private browsing ID from * its parent when reparented. * * NOTE: This should *not* be set false in new code, or for docShells * inserted anywhere other than as children of panels. */ [infallible] attribute boolean inheritPrivateBrowsingId; /** * Get an enumerator over this docShell and its children. * * @param aItemType - Only include docShells of this type, or if typeAll, * include all child shells. * Uses types from nsIDocShellTreeItem. * @param aDirection - Whether to enumerate forwards or backwards. */ const long ENUMERATE_FORWARDS = 0; const long ENUMERATE_BACKWARDS = 1; nsISimpleEnumerator getDocShellEnumerator(in long aItemType, in long aDirection); /** * The type of application that created this window */ const unsigned long APP_TYPE_UNKNOWN = 0; const unsigned long APP_TYPE_MAIL = 1; const unsigned long APP_TYPE_EDITOR = 2; attribute unsigned long appType; /** * certain dochshells (like the message pane) * should not throw up auth dialogs * because it can act as a password trojan */ attribute boolean allowAuth; /** * Set/Get the document scale factor. When setting this attribute, a * NS_ERROR_NOT_IMPLEMENTED error may be returned by implementations * not supporting zoom. Implementations not supporting zoom should return * 1.0 all the time for the Get operation. 1.0 by the way is the default * of zoom. This means 100% of normal scaling or in other words normal size * no zoom. */ attribute float zoom; /* * The size, in CSS pixels, of the horizontal margins for the of an * HTML document in this docshell; used to implement the marginwidth attribute * on HTML /