author Ed Morley <>
Fri, 28 Feb 2014 15:31:07 +0000
changeset 182275 10992841577e4869f91c328f3ae7bf4aeda9bb8e
parent 178731 d30a9c28e77e00a08b862afcc0516cc2b817f1fc
child 189757 8a7368027aadc03cce481a7dc796e515816ca2ff
permissions -rw-r--r--
Backed out changeset 5056b4811257 (bug 976648) for errors during configure; CLOSED TREE

/* 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 */

#include "nsISupports.idl"

interface nsIDocShell;
interface nsIDocument;
interface nsIDOMDocument;
interface nsISHEntry;
interface nsIPrintSettings;

%{ C++
class nsIWidget;
struct nsIntRect;
class nsIPresShell;
class nsPresContext;
class nsView;
class nsDOMNavigationTiming;

[ptr] native nsIWidgetPtr(nsIWidget);
[ref] native nsIntRectRef(nsIntRect);
[ptr] native nsIPresShellPtr(nsIPresShell);
[ptr] native nsPresContextPtr(nsPresContext);
[ptr] native nsViewPtr(nsView);
[ptr] native nsDOMNavigationTimingPtr(nsDOMNavigationTiming);

[scriptable, builtinclass, uuid(4fc2512b-87c7-4a37-9fac-cee0f116bfdf)]
interface nsIContentViewer : nsISupports

  [noscript] void init(in nsIWidgetPtr aParentWidget,
                       [const] in nsIntRectRef aBounds);

  attribute nsIDocShell container;

  [noscript,notxpcom,nostdcall] void loadStart(in nsIDocument aDoc);
  void loadComplete(in nsresult aStatus);

   * Checks if the document wants to prevent unloading by firing beforeunload on
   * the document, and if it does, prompts the user. The result is returned.
   * @param aCallerClosesWindow indicates that the current caller will close the
   *        window. If the method returns true, all subsequent calls will be
   *        ignored.
  boolean permitUnload([optional] in boolean aCallerClosesWindow);

   * As above, but this passes around the aShouldPrompt argument to keep
   * track of whether the user has responded to a prompt.
   * Used internally by the scriptable version to ensure we only prompt once.
  [noscript,nostdcall] boolean permitUnloadInternal(in boolean aCallerClosesWindow,
                                                    inout boolean aShouldPrompt);

   * Exposes whether we're in the process of firing the beforeunload event.
   * In this case, the corresponding docshell will not allow navigation.
  readonly attribute boolean beforeUnloadFiring;

   * Works in tandem with permitUnload, if the caller decides not to close the
   * window it indicated it will, it is the caller's responsibility to reset
   * that with this method.
   * @Note this method is only meant to be called on documents for which the
   *  caller has indicated that it will close the window. If that is not the case
   *  the behavior of this method is undefined.
  void resetCloseWindow();
  void pageHide(in boolean isUnload);

   * All users of a content viewer are responsible for calling both
   * close() and destroy(), in that order. 
   * close() should be called when the load of a new page for the next
   * content viewer begins, and destroy() should be called when the next
   * content viewer replaces this one.
   * |historyEntry| sets the session history entry for the content viewer.  If
   * this is null, then Destroy() will be called on the document by close().
   * If it is non-null, the document will not be destroyed, and the following
   * actions will happen when destroy() is called (*):
   *  - Sanitize() will be called on the viewer's document
   *  - The content viewer will set the contentViewer property on the
   *    history entry, and release its reference (ownership reversal).
   *  - hide() will be called, and no further destruction will happen.
   *  (*) unless the document is currently being printed, in which case
   *      it will never be saved in session history.
  void close(in nsISHEntry historyEntry);
  void destroy();

  void stop();

  attribute nsIDOMDocument DOMDocument;

   * Returns DOMDocument as nsIDocument and without addrefing.
  [noscript,notxpcom] nsIDocument getDocument();

  [noscript] void getBounds(in nsIntRectRef aBounds);
  [noscript] void setBounds([const] in nsIntRectRef aBounds);

   * The previous content viewer, which has been |close|d but not
   * |destroy|ed.
  [noscript] attribute nsIContentViewer previousViewer;

  void move(in long aX, in long aY);

  void show();
  void hide();

  attribute boolean sticky;

   * This is called when the DOM window wants to be closed.  Returns true
   * if the window can close immediately.  Otherwise, returns false and will
   * close the DOM window as soon as practical.

  boolean requestWindowClose();

   * Attach the content viewer to its DOM window and docshell.
   * @param aState A state object that might be useful in attaching the DOM
   *               window.
   * @param aSHEntry The history entry that the content viewer was stored in.
   *                 The entry must have the docshells for all of the child
   *                 documents stored in its child shell list.
  void open(in nsISupports aState, in nsISHEntry aSHEntry);

   * Clears the current history entry.  This is used if we need to clear out
   * the saved presentation state.
  void clearHistoryEntry();

   * Change the layout to view the document with page layout (like print preview), but
   * dynamic and editable (like Galley layout).
  void setPageMode(in boolean aPageMode, in nsIPrintSettings aPrintSettings);

   * Get the history entry that this viewer will save itself into when
   * destroyed.  Can return null
  readonly attribute nsISHEntry historyEntry;

   * Indicates when we're in a state where content shouldn't be allowed to
   * trigger a tab-modal prompt (as opposed to a window-modal prompt) because
   * we're part way through some operation (eg beforeunload) that shouldn't be
   * rentrant if the user closes the tab while the prompt is showing.
   * See bug 613800.
  readonly attribute boolean isTabModalPromptAllowed;

   * Returns whether this content viewer is in a hidden state.
  readonly attribute boolean isHidden;

  [noscript] readonly attribute nsIPresShellPtr presShell;
  [noscript] readonly attribute nsPresContextPtr presContext;
  // aDocument must not be null.
  [noscript] void setDocumentInternal(in nsIDocument aDocument,
                                      in boolean aForceReuseInnerWindow);
   * Find the view to use as the container view for MakeWindow. Returns
   * null if this will be the root of a view manager hierarchy. In that
   * case, if mParentWidget is null then this document should not even
   * be displayed.
  [noscript,notxpcom,nostdcall] nsViewPtr findContainerView();
   * Set collector for navigation timing data (load, unload events).
  [noscript,notxpcom,nostdcall] void setNavigationTiming(in nsDOMNavigationTimingPtr aTiming);