/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 * ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * 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 IDispatch implementation for XPConnect.
 *
 * The Initial Developer of the Original Code is
 * David Bradley.
 * Portions created by the Initial Developer are Copyright (C) 2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

#include "nsISupports.idl"
#include "nsIVariant.idl"

%{ C++
// Pull in jsval definition
#include "jspubtd.h"

// {40c4883d-079f-43db-82a9-df0a59d37998}
#define NS_IDISPATCH_SUPPORT_CID \
    { 0x40c4883d, 0x079f, 0x43db, \
      { 0x82, 0xa9, 0xdf, 0x0a, 0x59, 0xd3, 0x79, 0x98 } }
#ifdef XPC_IDISPATCH_SUPPORT
#define NS_IDISPATCH_SUPPORT_CONTRACTID "@mozilla.org/nsdispatchsupport;1"
// Disable the warning concerning IDispatch being a struct but now defined
// as a class
#pragma warning(push)
#pragma warning(disable : 4099)
#endif
%}

native COMVARIANT(VARIANT);
[ptr] native COMVARIANTPtr(VARIANT);
native JSVal(jsval);
[ptr] native JSContextPtr(JSContext);

interface IDispatch;

[uuid(38df70e9-12f8-4732-af91-df36c38dc6f6)]
interface nsIDispatchSupport : nsISupports
{
    /**
     * Converts a COM Variant to a jsval.
     * @param comvar The COM Variant to be converted.
     * @param val The jsval to receive the converted value.
     */
    void COMVariant2JSVal(in COMVARIANTPtr comvar, out JSVal val);

    /**
     * Converts a jsval to a COM Variant
     * @param var The jsval to be converted.
     * @param comvar The COM Variant to receive the converted value
     */
    void JSVal2COMVariant(in JSVal var, out COMVARIANT comvar);
    
    /**
     * Test if the class is safe to host.
     * @param clsid The nsID representation of the CLSID to test.
     * @param classExists Returns containing PR_FALSE if the class is
     *                    not registered.
     */
    boolean isClassSafeToHost(in JSContextPtr cx, in nsCIDRef cid,
                              in boolean capsCheck, out boolean classExists);
    
    /**
     * Test if the specified class is marked safe for scripting.
     * @param cid The nsID representation of the CLSID to test.
     * @param classExists Returns containing PR_FALSE if the class is not
     *                    registered.
     */
    boolean isClassMarkedSafeForScripting(in nsCIDRef cid, 
                                          out boolean classExists);

    /**
     * Test if the instantiated object is safe for scripting on the specified
     * interface.
     * @param theObject The object to test (an IUnknown cast into a void *).
     * @param iid The interface to test if it is safe for scripting on.
     */
    boolean isObjectSafeForScripting(in voidPtr theObject, in nsIIDRef id);

    /**
     * Return the ActiveX security and hosting flags. See nsIActiveXSecurityPolicy
     * for list of flags.
     * @param context The context for which flags are requested. At present the
     *                only valid value is nsnull.
     */
    unsigned long getHostingFlags(in string aContext);
};

%{ C++
#pragma warning(pop)
%}
