/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * 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 http://mozilla.org/MPL/2.0/. */
#include "nsISupports.idl"
interface nsIInterfaceRequestor;
interface nsIWebBrowserChrome;
interface nsIURIContentListener;
interface mozIDOMWindowProxy;
interface nsIWeakReference;
%{C++
namespace mozilla {
class OriginAttributes;
}
%}
[ref] native const_OriginAttributesRef(const mozilla::OriginAttributes);
/**
 * The nsIWebBrowser interface is implemented by web browser objects.
 * Embedders use this interface during initialisation to associate
 * the new web browser instance with the embedders chrome and
 * to register any listeners. The interface may also be used at runtime
 * to obtain the content DOM window and from that the rest of the DOM.
 */
[scriptable, builtinclass, uuid(4052b6da-4faa-4646-b3a1-7e16a01c2dc2)]
interface nsIWebBrowser : nsISupports
{
    /**
     * The chrome object associated with the browser instance. The embedder
     * must create one chrome object for each browser object
     * that is instantiated. The embedder must associate the two by setting
     * this property to point to the chrome object before creating the browser
     * window via the browser's nsIBaseWindow interface.
     *
     * The chrome may optionally implement nsIInterfaceRequestor,
     * nsIContextMenuListener and
     * nsITooltipListener to receive additional notifications
     * from the browser object.
     *
     * The chrome object may optionally implement
     * nsIWebProgressListener to register a progress listener
     * object. If the implementation does this, it must also implement
     * nsIWeakReference.
     *
     * @note The implementation should not refcount the supplied chrome
     *       object; it should assume that a non nullptr value is
     *       always valid. The embedder must explicitly set this value back
     *       to nullptr if the chrome object is destroyed before the browser
     *       object.
     *
     * @see nsIBaseWindow
     * @see nsIWebBrowserChrome
     * @see nsIInterfaceRequestor
     * @see nsIContextMenuListener
     * @see nsITooltipListener
     * @see nsIWeakReference
     * @see nsIWebProgressListener
     */
    attribute nsIWebBrowserChrome containerWindow;
    /**
     * The top-level DOM window. The embedder may walk the entire
     * DOM starting from this value.
     */
    readonly attribute mozIDOMWindowProxy contentDOMWindow;
    /**
     * Set Origin Attributes on the nsIWebBrowser.
     * The Origin Attributes will be passed to the docshell once it has been
     * created
     */
    [noscript, notxpcom, nostdcall, binaryname(SetOriginAttributes)]
    void binarySetOriginAttributes(in const_OriginAttributesRef aOriginAttrs);
};