//*********************************************************************
//*                  Microsoft Windows                               **
//*            Copyright(c) Microsoft Corp., 1999                    **
//*********************************************************************
//
//  IOSITE.H - Header for the implementation of IOleSite
//
//  HISTORY:
//  
//  1/27/99 a-jaswed Created.
// 
//  Class which will provide the an IOleSite to the WebOC

#ifndef _IOSITE_H_ 
#define _IOSITE_H_

#include <mshtmhst.h>
#include <exdisp.h>

#include "iocsite.h"
#include "ioipsite.h"
#include "ioipfram.h"

class COleSite : public IServiceProvider, public IDocHostUIHandler, public DWebBrowserEvents2, public IInternetSecurityManager
{  
private:
    IDispatch* m_pExternalInterface;
    BOOL       m_fScrolling;
    BOOL       m_bIsOEMDebug;

public:
     COleSite();
    ~COleSite();
    
    ULONG                    m_cRef;
    HWND                     m_hWnd;
    HWND                     m_hwndIPObj;
    LPSTORAGE                m_lpStorage;
    LPOLEOBJECT              m_lpOleObject;
    LPOLEINPLACEOBJECT       m_lpInPlaceObject;
    BOOL                     m_fInPlaceActive;
    COleClientSite*          m_pOleClientSite;
    COleInPlaceSite*         m_pOleInPlaceSite;
    COleInPlaceFrame*        m_pOleInPlaceFrame;
    
    // IUnknown Interfaces
    STDMETHODIMP         QueryInterface (REFIID riid, LPVOID* ppvObj);
    STDMETHODIMP_(ULONG) AddRef         ();
    STDMETHODIMP_(ULONG) Release        ();

    // IServiceProvider
    STDMETHODIMP QueryService (REFGUID guidService, REFIID riid, void** ppvService);

    // IDocHostUIHandler
    HRESULT STDMETHODCALLTYPE ShowContextMenu       (DWORD dwID, POINT* ppt, IUnknown* pcmdtReserved, IDispatch* pdispReserved);
    HRESULT STDMETHODCALLTYPE GetHostInfo           (DOCHOSTUIINFO* pInfo);
    HRESULT STDMETHODCALLTYPE ShowUI                (DWORD dwID, IOleInPlaceActiveObject* pActiveObject, IOleCommandTarget* pCommandTarget, IOleInPlaceFrame* pFrame, IOleInPlaceUIWindow* pDoc);
    HRESULT STDMETHODCALLTYPE HideUI                (void);
    HRESULT STDMETHODCALLTYPE UpdateUI              (void);
    HRESULT STDMETHODCALLTYPE EnableModeless        (BOOL fEnable);
    HRESULT STDMETHODCALLTYPE OnDocWindowActivate   (BOOL fActivate);
    HRESULT STDMETHODCALLTYPE OnFrameWindowActivate (BOOL fActivate);
    HRESULT STDMETHODCALLTYPE ResizeBorder          (LPCRECT prcBorder, IOleInPlaceUIWindow* pUIWindow, BOOL fRameWindow);
    HRESULT STDMETHODCALLTYPE TranslateAccelerator  (LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID);
    HRESULT STDMETHODCALLTYPE GetOptionKeyPath      (BSTR* pbstrKey, DWORD dw);
    HRESULT STDMETHODCALLTYPE GetDropTarget         (IDropTarget* pDropTarget, IDropTarget** ppDropTarget);
    HRESULT STDMETHODCALLTYPE GetExternal           (IDispatch** ppDisp);
    HRESULT STDMETHODCALLTYPE TranslateUrl          (DWORD dwTranslate, OLECHAR* pchURLIn, OLECHAR** ppchURLOut);
    HRESULT STDMETHODCALLTYPE FilterDataObject      (IDataObject* pDO, IDataObject** ppDORet);
    HRESULT STDMETHODCALLTYPE SetExternalInterface  (IDispatch* pUnk);

    // DWebBrowserEvents2        
    STDMETHOD (GetTypeInfoCount) (UINT* pcInfo);
    STDMETHOD (GetTypeInfo)      (UINT, LCID, ITypeInfo**);
    STDMETHOD (GetIDsOfNames)    (REFIID, OLECHAR**, UINT, LCID, DISPID* );
    STDMETHOD (Invoke)           (DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr);

    // IInternetSecurityManager

    HRESULT STDMETHODCALLTYPE SetSecuritySite(IInternetSecurityMgrSite __RPC_FAR *pSite); 
    HRESULT STDMETHODCALLTYPE GetSecuritySite(IInternetSecurityMgrSite __RPC_FAR *__RPC_FAR *ppSite);
    HRESULT STDMETHODCALLTYPE MapUrlToZone(LPCWSTR pwszUrl, DWORD __RPC_FAR *pdwZone, DWORD dwFlags);
    HRESULT STDMETHODCALLTYPE GetSecurityId(LPCWSTR pwszUrl, BYTE __RPC_FAR *pbSecurityId, DWORD __RPC_FAR *pcbSecurityId, DWORD_PTR dwReserved);
    HRESULT STDMETHODCALLTYPE ProcessUrlAction(LPCWSTR pwszUrl, DWORD dwAction, BYTE __RPC_FAR *pPolicy, DWORD cbPolicy, BYTE __RPC_FAR *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved);
    HRESULT STDMETHODCALLTYPE QueryCustomPolicy(LPCWSTR pwszUrl, REFGUID guidKey, BYTE __RPC_FAR *__RPC_FAR *ppPolicy, DWORD __RPC_FAR *pcbPolicy, BYTE __RPC_FAR *pContext, DWORD cbContext, DWORD dwReserved);
    HRESULT STDMETHODCALLTYPE SetZoneMapping(DWORD dwZone, LPCWSTR lpszPattern, DWORD dwFlags);
    HRESULT STDMETHODCALLTYPE GetZoneMappings(DWORD dwZone, IEnumString __RPC_FAR *__RPC_FAR *ppenumString, DWORD dwFlags);
};

#endif