//********************************************************************* //* Microsoft Windows ** //* Copyright(c) Microsoft Corp., 1996 ** //********************************************************************* #ifndef _BINDCB_H_ // the CStubBindStatusCallback implements IBindStatusCallback and // IHttpNegotiate. We use it to make a "fake" bind status callback // object when we have headers and post data we would like to apply // to a navigation. We supply this IBindStatusCallback object, and // the URL moniker asks us for headers and post data and use those in // the transaction. class CStubBindStatusCallback : public IBindStatusCallback, IHttpNegotiate, IMarshal { private: UINT _cRef; // ref count on this COM object LPCTSTR _pszHeaders; // headers to use HGLOBAL _hszPostData; // post data to use DWORD _cbPostData; // size of post data BOOL _bFrameIsOffline : 1; // Indicates if Offline property is set BOOL _bFrameIsSilent : 1; // Indicates if Silent property is set BOOL _bHyperlink : 1; // This is a hyperlink or top level request DWORD _grBindFlags; // optional additional bindinfo flags public: CStubBindStatusCallback(LPCWSTR pwzHeaders,LPCBYTE pPostData,DWORD cbPostData, VARIANT_BOOL bFrameIsOffline, VARIANT_BOOL bFrameIsSilent, BOOL bHyperlink, DWORD grBindFlags); ~CStubBindStatusCallback(); // *** IUnknown methods *** virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); virtual STDMETHODIMP_(ULONG) AddRef(void) ; virtual STDMETHODIMP_(ULONG) Release(void); // *** IBindStatusCallback *** virtual STDMETHODIMP OnStartBinding( /* [in] */ DWORD grfBSCOption, /* [in] */ IBinding *pib); virtual STDMETHODIMP GetPriority( /* [out] */ LONG *pnPriority); virtual STDMETHODIMP OnLowResource( /* [in] */ DWORD reserved); virtual STDMETHODIMP OnProgress( /* [in] */ ULONG ulProgress, /* [in] */ ULONG ulProgressMax, /* [in] */ ULONG ulStatusCode, /* [in] */ LPCWSTR szStatusText); virtual STDMETHODIMP OnStopBinding( /* [in] */ HRESULT hresult, /* [in] */ LPCWSTR szError); virtual STDMETHODIMP GetBindInfo( /* [out] */ DWORD *grfBINDINFOF, /* [unique][out][in] */ BINDINFO *pbindinfo); virtual STDMETHODIMP OnDataAvailable( /* [in] */ DWORD grfBSCF, /* [in] */ DWORD dwSize, /* [in] */ FORMATETC *pformatetc, /* [in] */ STGMEDIUM *pstgmed); virtual STDMETHODIMP OnObjectAvailable( /* [in] */ REFIID riid, /* [iid_is][in] */ IUnknown *punk); /* *** IHttpNegotiate *** */ virtual STDMETHODIMP BeginningTransaction(LPCWSTR szURL, LPCWSTR szHeaders, DWORD dwReserved, LPWSTR __RPC_FAR *pszAdditionalHeaders); virtual STDMETHODIMP OnResponse(DWORD dwResponseCode, LPCWSTR szResponseHeaders, LPCWSTR szRequestHeaders, LPWSTR *pszAdditionalRequestHeaders); // IMarshal methods STDMETHODIMP GetUnmarshalClass(REFIID riid,void *pvInterface, DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,CLSID *pCid); STDMETHODIMP GetMarshalSizeMax(REFIID riid,void *pvInterface, DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,DWORD *pSize); STDMETHODIMP MarshalInterface(IStream *pistm,REFIID riid, void *pvInterface,DWORD dwDestContext, void *pvDestContext,DWORD mshlflags); STDMETHODIMP UnmarshalInterface(IStream *pistm,REFIID riid,void ** ppvObj); STDMETHODIMP ReleaseMarshalData(IStream *pStm); STDMETHODIMP DisconnectObject(DWORD dwReserved); // helper methods STDMETHODIMP _FreeHeadersAndPostData(); BOOL _CanMarshalIID(REFIID riid); HRESULT _ValidateMarshalParams(REFIID riid,void *pvInterface, DWORD dwDestContext,void *pvDestContext,DWORD mshlflags); }; // : // private flags between shdocvw and mshtml // -> should be done via bind context // #define BINDF_INLINESGETNEWESTVERSION 0x10000000 #define BINDF_INLINESRESYNCHRONIZE 0x20000000 #define BINDF_CONTAINER_NOWRITECACHE 0x40000000 // global helper functions BOOL fOnProxy(); HRESULT BuildBindInfo(DWORD *grfBINDF,BINDINFO *pbindinfo,HGLOBAL hszPostData, DWORD cbPostData, BOOL bFrameIsOffline, BOOL bFrameIsSilent, BOOL bHyperlink, LPUNKNOWN pUnkForRelease); HRESULT BuildAdditionalHeaders(LPCTSTR pszOurExtraHeaders,LPCWSTR * ppwzCombinedHeadersOut); HRESULT CStubBindStatusCallback_Create(LPCWSTR pwzHeaders, LPCBYTE pPostData, DWORD cbPostData, VARIANT_BOOL bFrameIsOffline, VARIANT_BOOL bFrameIsSilent,BOOL bHyperlink, DWORD grBindFlags, CStubBindStatusCallback ** ppBindStatusCallback); HRESULT GetHeadersAndPostData(IBindStatusCallback * pBindStatusCallback, LPTSTR * ppszHeaders, STGMEDIUM * pstgPostData, DWORD * pdwPostData, BOOL * pfUseCache); HRESULT GetTopLevelBindStatusCallback(IServiceProvider * psp, IBindStatusCallback ** ppBindStatusCallback); HRESULT GetTopLevelPendingBindStatusCallback(IServiceProvider * psp, IBindStatusCallback ** ppBindStatusCallback); #endif // _BINDCB_H_