#include "nsISupports.idl"

interface nsIDOMDocument;
interface nsISHEntry;


%{ C++
class nsIWidget;
class nsIDeviceContext;
struct nsRect;
%}

[ptr] native nsIWidgetPtr(nsIWidget);
[ptr] native nsIDeviceContextPtr(nsIDeviceContext);
[ref] native nsRectRef(nsRect);

[scriptable, uuid(e2c68a4d-b396-11d9-a3d1-00112478d626)]
interface nsIContentViewer : nsISupports
{

  [noscript] void init(in nsIWidgetPtr aParentWidget,
                       in nsIDeviceContextPtr aDeviceContext,
                       [const] in nsRectRef aBounds);

  attribute nsISupports container;

  void loadStart(in nsISupports aDoc);
  void loadComplete(in unsigned long aStatus);
  boolean permitUnload();
  void unload();

  /**
   * 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.
   */
  void close();
  void destroy();

  void stop();

  attribute nsIDOMDocument DOMDocument;

  [noscript] void getBounds(in nsRectRef aBounds);
  [noscript] void setBounds([const] in nsRectRef 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 enableRendering;

  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.
   */
  void open();

  /**
   * Set the  session history entry for the content viewer.  If this is set,
   * then 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 setHistoryEntry(in nsISHEntry entry);
};
