/*
 * Defines the COM interfaces and APIs related to the IE Web browser
 *
 * Copyright (C) 2001 John R. Sheets (for CodeWeavers)
 * Copyright (C) 2003 Alexandre Julliard
 * Copyright (C) 2004 Jacek Caban
 *
 * 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";
import "docobj.idl";

#include <olectl.h>
#include <exdispid.h>

#ifndef __WIDL__
#define threading(model)
#define progid(str)
#define vi_progid(str)
#endif

cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
cpp_quote("#undef FindText")
cpp_quote("#endif")

/*****************************************************************************
 * SHDocVw library
 */
[
    uuid(EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B),
    version(1.1),
    helpstring("Microsoft Internet Controls")
]
library SHDocVw
{

importlib("stdole2.tlb");


/*****************************************************************************
 * IWebBrowser interface
 */
[
    object,
    oleautomation,
    uuid(eab22ac1-30c1-11cf-a7eb-0000c05bae0b),
    hidden,
    dual
]
interface IWebBrowser : IDispatch
{
    typedef enum BrowserNavConstants
    {
        navOpenInNewWindow          = 0x00000001,
        navNoHistory                = 0x00000002,
        navNoReadFromCache          = 0x00000004,
        navNoWriteToCache           = 0x00000008,
        navAllowAutosearch          = 0x00000010,
        navBrowserBar               = 0x00000020,
        navHyperlink                = 0x00000040,
        navEnforceRestricted        = 0x00000080,
        navNewWindowsManaged        = 0x00000100,
        navUntrustedForDownload     = 0x00000200,
        navTrustedForActiveX        = 0x00000400,
        navOpenInNewTab             = 0x00000800,
        navOpenInBackgroundTab      = 0x00001000,
        navKeepWordWheelText        = 0x00002000,
        navVirtualTab               = 0x00004000,
        navBlockRedirectsXDomain    = 0x00008000,
        navOpenNewForegroundTab     = 0x00010000,
        navTravelLogScreenshot      = 0x00020000,
        navDeferUnload              = 0x00040000,
        navSpeculative              = 0x00080000,
        navSuggestNewWindow         = 0x00100000,
        navSuggestNewTab            = 0x00200000,
        navReserved1                = 0x00400000,
        navHomepageNavigate         = 0x00800000,
        navRefresh                  = 0x01000000,
        navHostNavigation           = 0x02000000,
        navReserved2                = 0x04000000,
        navReserved3                = 0x08000000,
        navReserved4                = 0x10000000,
    } BrowserNavConstants;

    typedef enum RefreshConstants
    {
        REFRESH_NORMAL     = 0,
        REFRESH_IFEXPIRED  = 1,
        REFRESH_COMPLETELY = 3
    } RefreshConstants;

    [id(100)] HRESULT GoBack();
    [id(101)] HRESULT GoForward();
    [id(102)] HRESULT GoHome();
    [id(103)] HRESULT GoSearch();

    [id(104)]
    HRESULT Navigate(
        [in] BSTR URL,
        [in, optional] VARIANT *Flags,
        [in, optional] VARIANT *TargetFrameName,
        [in, optional] VARIANT *PostData,
        [in, optional] VARIANT *Headers);

    [id(DISPID_REFRESH)] HRESULT Refresh();
    [id(105)] HRESULT Refresh2([in, optional] VARIANT *Level);
    [id(106)] HRESULT Stop();
    [id(200), propget] HRESULT Application([out, retval] IDispatch** ppDisp);
    [id(201), propget] HRESULT Parent([out, retval] IDispatch** ppDisp);
    [id(202), propget] HRESULT Container([out, retval] IDispatch** ppDisp);
    [id(203), propget] HRESULT Document([out, retval] IDispatch** ppDisp);
    [id(204), propget] HRESULT TopLevelContainer([out, retval] VARIANT_BOOL* pBool);
    [id(205), propget] HRESULT Type([out, retval] BSTR* Type);
    [id(206), propget] HRESULT Left([out, retval] long *pl);
    [id(206), propput] HRESULT Left([in] long Left);
    [id(207), propget] HRESULT Top([out, retval] long *pl);
    [id(207), propput] HRESULT Top([in] long Top);
    [id(208), propget] HRESULT Width([out, retval] long *pl);
    [id(208), propput] HRESULT Width([in] long Width);
    [id(209), propget] HRESULT Height([out, retval] long *pl);
    [id(209), propput] HRESULT Height([in] long Height);
    [id(210), propget] HRESULT LocationName([out, retval] BSTR *LocationName);
    [id(211), propget] HRESULT LocationURL([out, retval] BSTR *LocationURL);
    [id(212), propget] HRESULT Busy([out, retval] VARIANT_BOOL *pBool);
}

/*****************************************************************************
 * DWebBrowserEvents dispinterface
 */
[
    uuid(eab22ac2-30c1-11CF-a7eb-0000C05bae0b),
    hidden
]
dispinterface DWebBrowserEvents
{
    properties:
    methods:
    [id(DISPID_BEFORENAVIGATE)]
    void BeforeNavigate(
        [in] BSTR URL,
        long Flags,
        BSTR TargetFrameName,
        VARIANT *PostData,
        BSTR Headers,
        [in, out] VARIANT_BOOL *Cancel);

    [id(DISPID_NAVIGATECOMPLETE)]
    void NavigateComplete([in] BSTR URL);

    [id(DISPID_STATUSTEXTCHANGE)]
    void StatusTextChange([in] BSTR Text);

    [id(DISPID_PROGRESSCHANGE)]
    void ProgressChange([in] long Progress, [in] long ProgressMax);

    [id(DISPID_DOWNLOADCOMPLETE)]
    void DownloadComplete();

    [id(DISPID_COMMANDSTATECHANGE)]
    void CommandStateChange([in] long Command, [in]VARIANT_BOOL Enable);

    [id(DISPID_DOWNLOADBEGIN)]
    void DownloadBegin();

    [id(DISPID_NEWWINDOW)]
    void NewWindow(
        [in] BSTR URL,
        [in] long Flags,
        [in] BSTR TargetFrameName,
        [in] VARIANT *PostData,
        [in] BSTR Headers,
        [in,out] VARIANT_BOOL *Processed);

    [id(DISPID_TITLECHANGE)]
    void TitleChange([in] BSTR Text);

    [id(DISPID_FRAMEBEFORENAVIGATE)]
    void FrameBeforeNavigate(
        [in] BSTR URL,
        long Flags,
        BSTR TargetFrameName,
        VARIANT *PostData,
        BSTR Headers,
        [in, out]VARIANT_BOOL *Cancel);

    [id(DISPID_FRAMENAVIGATECOMPLETE)]
    void FrameNavigateComplete([in] BSTR URL);

    [id(DISPID_FRAMENEWWINDOW)]
    void FrameNewWindow(
        [in] BSTR URL,
        [in] long Flags,
        [in] BSTR TargetFrameName,
        [in] VARIANT *PostData,
        [in] BSTR Headers,
        [in,out] VARIANT_BOOL *Processed);

    [id(DISPID_QUIT)]
    void Quit([in, out] VARIANT_BOOL *Cancel);

    [id(DISPID_WINDOWMOVE)]
    void WindowMove();

    [id(DISPID_WINDOWRESIZE)]
    void WindowResize();

    [id(DISPID_WINDOWACTIVATE)]
    void WindowActivate();

    [id(DISPID_PROPERTYCHANGE)]
    void PropertyChange([in] BSTR Property);
}

typedef
[
    uuid(34a226e0-df30-11cf-89a9-00a0c9054129)
]
enum CommandStateChangeConstants {
    CSC_UPDATECOMMANDS  = -1,
    CSC_NAVIGATEFORWARD = 1,
    CSC_NAVIGATEBACK    = 2
} CommandStateChangeConstants;

/*****************************************************************************
 * IWebBrowserApp interface
 */
[
    object,
    oleautomation,
    uuid(0002df05-0000-0000-c000-000000000046),
    hidden,
    dual
]
interface IWebBrowserApp : IWebBrowser
{
    [id(300)] HRESULT Quit();
    [id(301)] HRESULT ClientToWindow([in,out] int* pcx, [in,out] int* pcy);
    [id(302)] HRESULT PutProperty([in] BSTR Property, [in] VARIANT vtValue);
    [id(303)] HRESULT GetProperty([in] BSTR Property, [out, retval] VARIANT *pvtValue);
    [id(DISPID_VALUE), propget] HRESULT Name([out, retval] BSTR* Name);
    [id(DISPID_HWND), propget] HRESULT HWND([out, retval] SHANDLE_PTR *pHWND);
    [id(400), propget] HRESULT FullName([out, retval] BSTR* FullName);
    [id(401), propget] HRESULT Path([out, retval] BSTR* Path);
    [id(402), propget] HRESULT Visible([out, retval] VARIANT_BOOL* pBool);
    [id(402), propput] HRESULT Visible([in] VARIANT_BOOL Value);
    [id(403), propget] HRESULT StatusBar([out, retval] VARIANT_BOOL* pBool);
    [id(403), propput] HRESULT StatusBar([in] VARIANT_BOOL Value);
    [id(404), propget] HRESULT StatusText([out, retval] BSTR *StatusText);
    [id(404), propput] HRESULT StatusText([in] BSTR StatusText);
    [id(405), propget] HRESULT ToolBar([out, retval] int * Value);
    [id(405), propput] HRESULT ToolBar([in] int Value);
    [id(406), propget] HRESULT MenuBar([out, retval] VARIANT_BOOL *Value);
    [id(406), propput] HRESULT MenuBar([in] VARIANT_BOOL Value);
    [id(407), propget] HRESULT FullScreen([out, retval] VARIANT_BOOL *pbFullScreen);
    [id(407), propput] HRESULT FullScreen([in] VARIANT_BOOL bFullScreen);
}

/*****************************************************************************
 * IWebBrowser2 interface
 */
[
    object,
    oleautomation,
    uuid(d30c1661-cdaf-11d0-8a3e-00c04fc9e26e),
    hidden,
    dual
]
interface IWebBrowser2 : IWebBrowserApp
{
    [id(500)] HRESULT Navigate2(
        [in] VARIANT *URL,
        [in, optional] VARIANT *Flags,
        [in, optional] VARIANT *TargetFrameName,
        [in, optional] VARIANT *PostData,
        [in, optional] VARIANT *Headers);

    [id(501)] HRESULT QueryStatusWB(
        [in] OLECMDID cmdID,
        [out, retval] OLECMDF *pcmdf);

    [id(502)] HRESULT ExecWB(
        [in] OLECMDID cmdID,
        [in] OLECMDEXECOPT cmdexecopt,
        [in, optional] VARIANT *pvaIn,
        [out, in, optional] VARIANT *pvaOut);

    [id(503)] HRESULT ShowBrowserBar(
        [in] VARIANT *pvaClsid,
        [in, optional] VARIANT *pvarShow,
        [in, optional] VARIANT *pvarSize);

    [id(DISPID_READYSTATE), propget, bindable]
    HRESULT ReadyState([out, retval] READYSTATE *plReadyState);

    [id(550), propget] HRESULT Offline([out, retval] VARIANT_BOOL *pbOffline);
    [id(550), propput] HRESULT Offline([in] VARIANT_BOOL bOffline);
    [id(551), propget] HRESULT Silent([out, retval] VARIANT_BOOL *pbSilent);
    [id(551), propput] HRESULT Silent([in] VARIANT_BOOL bSilent);
    [id(552), propget] HRESULT RegisterAsBrowser([out, retval] VARIANT_BOOL *pbRegister);
    [id(552), propput] HRESULT RegisterAsBrowser([in] VARIANT_BOOL bRegister);
    [id(553), propget] HRESULT RegisterAsDropTarget([out, retval] VARIANT_BOOL *pbRegister);
    [id(553), propput] HRESULT RegisterAsDropTarget([in] VARIANT_BOOL bRegister);
    [id(554), propget] HRESULT TheaterMode([out, retval] VARIANT_BOOL *pbRegister);
    [id(554), propput] HRESULT TheaterMode([in] VARIANT_BOOL bRegister);
    [id(555), propget] HRESULT AddressBar([out, retval] VARIANT_BOOL *Value);
    [id(555), propput] HRESULT AddressBar([in] VARIANT_BOOL Value);
    [id(556), propget] HRESULT Resizable([out, retval] VARIANT_BOOL *Value);
    [id(556), propput] HRESULT Resizable([in] VARIANT_BOOL Value);
}

typedef
[
    uuid(65507be0-91a8-11d3-a845-009027220e6d)
]
enum SecureLockIconConstants {
    secureLockIconUnsecure          = 0,
    secureLockIconMixed             = 1,
    secureLockIconSecureUnknownBits = 2,
    secureLockIconSecure40Bit       = 3,
    secureLockIconSecure56Bit       = 4,
    secureLockIconSecureFortezza    = 5,
    secureLockIconSecure128Bit      = 6
} SecureLockIconConstants;

/*****************************************************************************
 * DWebBrowserEvents2 dispinterface
 */
[
    uuid(34a715a0-6587-11d0-924a-0020afc7ac4d),
    hidden
]
dispinterface DWebBrowserEvents2
{
    properties:
    methods:
    [id(DISPID_STATUSTEXTCHANGE)]
    void StatusTextChange([in] BSTR Text);

    [id(DISPID_PROGRESSCHANGE)]
    void ProgressChange([in] long Progress, [in] long ProgressMax);

    [id(DISPID_COMMANDSTATECHANGE)]
    void CommandStateChange([in] long Command, [in] VARIANT_BOOL Enable);

    [id(DISPID_DOWNLOADBEGIN)]
    void DownloadBegin();

    [id(DISPID_DOWNLOADCOMPLETE)]
    void DownloadComplete();

    [id(DISPID_TITLECHANGE)]
    void TitleChange([in] BSTR Text);

    [id(DISPID_PROPERTYCHANGE)]
    void PropertyChange([in] BSTR szProperty);

    [id(DISPID_BEFORENAVIGATE2)]
    void BeforeNavigate2(
        [in] IDispatch *pDisp,
        [in] VARIANT *URL,
        [in] VARIANT *Flags,
        [in] VARIANT *TargetFrameName,
        [in] VARIANT *PostData,
        [in] VARIANT *Headers,
        [in, out] VARIANT_BOOL *Cancel);

    [id(DISPID_NEWWINDOW2)]
    void NewWindow2([in, out] IDispatch **ppDisp, [in, out] VARIANT_BOOL *Cancel);

    [id(DISPID_NAVIGATECOMPLETE2)]
    void NavigateComplete2([in] IDispatch *pDisp, [in] VARIANT *URL);

    [id(DISPID_DOCUMENTCOMPLETE)]
    void DocumentComplete([in] IDispatch *pDisp, [in] VARIANT *URL);

    [id(DISPID_ONQUIT)]
    void OnQuit();

    [id(DISPID_ONVISIBLE)]
    void OnVisible([in] VARIANT_BOOL Visible);

    [id(DISPID_ONTOOLBAR)]
    void OnToolBar([in] VARIANT_BOOL ToolBar);

    [id(DISPID_ONMENUBAR)]
    void OnMenuBar([in] VARIANT_BOOL MenuBar);

    [id(DISPID_ONSTATUSBAR)]
    void OnStatusBar([in] VARIANT_BOOL StatusBar);

    [id(DISPID_ONFULLSCREEN)]
    void OnFullScreen([in] VARIANT_BOOL FullScreen);

    [id(DISPID_ONTHEATERMODE)]
    void OnTheaterMode([in] VARIANT_BOOL TheaterMode);

    [id(DISPID_WINDOWSETRESIZABLE)]
    void WindowSetResizable([in] VARIANT_BOOL Resizable);

    [id(DISPID_WINDOWSETLEFT)]
    void WindowSetLeft([in] long Left);

    [id(DISPID_WINDOWSETTOP)]
    void WindowSetTop([in] long Top);

    [id(DISPID_WINDOWSETWIDTH)]
    void WindowSetWidth([in] long Width);

    [id(DISPID_WINDOWSETHEIGHT)]
    void WindowSetHeight([in] long Height);

    [id(DISPID_WINDOWCLOSING)]
    void WindowClosing(
            [in] VARIANT_BOOL IsChildWindow,
            [in, out] VARIANT_BOOL *Cancel);

    [id(DISPID_CLIENTTOHOSTWINDOW)]
    void ClientToHostWindow(
            [in, out] long *CX,
            [in, out] long *CY);

    [id(DISPID_SETSECURELOCKICON)]
    void SetSecureLockIcon([in] long SecureLockIcon);

    [id(DISPID_FILEDOWNLOAD)]
    void FileDownload(
            [in] VARIANT_BOOL ActiveDocument,
            [in, out] VARIANT_BOOL *Cancel);

    [id(DISPID_NAVIGATEERROR)]
    void NavigateError(
            [in] IDispatch *pDisp,
            [in] VARIANT *URL,
            [in] VARIANT *Frame,
            [in] VARIANT *StatusCode,
            [in, out] VARIANT_BOOL *Cancel);

    [id(DISPID_PRINTTEMPLATEINSTANTIATION)]
    void PrintTemplateInstantiation([in] IDispatch *pDisp);

    [id(DISPID_PRINTTEMPLATETEARDOWN)]
    void PrintTemplateTeardown([in] IDispatch *pDisp);

    [id(DISPID_UPDATEPAGESTATUS)]
    void UpdatePageStatus(
            [in] IDispatch *pDisp,
            [in] VARIANT *nPage,
            [in] VARIANT *fDone);

    [id(DISPID_PRIVACYIMPACTEDSTATECHANGE)]
    void PrivacyImpactedStateChange([in] VARIANT_BOOL bImpacted);

    [id(DISPID_NEWWINDOW3)]
    void NewWindow3(
            [in, out] IDispatch **ppDisp,
            [in, out] VARIANT_BOOL *Cancel,
            [in] DWORD dwFlags,
            [in] BSTR bstrUrlContext,
            [in] BSTR bstrUrl);

    [id(DISPID_SETPHISHINGFILTERSTATUS)]
    void SetPhishingFilterStatus([in] long PhishingFilterStatus);

    [id(DISPID_WINDOWSTATECHANGED)]
    void WindowStateChanged(
            [in] DWORD dwWindowStateFlags,
            [in] DWORD dwValidFlagsMask);

    [id(DISPID_NEWPROCESS)]
    void NewProcess(
            [in] long lCauseFlag,
            [in] IDispatch *pWB2,
            [in, out] VARIANT_BOOL *Cancel);

    [id(DISPID_THIRDPARTYURLBLOCKED)]
    void ThirdPartyUrlBlocked(
            [in] VARIANT *URL,
            [in] DWORD dwCount);

    [id(DISPID_REDIRECTXDOMAINBLOCKED)]
    void RedirectXDomainBlocked(
            [in] IDispatch *pDisp,
            [in] VARIANT *StartURL,
            [in] VARIANT *RedirectURL,
            [in] VARIANT *Frame,
            [in] VARIANT *StatusCode);

    [id(DISPID_BEFORESCRIPTEXECUTE)]
    void BeforeScriptExecute([in] IDispatch *pDispWindow);

    [id(DISPID_WEBWORKERSTARTED)]
    void WebWorkerStarted(
            [in] DWORD dwUniqueID,
            [in] BSTR bstrWorkerLabel);

    [id(DISPID_WEBWORKERFINISHED)]
    void WebWorkerFinished([in] DWORD dwUniqueID);
}

[
    helpstring("Microsoft Web Browser Version 1"),
    threading(apartment),
    progid("Shell.Explorer.1"),
    vi_progid("Shell.Explorer"),
    uuid(eab22ac3-30c1-11cf-a7eb-0000c05bae0b),
    control
]
coclass WebBrowser_V1
{
    interface IWebBrowser2;
    [default] interface IWebBrowser;
    [source] dispinterface DWebBrowserEvents2;
    [default, source] dispinterface DWebBrowserEvents;
}

[
    helpstring("Microsoft Web Browser"),
    threading(apartment),
    progid("Shell.Explorer.2"),
    vi_progid("Shell.Explorer"),
    uuid(8856f961-340a-11d0-a96b-00c04fd705a2),
    control
]
coclass WebBrowser
{
    [default] interface IWebBrowser2;
    interface IWebBrowser;
    [default, source] dispinterface DWebBrowserEvents2;
    [source] dispinterface DWebBrowserEvents;
}

[
    helpstring("Internet Explorer(Ver 1.0)"),
    progid("InternetExplorer.Application.1"),
    vi_progid("InternetExplorer.Application"),
    uuid(0002df01-0000-0000-c000-000000000046)
]
coclass InternetExplorer
{
    [default] interface IWebBrowser2;
              interface IWebBrowserApp;
    [default, source] dispinterface DWebBrowserEvents2;
    [source]          dispinterface DWebBrowserEvents;
}

[
    uuid(C08AFD90-F2A1-11D1-8455-00A0C91F3880),
    hidden
]
coclass ShellBrowserWindow
{
    [default] interface IWebBrowser2;
    interface IWebBrowserApp;
    [default, source] dispinterface DWebBrowserEvents2;
    [source] dispinterface DWebBrowserEvents;
}

typedef
[
    uuid(f41e6981-28e5-11d0-82b4-00a0c90c29c5)
]
enum ShellWindowTypeConstants {
    SWC_EXPLORER = 0,
    SWC_BROWSER  = 1,
    SWC_3RDPARTY = 2,
    SWC_CALLBACK = 4,
    SWC_DESKTOP  = 8
} ShellWindowTypeConstants;

typedef
[
    uuid(7716a370-38Ca-11d0-a48B-00a0c90a8f39)
]
enum ShellWindowFindWindowOptions {
    SWFO_NEEDDISPATCH   = 1,
    SWFO_INCLUDEPENDING = 2,
    SWFO_COOKIEPASSED   = 4
} ShellWindowFindWindowOptions;

[
    uuid(FE4106E0-399A-11D0-A48C-00A0C90A8F39)
]
dispinterface DShellWindowsEvents {
    properties:
    methods:
    [id(DISPID_WINDOWREGISTERED)]
    void WindowRegistered([in] long lCookie);

    [id(DISPID_WINDOWREVOKED)]
    void WindowRevoked([in] long lCookie);
}

[
    object,
    oleautomation,
    uuid(85cb6900-4d95-11cf-960c-0080c7f4ee85),
    dual
]
interface IShellWindows : IDispatch
{
    [propget] HRESULT Count([out, retval] long *Count);

    [id(DISPID_VALUE)]
    HRESULT Item(
            [in, optional] VARIANT index,
            [out, retval] IDispatch **Folder);

    [id(DISPID_NEWENUM)]
    HRESULT _NewEnum([out, retval] IUnknown **ppunk);

    [hidden] HRESULT Register(
            [in] IDispatch *pid,
            [in] long hWnd,
            [in] int swClass,
            [out] long *plCookie);

    [hidden] HRESULT RegisterPending(
            [in] long lThreadId,
            [in] VARIANT *pvarloc,
            [in] VARIANT *pvarlocRoot,
            [in] int swClass,
            [out] long *plCookie);

    [hidden] HRESULT Revoke([in] long lCookie);
    [hidden] HRESULT OnNavigate([in] long lCookie, [in] VARIANT *pvarLoc);
    [hidden] HRESULT OnActivated([in] long lCookie, [in] VARIANT_BOOL fActive);
    [hidden] HRESULT FindWindowSW(
            [in] VARIANT *pvarLoc,
            [in] VARIANT *pvarLocRoot,
            [in] int swClass,
            [out] long *phwnd,
            [in] int swfwOptions,
            [out, retval] IDispatch **ppdispOut);

    [hidden] HRESULT OnCreated([in] long lCookie, [in] IUnknown *punk);
    [hidden] HRESULT ProcessAttachDetach([in] VARIANT_BOOL fAttach);
}

[
    threading(apartment),
    uuid(9ba05972-f6a8-11cf-a442-00a0c90a8f39)
]
coclass ShellWindows
{
    [default] interface IShellWindows;
    [default, source] dispinterface DShellWindowsEvents;
}

[
    odl,
    uuid(729fe2f8-1ea8-11d1-8f85-00C04fc2fbe1),
    dual,
    oleautomation
]
interface IShellUIHelper : IDispatch {
    [id(1), hidden] HRESULT ResetFirstBootMode();
    [id(2), hidden] HRESULT ResetSafeMode();
    [id(3), hidden] HRESULT RefreshOfflineDesktop();

    [id(4)] HRESULT AddFavorite(
            [in] BSTR URL,
            [in, optional] VARIANT* Title);

    [id(5)] HRESULT AddChannel([in] BSTR URL);

    [id(6)] HRESULT AddDesktopComponent(
            [in] BSTR URL,
            [in] BSTR Type,
            [in, optional] VARIANT *Left,
            [in, optional] VARIANT *Top,
            [in, optional] VARIANT *Width,
            [in, optional] VARIANT *Height);

    [id(7)] HRESULT IsSubscribed(
            [in] BSTR URL,
            [out, retval] VARIANT_BOOL *pBool);

    [id(8)] HRESULT NavigateAndFind(
            [in] BSTR URL,
            [in] BSTR strQuery,
            [in] VARIANT *varTargetFrame);

    [id(9)] HRESULT ImportExportFavorites(
            [in] VARIANT_BOOL fImport,
            [in] BSTR strImpExpPath);

    [id(10)] HRESULT AutoCompleteSaveForm([in, optional] VARIANT *Form);

    [id(11)] HRESULT AutoScan(
            [in] BSTR strSearch,
            [in] BSTR strFailureUrl,
            [in, optional] VARIANT *pvarTargetFrame);

    [id(12), hidden] HRESULT AutoCompleteAttach([in, optional] VARIANT *Reserved);

    [id(13)] HRESULT ShowBrowserUI(
            [in] BSTR bstrName,
            [in] VARIANT *pvarIn,
            [out, retval] VARIANT *pvarOut);
}

[
    uuid(a7fe6eda-1932-4281-b881-87b31b8bc52c),
    oleautomation,
    dual
]
interface IShellUIHelper2 : IShellUIHelper {
    [id(DISPID_ADDSEARCHPROVIDER)]
    HRESULT AddSearchProvider([in] BSTR URL);

    [id(DISPID_RUNONCESHOWN)]
    HRESULT RunOnceShown();

    [id(DISPID_SKIPRUNONCE)]
    HRESULT SkipRunOnce();

    [id(DISPID_CUSTOMIZESETTINGS)] HRESULT CustomizeSettings(
        [in] VARIANT_BOOL fSQM,
        [in] VARIANT_BOOL fPhishing,
        [in] BSTR bstrLocale);

    [id(DISPID_SQMENABLED)]
    HRESULT SqmEnabled([out, retval] VARIANT_BOOL *pfEnabled);

    [id(DISPID_PHISHINGENABLED)]
    HRESULT PhishingEnabled([out, retval] VARIANT_BOOL *pfEnabled);

    [id(DISPID_BRANDIMAGEURI)]
    HRESULT BrandImageUri([out, retval] BSTR *pbstrUri);

    [id(DISPID_SKIPTABSWELCOME)]
    HRESULT SkipTabsWelcome();

    [id(DISPID_DIAGNOSECONNECTION)]
    HRESULT DiagnoseConnection();

    [id(DISPID_CUSTOMIZECLEARTYPE)]
    HRESULT CustomizeClearType([in] VARIANT_BOOL fSet);

    [id(DISPID_ISSEARCHPROVIDERINSTALLED)]
    HRESULT IsSearchProviderInstalled(
        [in] BSTR URL,
        [out, retval] DWORD *pdwResult);

    [id(DISPID_ISSEARCHMIGRATED)]
    HRESULT IsSearchMigrated([out, retval] VARIANT_BOOL *pfMigrated);

    [id(DISPID_DEFAULTSEARCHPROVIDER)]
    HRESULT DefaultSearchProvider([out, retval] BSTR *pbstrName);

    [id(DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE)]
    HRESULT RunOnceRequiredSettingsComplete([in] VARIANT_BOOL fComplete);

    [id(DISPID_RUNONCEHASSHOWN)]
    HRESULT RunOnceHasShown([out, retval] VARIANT_BOOL *pfShown);

    [id(DISPID_SEARCHGUIDEURL)]
    HRESULT SearchGuideUrl([out, retval] BSTR *pbstrUrl);
}

[
    helpstring("Microsoft Shell UI Helper"),
    threading(apartment),
    progid("Shell.UIHelper.1"),
    vi_progid("Shell.UIHelper"),
    uuid(64ab4bb7-111e-11d1-8f79-00c04fc2fbe1)
]
coclass ShellUIHelper {
    [default] interface IShellUIHelper2;
}

[
    uuid(55136806-b2de-11d1-b9f2-00a0c98bc547)
]
dispinterface DShellNameSpaceEvents {
    properties:
    methods:
    [id(1)] void FavoritesSelectionChange(
            [in] long cItems,
            [in] long hItem,
            [in] BSTR strName,
            [in] BSTR strUrl,
            [in] long cVisits,
            [in] BSTR strDate,
            [in] long fAvailableOffline);

    [id(2)] void SelectionChange();
    [id(3)] void DoubleClick();
    [id(4)] void Initialized();
}

[
    odl,
    uuid(55136804-b2de-11d1-b9f2-00a0c98bc547),
    hidden,
    dual,
    oleautomation
]
interface IShellFavoritesNameSpace : IDispatch {
    [id(1)] HRESULT MoveSelectionUp();
    [id(2)] HRESULT MoveSelectionDown();
    [id(3)] HRESULT ResetSort();
    [id(4)] HRESULT NewFolder();
    [id(5)] HRESULT Synchronize();
    [id(6)] HRESULT Import();
    [id(7)] HRESULT Export();
    [id(8)] HRESULT InvokeContextMenuCommand([in] BSTR strCommand);
    [id(9)] HRESULT MoveSelectionTo();
    [id(10), propget] HRESULT SubscriptionsEnabled([out, retval] VARIANT_BOOL *pBool);
    [id(11)] HRESULT CreateSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool);
    [id(12)] HRESULT DeleteSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool);
    [id(13)] HRESULT SetRoot([in] BSTR bstrFullPath);
}

