#include "nsISupports.idl"

interface nsIDOMDocument;


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

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

[scriptable, uuid(70b8f22d-135c-4c94-8044-1bd3238d0990)]
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();
};
