/* -*- Mode: IDL; tab-width: 2; 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 "nsISupports.idl" interface mozIApplication; interface nsFrameLoader; interface nsIDocShell; interface nsIURI; interface nsIFrame; interface nsSubDocumentFrame; interface nsIMessageSender; interface nsIVariant; interface nsIDOMElement; interface nsITabParent; interface nsILoadContext; interface nsIPrintSettings; interface nsIWebProgressListener; interface nsIGroupedSHistory; interface nsIPartialSHistory; [scriptable, builtinclass, uuid(1645af04-1bc7-4363-8f2c-eb9679220ab1)] interface nsIFrameLoader : nsISupports { /** * Get the docshell from the frame loader. */ readonly attribute nsIDocShell docShell; /** * Get this frame loader's TabParent, if it has a remote frame. Otherwise, * returns null. */ readonly attribute nsITabParent tabParent; /** * Get an nsILoadContext for the top-level docshell. For remote * frames, a shim is returned that contains private browsing and app * information. */ readonly attribute nsILoadContext loadContext; /** * Start loading the frame. This method figures out what to load * from the owner content in the frame loader. */ void loadFrame(); /** * Loads the specified URI in this frame. Behaves identically to loadFrame, * except that this method allows specifying the URI to load. */ void loadURI(in nsIURI aURI); /** * Puts the frameloader in prerendering mode. */ void setIsPrerendered(); /** * Make the prerendered frameloader being active (and clear isPrerendered flag). */ void makePrerenderedLoaderActive(); /** * Append partial session history from another frame loader. */ void appendPartialSessionHistoryAndSwap(in nsIFrameLoader aOther); /** * If grouped session history is applied, use this function to navigate to * an entry of session history object of another frameloader. */ void requestGroupedHistoryNavigation(in unsigned long aGlobalIndex); /** * Destroy the frame loader and everything inside it. This will * clear the weak owner content reference. */ void destroy(); /** * Find out whether the loader's frame is at too great a depth in * the frame tree. This can be used to decide what operations may * or may not be allowed on the loader's docshell. */ readonly attribute boolean depthTooGreat; /** * Updates the position and size of the subdocument loaded by this frameloader. * * @param aIFrame The nsIFrame for the content node that owns this frameloader */ [noscript] void updatePositionAndSize(in nsSubDocumentFrame aIFrame); /** * Activate remote frame. * Throws an exception with non-remote frames. */ void activateRemoteFrame(); /** * Deactivate remote frame. * Throws an exception with non-remote frames. */ void deactivateRemoteFrame(); /** * @see nsIDOMWindowUtils sendMouseEvent. */ void sendCrossProcessMouseEvent(in AString aType, in float aX, in float aY, in long aButton, in long aClickCount, in long aModifiers, [optional] in boolean aIgnoreRootScrollFrame); /** * Activate event forwarding from client (remote frame) to parent. */ void activateFrameEvent(in AString aType, in boolean capture); // Note, when frameloaders are swapped, also messageManagers are swapped. readonly attribute nsIMessageSender messageManager; /** * @see nsIDOMWindowUtils sendKeyEvent. */ void sendCrossProcessKeyEvent(in AString aType, in long aKeyCode, in long aCharCode, in long aModifiers, [optional] in boolean aPreventDefault); /** * Request that the next time a remote layer transaction has been * received by the Compositor, a MozAfterRemoteFrame event be sent * to the window. */ void requestNotifyAfterRemotePaint(); /** * Close the window through the ownerElement. */ void requestFrameLoaderClose(); /** * Print the current document. * * @param aOuterWindowID the ID of the outer window to print * @param aPrintSettings optional print settings to use; printSilent can be * set to prevent prompting. * @param aProgressListener optional print progress listener. */ void print(in unsigned long long aOuterWindowID, in nsIPrintSettings aPrintSettings, in nsIWebProgressListener aProgressListener); /** * The default event mode automatically forwards the events * handled in EventStateManager::HandleCrossProcessEvent to * the child content process when these events are targeted to * the remote browser element. * * Used primarly for input events (mouse, keyboard) */ const unsigned long EVENT_MODE_NORMAL_DISPATCH = 0x00000000; /** * With this event mode, it's the application's responsability to * convert and forward events to the content process */ const unsigned long EVENT_MODE_DONT_FORWARD_TO_CHILD = 0x00000001; attribute unsigned long eventMode; /** * If false, then the subdocument is not clipped to its CSS viewport, and the * subdocument's viewport scrollbar(s) are not rendered. * Defaults to true. */ attribute boolean clipSubdocument; /** * If false, then the subdocument's scroll coordinates will not be clamped * to their scroll boundaries. * Defaults to true. */ attribute boolean clampScrollPosition; /** * The element which owns this frame loader. * * For example, if this is a frame loader for an <iframe>, this attribute * returns the iframe element. */ readonly attribute nsIDOMElement ownerElement; /** * Cached childID of the ContentParent owning the TabParent in this frame * loader. This can be used to obtain the childID after the TabParent died. */ readonly attribute unsigned long long childID; /** * Get or set this frame loader's visibility. * * The notion of "visibility" here is separate from the notion of a * window/docshell's visibility. This field is mostly here so that we can * have a notion of visibility in the parent process when frames are OOP. */ [infallible] attribute boolean visible; /** * Find out whether the owner content really is a mozbrowser or app frame * Especially, a widget frame is regarded as an app frame. <xul:browser> is * not considered to be a mozbrowser frame. */ readonly attribute boolean ownerIsMozBrowserOrAppFrame; /** * The last known width of the frame. Reading this property will not trigger * a reflow, and therefore may not reflect the current state of things. It * should only be used in asynchronous APIs where values are not guaranteed * to be up-to-date when received. */ readonly attribute unsigned long lazyWidth; /** * The last known height of the frame. Reading this property will not trigger * a reflow, and therefore may not reflect the current state of things. It * should only be used in asynchronous APIs where values are not guaranteed * to be up-to-date when received. */ readonly attribute unsigned long lazyHeight; /** * The partial session history. */ readonly attribute nsIPartialSHistory partialSessionHistory; /** * The grouped session history composed of multiple session history objects * across root docshells. */ readonly attribute nsIGroupedSHistory groupedSessionHistory; }; %{C++ class nsFrameLoader; %} native alreadyAddRefed_nsFrameLoader(already_AddRefed<nsFrameLoader>); [scriptable, uuid(adc1b3ba-8deb-4943-8045-e6de0044f2ce)] interface nsIFrameLoaderOwner : nsISupports { /** * The frame loader owned by this nsIFrameLoaderOwner */ [binaryname(FrameLoaderXPCOM)] readonly attribute nsIFrameLoader frameLoader; [noscript, notxpcom] alreadyAddRefed_nsFrameLoader GetFrameLoader(); /** * The principal of parent mozIApplication in case of nested mozbrowser * iframes. */ readonly attribute mozIApplication parentApplication; /** * Puts the FrameLoaderOwner in prerendering mode. */ void setIsPrerendered(); /** * This method is used internally by SwapFrameLoaders to set the frame loader * on the target nsFrameLoader. * * Avoid using this method outside of that context, and instead prefer using * SwapFrameLoaders. */ [noscript, notxpcom] void internalSetFrameLoader(in nsIFrameLoader aNewFrameLoader); };