[
    odl,
    uuid(e572d3c9-37be-4ae2-825d-d521763e3108),
    hidden,
    dual,
    oleautomation
]
interface IShellNameSpace : IShellFavoritesNameSpace {
    [id(14), propget] HRESULT EnumOptions([out, retval] long* pgrfEnumFlags);
    [id(14), propput] HRESULT EnumOptions([in] long pgrfEnumFlags);

    [id(15), propget] HRESULT SelectedItem([out, retval] IDispatch **pItem);
    [id(15), propput] HRESULT SelectedItem([in] IDispatch *pItem);

    [id(16), propget] HRESULT Root([out, retval] VARIANT *pvar);
    [id(16), propput] HRESULT Root([in] VARIANT pvar);

    [id(17), propget] HRESULT Depth([out, retval] int *piDepth);
    [id(17), propput] HRESULT Depth([in] int piDepth);

    [id(18), propget] HRESULT Mode([out, retval] unsigned int *puMode);
    [id(18), propput] HRESULT Mode([in] unsigned int puMode);

    [id(19), propget] HRESULT Flags([out, retval] unsigned long *pdwFlags);
    [id(19), propput] HRESULT Flags([in] unsigned long pdwFlags);

    [id(20), propput] HRESULT TVFlags([in] unsigned long dwFlags);
    [id(20), propget] HRESULT TVFlags([out, retval] unsigned long *dwFlags);

