/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 * 
 * The Original Code is the Mozilla browser.
 * 
 * The Initial Developer of the Original Code is Netscape
 * Communications, Inc.  Portions created by Netscape are
 * Copyright (C) 1999, Mozilla.  All Rights Reserved.
 * 
 * Contributor(s):
 *   Travis Bogard <travis@netscape.com>
 */

#include "nsISupports.idl"

/**
 * The nsIDocShellTreeOwner
 */

interface nsIDocShellTreeItem;
interface nsIWebBrowserChrome;

[scriptable, uuid(80F30E10-A7CF-11d3-AFC5-00A024FFC08C)]
interface nsIDocShellTreeOwner : nsISupports
{
	/*
	Return the child DocShellTreeItem with the specified name.
	name - This is the name of the item that is trying to be found.
	aRequestor - This is the docshellTreeItem that is requesting the find.  This
	parameter is used to identify when the child is asking its parent to find
	a child with the specific name.  The parent uses this parameter to ensure
	a resursive state does not occur by not again asking the requestor for find
	a shell by the specified name.  Inversely the child uses it to ensure it
	does not ask its parent to do the search if its parent is the one that
	asked it to search.
	*/
	nsIDocShellTreeItem findItemWithName(in wstring name, 
		in nsIDocShellTreeItem aRequestor);

	/*
	Called when a content shell is added to the the docShell Tree.
	aContentShell - the docShell that has been added.
	aPrimary - true if this is the primary content shell
	aID - the ID of the docShell that has been added.
	*/
	void contentShellAdded(in nsIDocShellTreeItem aContentShell, 
		in boolean aPrimary, in wstring aID);

	/*
	Returns the Primary Content Shell
	*/
	readonly attribute nsIDocShellTreeItem primaryContentShell;

	/*
	Tells the tree owner to size its window or parent window in such a way
	that the shell passed along will be the size specified.
	*/
	void sizeShellTo(in nsIDocShellTreeItem shell, in long cx, in long cy);

	/*
	Shows the window as a modal window.
	*/
	void showModal();	
    
	/**
	Is the window modal (that is, currently executing a modal loop)?
        @return true if it's a modal window
	*/
	boolean isModal();

	/**
	Exit a modal loop if we're in one
	@param aStatus - the result code to return from showModal
	*/
	void exitModalLoop(in nsresult aStatus);

	/*
	Tells the implementer of this interface to create a new window.  This is
	a new logical window.  Meaning in some implementations the result may not
	be an actual new window, but rather a new tab or view in an existing
	window.  What is returned is the new DocShellTreeItem from which the
	internals can operate on.  This most often will be called when there is
	a need for a new JS window, etc.	
	*/
	nsIDocShellTreeItem getNewWindow(in long aChromeFlags);
};
