Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

360 lines
13 KiB

// Copyright (c)1997-1999 Microsoft Corporation, All Rights Reserved
#ifndef _proxyframe_h_
#define _proxyframe_h_
#include <docobj.h>
#include <ocidl.h>
#include <WinINet.h>
#include "plgprot.h"
#include "dhtmledit.h"
// This was given in email from Josh Kaplan to Steve Isaac in response
// to what command is necessary so that Trident won't clear the undo
// stack on setAttribute calls. The command takes a BOOL -- True == good behavior
#define IDM_GOOD_UNDO_BEHAVIOR 6049
typedef struct _CommandMap
{
DHTMLEDITCMDID typeLibCmdID;
ULONG cmdID;
BOOL bOutParam;
} CommandMap;
#ifdef LATE_BIND_URLMON_WININET
typedef HRESULT (WINAPI *PFNCoInternetCombineUrl)(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
typedef HRESULT (WINAPI *PFNCoInternetParseUrl)(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
typedef HRESULT (WINAPI *PFNCreateURLMoniker)(LPMONIKER,LPCWSTR,LPMONIKER FAR*);
typedef HRESULT (WINAPI *PFNCoInternetGetSession)(DWORD,IInternetSession**,DWORD);
typedef HRESULT (WINAPI *PFNURLOpenBlockingStream)(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
typedef BOOL (WINAPI *PFNDeleteUrlCacheEntry)(LPCSTR);
typedef BOOL (WINAPI *PFNInternetCreateUrl)(LPURL_COMPONENTSA,DWORD,LPSTR,LPDWORD);
typedef BOOL (WINAPI *PFNInternetCrackURL)(LPCSTR,DWORD,DWORD,LPURL_COMPONENTSA);
#endif // LATE_BIND_URLMON_WININET
class CDHTMLEdProtocolInfo;
typedef CComObject<CDHTMLEdProtocolInfo> *PProtocolInfo;
class CDHTMLSafe;
typedef enum DENudgeDirection {
deNudgeUp = 8000,
deNudgeDown,
deNudgeLeft,
deNudgeRight,
};
class CProxyFrame : public IOleInPlaceFrame, public IOleCommandTarget,
public IBindStatusCallback, public IAuthenticate
{
public:
CProxyFrame(CDHTMLSafe* pCtl);
~CProxyFrame();
HRESULT Init(IUnknown* pUnk, IUnknown** ppUnkTriEdit);
HRESULT PreActivate();
HRESULT Activate();
void UIDeactivate();
HRESULT Close();
HRESULT LoadInitialDoc();
HRESULT LoadDocument(BSTR path, BOOL bfIsURL = FALSE);
HRESULT FilterSourceCode ( BSTR bsSourceIn, BSTR* pbsSourceOut );
HRESULT Print( BOOL bfWithUI );
HRESULT SaveDocument(BSTR path);
HRESULT SetContextMenu(LPVARIANT pVarMenuStrings, LPVARIANT pVarMenuStates);
HRESULT SetContextMenuSA(LPVARIANT pVarMenuStrings, LPVARIANT pVarMenuStates);
HRESULT SetContextMenuDispEx(LPVARIANT pVarMenuStrings, LPVARIANT pVarMenuStates);
HRESULT GetBrowseMode ( VARIANT_BOOL *pVal );
HRESULT SetBrowseMode ( VARIANT_BOOL newVal );
HRESULT GetDocumentTitle ( CComBSTR& bstrTitle );
HRESULT GetDivOnCr ( VARIANT_BOOL *pVal );
HRESULT SetDivOnCr ( VARIANT_BOOL newVal );
HRESULT GetBusy ( VARIANT_BOOL *pVal );
HRESULT RefreshDoc ( void );
HRESULT HrTridentSetPropBool(ULONG cmd, BOOL bVal);
HRESULT HrTridentGetPropBool(ULONG cmd, BOOL& bVal);
HRESULT HrMapCommand(DHTMLEDITCMDID typeLibCmdID, ULONG* cmdID, const GUID** ppguidCmdGroup, BOOL* bpInParam);
HRESULT HrExecCommand(const GUID* pguidCmdGroup, ULONG ucmdID, OLECMDEXECOPT cmdexecopt, VARIANT* pVarIn, VARIANT* pVarOut);
HRESULT HrMapExecCommand(DHTMLEDITCMDID deCommand, OLECMDEXECOPT cmdexecopt, VARIANT* pVarIn, VARIANT* pVarOut);
HRESULT HrExecGenericCommands(const GUID* pguidCmdGroup, ULONG cmdID, OLECMDEXECOPT cmdexecopt, LPVARIANT pVarInput, BOOL bOutParam);
HRESULT HrExecGetBlockFmtNames(LPVARIANT pVarInput);
HRESULT HrExecInsertTable(LPVARIANT pVarInput);
HRESULT HrExecGetColor(DHTMLEDITCMDID deCommand, ULONG ulMappedCommand, LPVARIANT pVarOutput);
HRESULT HrExecSetFontSize(LPVARIANT pVarInput);
HRESULT HrQueryStatus(const GUID* pguidCmdGroup, ULONG ucmdID, OLECMDF* cmdf);
HRESULT HrMapQueryStatus( DHTMLEDITCMDID ucmdID, DHTMLEDITCMDF* cmdf);
HRESULT HrGetDoc(IHTMLDocument2 **ppDoc);
HRESULT HrGetTableSafeArray(IDEInsertTableParam* pTable, LPVARIANT pVarIn);
HRESULT HrTranslateAccelerator(LPMSG lpmsg);
HRESULT HrHandleAccelerator(LPMSG lpmsg);
HRESULT HrNudge(DENudgeDirection dir);
HRESULT HrToggleAbsolutePositioned();
HRESULT HrHyperLink();
HRESULT HrIncreaseIndent();
HRESULT HrDecreaseIndent();
void UpdateObjectRects(void);
void SetParent ( HWND hwndControl );
void Show ( WPARAM nCmdShow );
LRESULT OnSetFocus(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
void OnReadyStateChanged(READYSTATE readyState);
inline CDHTMLSafe* GetControl() {
return m_pCtl;
};
inline BOOL IsCreated() {
return m_fCreated;
};
inline BOOL IsActivated() {
return m_fActivated;
};
inline SAFEARRAY* GetMenuStrings() {
return m_pMenuStrings;
};
inline SAFEARRAY* GetMenuStates() {
return m_pMenuStates;
};
HRESULT GetContainer ( LPOLECONTAINER* ppContainer );
HRESULT GetCurDocNameWOPath ( CComBSTR& bstrDocName );
HRESULT GetBaseURL ( CComBSTR& bstrBaseURL );
HRESULT SetBaseURL ( CComBSTR& bstrBaseURL );
HRESULT GetFilteredStream ( IStream** ppStream );
HRESULT GetSecurityURL (CComBSTR& bstrSecurityURL );
protected:
HRESULT HrSetRuntimeProperties();
HRESULT HrSetDocLoadedProperties();
HRESULT SetBaseURLFromBaseHref ( void );
HRESULT SetBaseURLFromCurDocPath ( BOOL bfIsURL );
HRESULT SetBaseURLFromURL ( const CComBSTR& bstrURL );
HRESULT SetBaseURLFromFileName ( const CComBSTR& bstrFName );
HRESULT SetBaseUrlFromFileUrlComponents ( URL_COMPONENTS & urlc );
HRESULT SetBaseUrlFromUrlComponents ( URL_COMPONENTS & urlc );
typedef enum TriEditState {
ESTATE_NOTCREATED = 0,
ESTATE_CREATED,
ESTATE_PREACTIVATING,
ESTATE_ACTIVATING,
ESTATE_ACTIVATED,
} TriEditState;
void ChangeState(TriEditState state) { m_state = state; }
inline TriEditState GetState() { return m_state; }
HRESULT GetSelectionPos ( LPPOINT lpWhere );
public: // properties
HRESULT HrSetPropActivateControls(BOOL activateControls);
HRESULT HrGetPropActivateControls(BOOL& activateControls);
HRESULT HrSetPropActivateApplets(BOOL activateApplets);
HRESULT HrGetPropActivateApplets(BOOL& activateApplets);
HRESULT HrSetPropActivateDTCs(BOOL activateDTCs);
HRESULT HrGetPropActivateDTCs(BOOL& activateDTCs);
HRESULT HrSetPropShowAllTags(BOOL showAllTags);
HRESULT HrGetPropShowAllTags(BOOL& showAllTags);
HRESULT HrSetPropShowBorders(BOOL showBorders);
HRESULT HrGetPropShowBorders(BOOL& showBorders);
HRESULT HrSetDisplay3D(BOOL bVal);
HRESULT HrGetDisplay3D(BOOL& bVal);
HRESULT HrSetScrollbars(BOOL bVal);
HRESULT HrGetScrollbars(BOOL& bVal);
HRESULT HrSetDisplayFlatScrollbars(BOOL bVal);
HRESULT HrGetDisplayFlatScrollbars(BOOL& bVal);
HRESULT HrSetDocumentHTML(BSTR bVal);
HRESULT HrGetDocumentHTML(BSTR* bVal);
HRESULT HrSetPreserveSource(BOOL bVal);
HRESULT HrGetPreserveSource(BOOL& bVal);
HRESULT HrSetAbsoluteDropMode(BOOL dropMode);
HRESULT HrGetAbsoluteDropMode(BOOL& dropMode);
HRESULT HrSetSnapToGrid(BOOL snapToGrid);
HRESULT HrGetSnapToGrid(BOOL& snapToGrid);
HRESULT HrSetSnapToGridX(LONG snapToGridX);
HRESULT HrGetSnapToGridX(LONG& snapToGridX);
HRESULT HrSetSnapToGridY(LONG snapToGridY);
HRESULT HrGetSnapToGridY(LONG& snapToGridY);
HRESULT HrGetIsDirty(BOOL& bVal);
HRESULT HrGetCurrentDocumentPath(BSTR* bVal);
// IBindStatusCallback trivial implementation, for synchronous transfer ONLY:
STDMETHOD(GetBindInfo)(DWORD*,BINDINFO*) { return E_NOTIMPL; }
STDMETHOD(OnStartBinding)(DWORD, IBinding*) { return S_OK; }
STDMETHOD(GetPriority)(LONG *pnPriority) { *pnPriority = THREAD_PRIORITY_NORMAL; return S_OK; }
STDMETHOD(OnProgress)(ULONG, ULONG, ULONG, LPCWSTR);
STDMETHOD(OnDataAvailable)(DWORD, DWORD, FORMATETC*, STGMEDIUM*) { return E_NOTIMPL; }
STDMETHOD(OnObjectAvailable)(REFIID, IUnknown*) { return E_NOTIMPL; }
STDMETHOD(OnLowResource)(DWORD) { return E_NOTIMPL; }
STDMETHOD(OnStopBinding)(HRESULT, LPCWSTR) { return S_OK; }
// IAuthenticate
STDMETHOD(Authenticate)(HWND *phwnd, LPWSTR *pszUserName, LPWSTR *pszPassword)
{ *phwnd = m_hWndObj; *pszUserName = NULL; *pszPassword = NULL; return S_OK; }
public:
//Shared IUnknown implementation
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//IOleInPlaceFrame implementation
STDMETHODIMP GetWindow(HWND *);
STDMETHODIMP ContextSensitiveHelp(BOOL);
STDMETHODIMP GetBorder(LPRECT);
STDMETHODIMP RequestBorderSpace(LPCBORDERWIDTHS);
STDMETHODIMP SetBorderSpace(LPCBORDERWIDTHS);
STDMETHODIMP SetActiveObject(LPOLEINPLACEACTIVEOBJECT
, LPCOLESTR);
STDMETHODIMP InsertMenus(HMENU, LPOLEMENUGROUPWIDTHS);
STDMETHODIMP SetMenu(HMENU, HOLEMENU, HWND);
STDMETHODIMP RemoveMenus(HMENU);
STDMETHODIMP SetStatusText(LPCOLESTR);
STDMETHODIMP EnableModeless(BOOL);
STDMETHODIMP TranslateAccelerator(LPMSG, WORD);
//IOleCommandTarget
STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds
, OLECMD prgCmds[], OLECMDTEXT *pCmdText);
STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID
, DWORD nCmdexecopt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
HRESULT OnTriEditEvent ( const GUID& iidEventInterface, DISPID dispid );
HWND GetDocWindow () { return m_hWndObj; }
HRESULT GetScrollPos ( LPPOINT lpPos );
HRESULT CheckCrossZoneSecurity ( BSTR url );
HRESULT CheckCrossZoneSecurityOfSelection ( void );
void ClearSFSRedirect ( void ) { m_bfSFSRedirect = FALSE; }
BOOL GetSFSRedirect ( void ) { return m_bfSFSRedirect; }
void ClearLoadingFlag ( void ) { m_bfIsLoading = FALSE; }
private:
HRESULT RegisterPluggableProtocol ( void );
HRESULT UnRegisterPluggableProtocol ( void );
HRESULT LoadBSTRDeferred ( BSTR bVal );
void AssureActivated ( void );
WCHAR* GetInitialHTML ( void );
void InitializeDocString ( void ) { m_bstrInitialDoc = GetInitialHTML (); }
BOOL IsMissingBackSlash ( BSTR path, BOOL bfIsURL );
HRESULT SetDirtyFlag ( BOOL bfMakeDirty );
#ifdef LATE_BIND_URLMON_WININET
BOOL DynLoadLibraries ( void );
void DynUnloadLibraries ( void );
#endif // LATE_BIND_URLMON_WININET
private:
ULONG m_cRef;
TriEditState m_state;
class CDHTMLSafe*m_pCtl; // back pointer to control
class CSite* m_pSite; // Site holding object
BOOL m_fCreated;
BOOL m_fActivated;
LPUNKNOWN m_pUnkTriEdit;
IOleInPlaceActiveObject *m_pIOleIPActiveObject;
HWND m_hWndObj; // Trident's window
READYSTATE m_readyState;
DWORD m_dwFilterFlags; // Flags to use for the next filter in
DWORD m_dwFilterOutFlags; // Flags used on the last filter out
SAFEARRAY* m_pMenuStrings;
SAFEARRAY* m_pMenuStates;
BOOL m_fActivateApplets; // takes affect at init only
BOOL m_fActivateControls; // takes affect at init only
BOOL m_fActivateDTCs; // takes affect at init only
BOOL m_fShowAllTags; // can be set anytime
BOOL m_fShowBorders; // can be set anytime
BOOL m_fDialogEditing; // takes affect at init only
BOOL m_fDisplay3D; // takes affect at init only
BOOL m_fScrollbars; // takes affect at init only
BOOL m_fDisplayFlatScrollbars; // takes affect at init only
BOOL m_fContextMenu; // takes affect at init only
BOOL m_fPreserveSource; // takes affect at init only
BOOL m_fAbsoluteDropMode;
BOOL m_fSnapToGrid;
LONG m_ulSnapToGridX;
LONG m_ulSnapToGridY;
CComBSTR m_bstrInitialDoc;
CComBSTR m_bstrCurDocPath;
CComBSTR m_bstrBaseURL;
VARIANT_BOOL m_vbBrowseMode;
PProtocolInfo m_pProtInfo;
WCHAR m_wszProtocol[16];
WCHAR m_wszProtocolPrefix[16];
BOOL m_bfIsURL;
CComBSTR m_bstrLoadText;
HWND m_hwndRestoreFocus;
VARIANT_BOOL m_vbUseDivOnCr;
BOOL m_bfIsLoading;
BOOL m_bfBaseURLFromBASETag;
BOOL m_bfPreserveDirtyFlagAcrossBrowseMode;
HRESULT m_hrDeferredLoadError;
BOOL m_bfModeSwitched;
BOOL m_bfReloadAttempted;
BOOL m_bfSFSRedirect;
#ifdef LATE_BIND_URLMON_WININET
HMODULE m_hUlrMon;
HMODULE m_hWinINet;
public:
PFNCoInternetCombineUrl m_pfnCoInternetCombineUrl;
PFNCoInternetParseUrl m_pfnCoInternetParseUrl;
PFNCreateURLMoniker m_pfnCreateURLMoniker;
PFNCoInternetGetSession m_pfnCoInternetGetSession;
PFNURLOpenBlockingStream m_pfnURLOpenBlockingStream;
PFNDeleteUrlCacheEntry m_pfnDeleteUrlCacheEntry;
PFNInternetCreateUrl m_pfnInternetCreateUrl;
PFNInternetCrackURL m_pfnInternetCrackUrl;
#endif // LATE_BIND_URLMON_WININET
};
#endif