    [id(21), propget] HRESULT Columns([out, retval] BSTR *bstrColumns);
    [id(21), propput] HRESULT Columns([in] BSTR bstrColumns);

    [id(22), propget] HRESULT CountViewTypes([out, retval] int *piTypes);

    [id(23)] HRESULT SetViewType([in] int iType);
    [id(24)] HRESULT SelectedItems([out, retval] IDispatch **ppid);
    [id(25)] HRESULT Expand([in] VARIANT var,  int iDepth);
    [id(26)] HRESULT UnselectAll();
}

[
    helpstring("Shell Name Space"),
    threading(apartment),
    progid("ShellNameSpace.ShellNameSpace.1"),
    vi_progid("ShellNameSpace.ShellNameSpace"),
    uuid(2f2f1f96-2bc1-4b1c-be28-ea3774f4676a)
]
coclass ShellShellNameSpace {
    [default] interface IShellNameSpace;
    [default, source] dispinterface DShellNameSpaceEvents;
}

[
    helpstring("Shell Name Space"),
    threading(apartment),
    progid("ShellNameSpace.ShellNameSpace.1"),
    vi_progid("ShellNameSpace.ShellNameSpace"),
    uuid(55136805-b2de-11d1-b9f2-00a0c98bc547)
]
coclass ShellNameSpace {
    [default] interface IShellNameSpace;
    [default, source] dispinterface DShellNameSpaceEvents;
}

