/* -*- 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 it's 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 it's parent to do the search if it's 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);

	/*
		Tells the implementer of this interface to create a new webBrowserChrome
		object for it.  Typically this means the implemetor will create a new 
		top level window that is represented by nsIWebBrowserChrome.  This
		most often will be called when for instance there is a need for a new
		JS window, etc.  Soon after this new object is returned, the webBrowser
		attribute will checked, if one does not exist, one will be created and
		setWebBrowser will be called with the new widget to instantiate in this 
		new window.	
	*/
	void getNewBrowserChrome(in long aChromeFlags, out nsIWebBrowserChrome webBrowserChrome);
};
