/*
 * Copyright 2017 Zebediah Figura for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "ocidl.idl";

typedef
[
    uuid(44ec9b57-dcab-4cde-b373-ee94962950e3)
]
enum INTERNETEXPLORERCONFIGURATION {
    INTERNETEXPLORERCONFIGURATION_HOST            = 0x00000001,
    INTERNETEXPLORERCONFIGURATION_WEB_DRIVER      = 0x00000002,
    INTERNETEXPLORERCONFIGURATION_WEB_DRIVER_EDGE = 0x00000004,
} INTERNETEXPLORERCONFIGURATION;

[
    object,
    uuid(acc84351-04ff-44f9-b23f-655ed168c6d5),
    pointer_default(unique)
]
interface IInternetExplorerManager : IUnknown
{
    HRESULT CreateObject([in] DWORD config, [in, unique, string] LPCWSTR url, [in] REFIID riid, [out, iid_is(riid)] void **ppv);
}

[
    uuid(df4fcc34-067a-4e0a-8352-4a1a5095346e)
]
coclass InternetExplorerManager
{
    [default] interface IInternetExplorerManager;
}