[
    odl,
    uuid(f3470f24-15fd-11d2-bb2e-00805ff7efca),
    hidden,
    dual,
    oleautomation
]
interface IScriptErrorList : IDispatch {
    [id(10)] HRESULT advanceError();
    [id(11)] HRESULT retreatError();
    [id(12)] HRESULT canAdvanceError([out, retval] long *pfCanAdvance);
    [id(13)] HRESULT canRetreatError([out, retval] long *pfCanRetreat);
    [id(14)] HRESULT getErrorLine([out, retval] long *plLine);
    [id(15)] HRESULT getErrorChar([out, retval] long *plChar);
    [id(16)] HRESULT getErrorCode([out, retval] long *plCode);
    [id(17)] HRESULT getErrorMsg([out, retval] BSTR *pstr);
    [id(18)] HRESULT getErrorUrl([out, retval] BSTR *pstr);
    [id(23)] HRESULT getAlwaysShowLockState([out, retval] long *pfAlwaysShowLocked);
    [id(19)] HRESULT getDetailsPaneOpen([out, retval] long *pfDetailsPaneOpen);
    [id(20)] HRESULT setDetailsPaneOpen(long fDetailsPaneOpen);
    [id(21)] HRESULT getPerErrorDisplay([out, retval] long *pfPerErrorDisplay);
    [id(22)] HRESULT setPerErrorDisplay(long fPerErrorDisplay);
}

[
    uuid(efd01300-160f-11d2-bb2e-00805ff7efca),
    hidden,
    noncreatable
]
coclass CScriptErrorList {
    [default] interface IScriptErrorList;
}

[
    odl,
    uuid(ba9239a4-3dd5-11d2-bf8b-00c04fb93661),
    hidden,
    dual,
    oleautomation
]
interface ISearch : IDispatch {
    [propget] HRESULT Title([out, retval] BSTR *pbstrTitle);
    [propget] HRESULT Id([out, retval] BSTR *pbstrId);
    [propget] HRESULT URL([out, retval] BSTR *pbstrUrl);
}

[
    odl,
    uuid(47c922a2-3dd5-11d2-bf8b-00c04fb93661),
    hidden,
    dual,
    oleautomation
]
interface ISearches : IDispatch {
    [propget] HRESULT Count([out, retval] long *plCount);
    [propget] HRESULT Default([out, retval] BSTR *pbstrDefault);

    HRESULT Item(
            [in, optional] VARIANT index,
            [out, retval] ISearch **ppid);

    [id(DISPID_NEWENUM)]
    HRESULT _NewEnum([out, retval] IUnknown **ppunk);
}

[
    odl,
    uuid(72423e8f-8011-11d2-be79-00a0c9a83da1),
    hidden,
    dual,
    oleautomation
]
interface ISearchAssistantOC : IDispatch {
    [id(1)] HRESULT AddNextMenuItem([in] BSTR bstrText, [in] long idItem);
    [id(2)] HRESULT SetDefaultSearchUrl([in] BSTR bstrUrl);
    [id(3)] HRESULT NavigateToDefaultSearch();

    [id(4)] HRESULT IsRestricted(
            [in] BSTR bstrGuid,
            [out, retval] VARIANT_BOOL *pVal);

    [id(5), propget] HRESULT ShellFeaturesEnabled([out, retval] VARIANT_BOOL *pVal);
    [id(6), propget] HRESULT SearchAssistantDefault([out, retval] VARIANT_BOOL *pVal);
    [id(7), propget] HRESULT Searches([out, retval] ISearches **ppid);
    [id(8), propget] HRESULT InWebFolder([out, retval] VARIANT_BOOL *pVal);

    [id(9)] HRESULT PutProperty(
            [in] VARIANT_BOOL bPerLocale,
            [in] BSTR bstrName,
            [in] BSTR bstrValue);

    [id(10)] HRESULT GetProperty(
            [in] VARIANT_BOOL bPerLocale,
            [in] BSTR bstrName,
            [out, retval] BSTR *pbstrValue);

    [id(11), propput] HRESULT EventHandled([in] VARIANT_BOOL rhs);
    [id(12)] HRESULT ResetNextMenu();
    [id(13)] HRESULT FindOnWeb();
    [id(14)] HRESULT FindFilesOrFolders();
    [id(15)] HRESULT FindComputer();
    [id(16)] HRESULT FindPrinter();
    [id(17)] HRESULT FindPeople();

    [id(18)] HRESULT GetSearchAssistantURL(
            [in] VARIANT_BOOL bSubstitute,
            [in] VARIANT_BOOL bCustomize,
            [out, retval] BSTR *pbstrValue);

    [id(19)] HRESULT NotifySearchSettingsChanged();

    [id(20), propput] HRESULT ASProvider([in] BSTR pProvider);
    [id(20), propget] HRESULT ASProvider([out, retval] BSTR *pProvider);

    [id(21), propput] HRESULT ASSetting([in] int pSetting);
    [id(21), propget] HRESULT ASSetting([out, retval] int *pSetting);

    [id(22)] HRESULT NETDetectNextNavigate();
    [id(23)] HRESULT PutFindText([in] BSTR FindText);
    [id(24), propget] HRESULT Version([out, retval] int *pVersion);

    [id(25)] HRESULT EncodeString(
            [in] BSTR bstrValue,
            [in] BSTR bstrCharSet,
            [in] VARIANT_BOOL bUseUTF8,
            [out, retval] BSTR* pbstrResult);
}

[
    odl,
    uuid(72423e8f-8011-11d2-be79-00a0c9a83da2),
    hidden,
    dual,
    oleautomation
]
interface ISearchAssistantOC2 : ISearchAssistantOC {
    [id(26), propget] HRESULT ShowFindPrinter([out, retval] VARIANT_BOOL *pbShowFindPrinter);
}

[
    odl,
    uuid(72423e8f-8011-11d2-be79-00a0c9a83da3),
    hidden,
    dual,
    oleautomation
]
interface ISearchAssistantOC3 : ISearchAssistantOC2 {
    [id(27), propget] HRESULT SearchCompanionAvailable([out, retval] VARIANT_BOOL *pbAvailable);

    [id(28), propput] HRESULT UseSearchCompanion([in] VARIANT_BOOL pbUseSC);
    [id(28), propget] HRESULT UseSearchCompanion([out, retval] VARIANT_BOOL *pbUseSC);
}

[
    uuid(1611fdda-445b-11d2-85de-00C04fa35c89),
    hidden
]
dispinterface _SearchAssistantEvents {
    properties:
    methods:
    [id(1)] void OnNextMenuSelect([in] long idItem);
    [id(2)] void OnNewSearch();
}

[
    helpstring("SearchAssistantOC"),
    threading(apartment),
    progid("SearchAssistantOC.SearchAssistantOC.1"),
    vi_progid("SearchAssistantOC.SearchAssistantOC"),
    uuid(2e71fd0f-aab1-42c0-9146-6d2c4edcf07d),
    hidden
]
coclass ShellSearchAssistantOC {
    [default] interface ISearchAssistantOC3;
    [default, source] dispinterface _SearchAssistantEvents;
}

[
    threading(apartment),
    progid("SearchAssistantOC.SearchAssistantOC.1"),
    vi_progid("SearchAssistantOC.SearchAssistantOC"),
    uuid(b45ff030-4447-11d2-85de-00C04fa35c89),
    hidden
]
coclass SearchAssistantOC {
    [default] interface ISearchAssistantOC3;
    [default, source] dispinterface _SearchAssistantEvents;
}

} /* library */
