|
|
#ifndef _BASESB2_H
#define _BASESB2_H
#include "iface.h"
#include "track.h"
#include "fldset.h"
#include <vervec.h>
#include <iethread.h>
#include <profsvc.h>
#include "browsext.h"
#include "airesize.h"
// this is used to identify the top frame browsers dwBrowserIndex
#define BID_TOPFRAMEBROWSER ((DWORD)-1)
void IECleanUpAutomationObject(void);
#define CBASEBROWSER CBaseBrowser2
class CBaseBrowser2 : public CAggregatedUnknown , public IShellBrowser , public IBrowserService3 , public IServiceProvider , public IOleCommandTarget , public IOleContainer , public IOleInPlaceUIWindow , public IAdviseSink , public IDropTarget , public IInputObjectSite , public IDocNavigate , public IPersistHistory , public IInternetSecurityMgrSite , public IVersionHost , public IProfferServiceImpl , public ITravelLogClient , public ITravelLogClient2 , public ITridentService2 , public IShellBrowserService , public IInitViewLinkedWebOC , public INotifyAppStart { public: // IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void ** ppvObj) {return CAggregatedUnknown::QueryInterface(riid, ppvObj);}; STDMETHODIMP_(ULONG) AddRef(void) { return CAggregatedUnknown::AddRef();}; STDMETHODIMP_(ULONG) Release(void) { return CAggregatedUnknown::Release();};
// IOleWindow
STDMETHODIMP GetWindow(HWND * lphwnd); STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode); // IShellBrowser (same as IOleInPlaceFrame)
STDMETHODIMP InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths); STDMETHODIMP SetMenuSB(HMENU hmenuShared, HOLEMENU holemenu, HWND hwnd); STDMETHODIMP RemoveMenusSB(HMENU hmenuShared); STDMETHODIMP SetStatusTextSB(LPCOLESTR lpszStatusText); STDMETHODIMP EnableModelessSB(BOOL fEnable); STDMETHODIMP TranslateAcceleratorSB(LPMSG lpmsg, WORD wID); STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wFlags); STDMETHODIMP GetViewStateStream(DWORD grfMode, LPSTREAM *ppStrm) {return E_NOTIMPL; }; STDMETHODIMP GetControlWindow(UINT id, HWND * lphwnd); STDMETHODIMP SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret); STDMETHODIMP QueryActiveShellView(struct IShellView ** ppshv); STDMETHODIMP OnViewWindowActive(struct IShellView * ppshv); STDMETHODIMP SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags);
// IOleInPlaceUIWindow (also IOleWindow)
STDMETHODIMP GetBorder(LPRECT lprectBorder); STDMETHODIMP RequestBorderSpace(LPCBORDERWIDTHS pborderwidths); STDMETHODIMP SetBorderSpace(LPCBORDERWIDTHS pborderwidths); STDMETHODIMP SetActiveObject(IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName);
// IOleCommandTarget
STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext); STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut);
// IOleContainer
STDMETHODIMP ParseDisplayName(IBindCtx *pbc, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut); STDMETHODIMP EnumObjects(DWORD grfFlags, IEnumUnknown **ppenum); STDMETHODIMP LockContainer( BOOL fLock);
// IBrowserService
STDMETHODIMP GetParentSite(struct IOleInPlaceSite** ppipsite); STDMETHODIMP SetTitle(IShellView *psv, LPCWSTR pszName); STDMETHODIMP GetTitle(IShellView *psv, LPWSTR pszName, DWORD cchName); STDMETHODIMP GetOleObject(struct IOleObject** ppobjv);
STDMETHODIMP GetTravelLog(ITravelLog **pptl); STDMETHODIMP ShowControlWindow(UINT id, BOOL fShow); STDMETHODIMP IsControlWindowShown(UINT id, BOOL *pfShown); STDMETHODIMP IEGetDisplayName(LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags); STDMETHODIMP IEParseDisplayName(UINT uiCP, LPCWSTR pwszPath, LPITEMIDLIST * ppidlOut); STDMETHODIMP DisplayParseError(HRESULT hres, LPCWSTR pwszPath); STDMETHODIMP NavigateToPidl(LPCITEMIDLIST pidl, DWORD grfHLNF); STDMETHODIMP SetNavigateState(BNSTATE bnstate); STDMETHODIMP GetNavigateState(BNSTATE *pbnstate); STDMETHODIMP UpdateWindowList(void); STDMETHODIMP UpdateBackForwardState(void); STDMETHODIMP NotifyRedirect(IShellView* psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse); STDMETHODIMP SetFlags(DWORD dwFlags, DWORD dwFlagMask); STDMETHODIMP GetFlags(DWORD *pdwFlags); STDMETHODIMP CanNavigateNow(void); STDMETHODIMP GetPidl(LPITEMIDLIST *ppidl); STDMETHODIMP SetReferrer(LPITEMIDLIST pidl); STDMETHODIMP_(DWORD) GetBrowserIndex(void); STDMETHODIMP GetBrowserByIndex(DWORD dwID, IUnknown **ppunk); STDMETHODIMP GetHistoryObject(IOleObject **ppole, IStream **ppstm, IBindCtx **ppbc); STDMETHODIMP SetHistoryObject(IOleObject *pole, BOOL fIsLocalAnchor); STDMETHODIMP CacheOLEServer(IOleObject *pole); STDMETHODIMP GetSetCodePage(VARIANT* pvarIn, VARIANT* pvarOut); STDMETHODIMP OnHttpEquiv(IShellView* psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut); STDMETHODIMP GetPalette( HPALETTE * hpal ); STDMETHODIMP RegisterWindow(BOOL fUnregister, int swc) {return E_NOTIMPL;} STDMETHODIMP_(LRESULT) WndProcBS(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); STDMETHODIMP OnSize(WPARAM wParam); STDMETHODIMP OnCreate(LPCREATESTRUCT pcs); STDMETHODIMP_(LRESULT) OnCommand(WPARAM wParam, LPARAM lParam); STDMETHODIMP OnDestroy(); STDMETHODIMP ReleaseShellView(); STDMETHODIMP ActivatePendingView(); STDMETHODIMP_(LRESULT) OnNotify(NMHDR * pnm); STDMETHODIMP OnSetFocus(); STDMETHODIMP OnFrameWindowActivateBS(BOOL fActive); STDMETHODIMP SetTopBrowser(); STDMETHODIMP UpdateSecureLockIcon(int eSecureLock); STDMETHODIMP Offline(int iCmd); STDMETHODIMP SetActivateState(UINT uActivate) { _bbd._uActivateState = uActivate; return S_OK;}; STDMETHODIMP AllowViewResize(BOOL f) { HRESULT hres = _fDontResizeView ? S_FALSE : S_OK; _fDontResizeView = !BOOLIFY(f); return hres;}; STDMETHODIMP InitializeDownloadManager(); STDMETHODIMP InitializeTransitionSite(); STDMETHODIMP CreateViewWindow(IShellView* psvNew, IShellView* psvOld, LPRECT prcView, HWND* phwnd); STDMETHODIMP GetFolderSetData(struct tagFolderSetData*) { ASSERT(0); return E_NOTIMPL;}; STDMETHODIMP CreateBrowserPropSheetExt(REFIID, void **) { ASSERT(0); return E_NOTIMPL;}; STDMETHODIMP GetBaseBrowserData( LPCBASEBROWSERDATA* ppbd ) { *ppbd = &_bbd; return S_OK; }; STDMETHODIMP_(LPBASEBROWSERDATA) PutBaseBrowserData() { return &_bbd; };
STDMETHODIMP SetAsDefFolderSettings() { TraceMsg(TF_ERROR, "CBaseBrowser2::SetAsDefFolderSettings called, returned E_NOTIMPL"); return E_NOTIMPL;}; STDMETHODIMP GetViewRect(RECT* prc); STDMETHODIMP GetViewWindow(HWND * phwndView); STDMETHODIMP InitializeTravelLog(ITravelLog* ptl, DWORD dw); STDMETHODIMP _Initialize(HWND hwnd, IUnknown *pauto);
// ITravelLogClient
STDMETHODIMP FindWindowByIndex(DWORD dwID, IUnknown ** ppunk); STDMETHODIMP GetWindowData(LPWINDOWDATA pWinData); STDMETHODIMP LoadHistoryPosition(LPOLESTR pszUrlLocation, DWORD dwCookie);
// ITridentService
STDMETHODIMP FireBeforeNavigate2(IDispatch * pDispatch, LPCTSTR lpszUrl, DWORD dwFlags, LPCTSTR lpszFrameName, LPBYTE pPostData, DWORD cbPostData, LPCTSTR lpszHeaders, BOOL fPlayNavSound, BOOL * pfCancel); STDMETHODIMP FireNavigateComplete2(IHTMLWindow2 * pHTMLWindow2, DWORD dwFlags); STDMETHODIMP FireDownloadBegin(); STDMETHODIMP FireDownloadComplete(); STDMETHODIMP FireDocumentComplete(IHTMLWindow2 * pHTMLWindow2, DWORD dwFlags);
STDMETHODIMP UpdateDesktopComponent(IHTMLWindow2 * pHTMLWindow); STDMETHODIMP GetPendingUrl(BSTR * pbstrPendingUrl); STDMETHODIMP ActiveElementChanged(IHTMLElement * pHTMLElement); STDMETHODIMP GetUrlSearchComponent(BSTR * pbstrSearch); STDMETHODIMP IsErrorUrl(LPCTSTR lpszUrl, BOOL *pfIsError);
STDMETHOD(FireNavigateError)(IHTMLWindow2 * pHTMLWindow2, DWORD dwStatusCode, BOOL * pfCancel) { ASSERT(0); return E_NOTIMPL; }
// ITridentService2
//
STDMETHODIMP AttachMyPics(void *pDoc2, void **ppMyPics); STDMETHODIMP_(BOOL) ReleaseMyPics(void *pMyPics); STDMETHODIMP InitAutoImageResize(); STDMETHODIMP UnInitAutoImageResize(); STDMETHODIMP IsGalleryMeta(BOOL bFlag, void *pMyPics); STDMETHODIMP EmailPicture(BSTR bstrURL);
STDMETHODIMP FireNavigateError(IHTMLWindow2 * pHTMLWindow2, BSTR bstrURL, BSTR bstrTargetFrameName, DWORD dwStatusCode, BOOL * pfCancel);
STDMETHODIMP FirePrintTemplateEvent(IHTMLWindow2 * pHTMLWindow2, DISPID dispidPrintEvent); STDMETHODIMP FireUpdatePageStatus(IHTMLWindow2 * pHTMLWindow2, DWORD nPage, BOOL fDone); STDMETHODIMP FirePrivacyImpactedStateChange(BOOL bPrivacyImpacted);
STDMETHODIMP_(UINT) _get_itbLastFocus() { ASSERT(0); return ITB_VIEW; }; STDMETHODIMP _put_itbLastFocus(UINT itbLastFocus) { return E_NOTIMPL; };
// IShellBrowserService
//
STDMETHODIMP GetPropertyBag(DWORD dwFlags, REFIID riid, void** ppv) {ASSERT(0); return E_NOTIMPL;} // see _UIActivateView, below
// BEGIN REVIEW: review names and need of each.
//
// this first set could be basebrowser only members. no one overrides
STDMETHODIMP _CancelPendingNavigationAsync() ; STDMETHODIMP _CancelPendingView() ; STDMETHODIMP _MaySaveChanges() ; STDMETHODIMP _PauseOrResumeView( BOOL fPaused) ; STDMETHODIMP _DisableModeless() ; // rethink these... are all of these necessary?
STDMETHODIMP _NavigateToPidl( LPCITEMIDLIST pidl, DWORD grfHLNF, DWORD dwFlags); STDMETHODIMP _TryShell2Rename( IShellView* psv, LPCITEMIDLIST pidlNew); STDMETHODIMP _SwitchActivationNow( );
// this belongs with the toolbar set.
STDMETHODIMP _ExecChildren(IUnknown *punkBar, BOOL fBroadcast, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut); STDMETHODIMP _SendChildren(HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam);
STDMETHODIMP _GetViewBorderRect(RECT* prc); STDMETHODIMP _UpdateViewRectSize(); STDMETHODIMP _ResizeNextBorder(UINT itb); STDMETHODIMP _ResizeView();
// Notes: Only CDesktopBrowser may sublcass this.
STDMETHODIMP _GetEffectiveClientArea(LPRECT lprectBorder, HMONITOR hmon);
//END REVIEW:
// CDesktopBrowser accesses CCommonBrowser implementations of these:
STDMETHODIMP_(IStream*) v_GetViewStream(LPCITEMIDLIST pidl, DWORD grfMode, LPCWSTR pwszName) { ASSERT(FALSE); return NULL; } STDMETHODIMP_(LRESULT) ForwardViewMsg(UINT uMsg, WPARAM wParam, LPARAM lParam) { ASSERT(FALSE); return 0; } STDMETHODIMP SetAcceleratorMenu(HACCEL hacc) { ASSERT(FALSE); return E_NOTIMPL; } STDMETHODIMP_(int) _GetToolbarCount(THIS) { ASSERT(FALSE); return 0; } STDMETHODIMP_(LPTOOLBARITEM) _GetToolbarItem(THIS_ int itb) { ASSERT(FALSE); return NULL; } STDMETHODIMP _SaveToolbars(IStream* pstm) { ASSERT(FALSE); return E_NOTIMPL; } STDMETHODIMP _LoadToolbars(IStream* pstm) { ASSERT(FALSE); return E_NOTIMPL; } STDMETHODIMP _CloseAndReleaseToolbars(BOOL fClose) { ASSERT(FALSE); return E_NOTIMPL; } STDMETHODIMP v_MayGetNextToolbarFocus(LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM * pptbi, HWND * phwnd) { ASSERT(FALSE); return E_NOTIMPL; }; STDMETHODIMP _ResizeNextBorderHelper(UINT itb, BOOL bUseHmonitor) { ASSERT(FALSE); return E_NOTIMPL; } STDMETHODIMP_(UINT) _FindTBar(IUnknown* punkSrc) { ASSERT(FALSE); return (UINT)-1; }; STDMETHODIMP _SetFocus(LPTOOLBARITEM ptbi, HWND hwnd, LPMSG lpMsg) { ASSERT(FALSE); return E_NOTIMPL; } STDMETHODIMP v_MayTranslateAccelerator(MSG* pmsg) { ASSERT(FALSE); return E_NOTIMPL; } STDMETHODIMP _GetBorderDWHelper(IUnknown* punkSrc, LPRECT lprectBorder, BOOL bUseHmonitor) { ASSERT(FALSE); return E_NOTIMPL; }
// CShellBrowser overrides this.
STDMETHODIMP v_CheckZoneCrossing(LPCITEMIDLIST pidl) {return S_OK;};
// IServiceProvider
STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void ** ppvObj);
// IAdviseSink
STDMETHODIMP_(void) OnDataChange(FORMATETC *, STGMEDIUM *); STDMETHODIMP_(void) OnViewChange(DWORD dwAspect, LONG lindex); STDMETHODIMP_(void) OnRename(IMoniker *); STDMETHODIMP_(void) OnSave(); STDMETHODIMP_(void) OnClose();
// IDropTarget ***
STDMETHODIMP DragEnter(IDataObject *pdtobj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); STDMETHODIMP DragLeave(void); STDMETHODIMP Drop(IDataObject *pdtobj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
// IInputObjectSite
STDMETHODIMP OnFocusChangeIS(IUnknown* punkSrc, BOOL fSetFocus);
// IDocNavigate
STDMETHODIMP OnReadyStateChange(IShellView* psvSource, DWORD dwReadyState); STDMETHODIMP get_ReadyState(DWORD * pdwReadyState);
// IPersist
STDMETHODIMP GetClassID(CLSID *pclsid);
// IPersistHistory
STDMETHODIMP LoadHistory(IStream *pStream, IBindCtx *pbc); STDMETHODIMP SaveHistory(IStream *pStream); STDMETHODIMP SetPositionCookie(DWORD dwPositionCookie); STDMETHODIMP GetPositionCookie(DWORD *pdwPositioncookie);
// IInternetSecurityMgrSite
// STDMETHODIMP GetWindow(HWND * lphwnd) { return IOleWindow::GetWindow(lphwnd); }
STDMETHODIMP EnableModeless(BOOL fEnable) { return EnableModelessSB(fEnable); }
// IVersionHost
STDMETHODIMP QueryUseLocalVersionVector( BOOL *fUseLocal); STDMETHODIMP QueryVersionVector( IVersionVector *pVersion);
// ITravelLogClient2
STDMETHODIMP GetDummyWindowData(LPWSTR pszUrl, LPWSTR pszTitle, LPWINDOWDATA pWinData);
// This is the QueryInterface the aggregator implements
virtual HRESULT v_InternalQueryInterface(REFIID riid, void ** ppvObj);
// IInitViewLinkedWebOC methods
STDMETHODIMP SetViewLinkedWebOC(BOOL bValue) { _fIsViewLinkedWebOC = bValue; return S_OK; };
STDMETHODIMP IsViewLinkedWebOC(BOOL* pbValue) { ASSERT(pbValue);
*pbValue = _fIsViewLinkedWebOC; return S_OK; };
STDMETHODIMP SetViewLinkedWebOCFrame(IDispatch * pDisp) { HRESULT hr = E_FAIL;
ASSERT(pDisp);
ATOMICRELEASE(_pDispViewLinkedWebOCFrame);
hr = IUnknown_QueryService(pDisp, SID_SWebBrowserApp, IID_PPV_ARG(IWebBrowser2, &_pDispViewLinkedWebOCFrame));
if (FAILED(hr)) { _fIsViewLinkedWebOC = FALSE; }
return hr; };
STDMETHODIMP GetViewLinkedWebOCFrame(IDispatch** ppDisp) { ASSERT(_fIsViewLinkedWebOC); ASSERT(_pDispViewLinkedWebOCFrame); ASSERT(ppDisp);
*ppDisp = _pDispViewLinkedWebOCFrame; _pDispViewLinkedWebOCFrame->AddRef();
return S_OK; };
STDMETHODIMP SetFrameName(BSTR bstrFrameName);
// INotifyAppStart
STDMETHODIMP AppStarting(void); STDMETHODIMP AppStarted(void);
static BSTR GetHTMLWindowUrl(IHTMLWindow2 * pHTMLWindow); static LPITEMIDLIST PidlFromUrl(BSTR bstrUrl); protected:
// "protected" so derived classes can construct/destruct us too
CBaseBrowser2(IUnknown* punkAgg); virtual ~CBaseBrowser2(); friend HRESULT CBaseBrowser2_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi);
// topmost CBaseBrowser2 in a frameset (IE3/AOL/CIS/VB)
virtual void _OnNavigateComplete(LPCITEMIDLIST pidl, DWORD grfHLNF); virtual HRESULT _CheckZoneCrossing(LPCITEMIDLIST pidl); virtual STDMETHODIMP _PositionViewWindow(HWND hwnd, LPRECT prc); void _PositionViewWindowHelper(HWND hwnd, LPRECT prc); virtual LRESULT _DefWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); virtual void _ViewChange(DWORD dwAspect, LONG lindex); virtual void _UpdateBackForwardState(); virtual BOOL v_OnSetCursor(LPARAM lParam); virtual STDMETHODIMP v_ShowHideChildWindows(BOOL fChildOnly); virtual void v_PropagateMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fSend); virtual HRESULT _ShowBlankPage(LPCTSTR pszAboutUrl, LPCITEMIDLIST pidlIntended); // ViewStateStream related
HRESULT _CheckInCacheIfOffline(LPCITEMIDLIST pidl, BOOL fIsAPost); void _CreateShortcutOnDesktop(IUnknown *pUnk, BOOL fUI); void _AddToFavorites(LPCITEMIDLIST pidl, LPCTSTR pszTitle, BOOL fDisplayUI);
// to avoid having to pass hwnd on every message to WndProc, set it once
void _SetWindow(HWND hwnd) { _bbd._hwnd = hwnd; } void _DoOptions(VARIANT* pvar); LRESULT _OnGoto(void); void _NavigateToPidlAsync(LPITEMIDLIST pidl, DWORD dwSBSP, BOOL fDontCallCancel = FALSE); BOOL _CanNavigate(void);
// inline so that lego will get the right opt.
void _PreActivatePendingViewAsync(void) { _StopAsyncOperation(); };
BOOL _ActivatePendingViewAsync(void); void _FreeQueuedPidl(LPITEMIDLIST* ppidl); void _StopAsyncOperation(void); void _MayUnblockAsyncOperation(); BOOL _PostAsyncOperation(UINT uAction); LRESULT _SendAsyncOperation(UINT uAction); void _SendAsyncNavigationMsg(VARIANTARG *pvarargIn); HRESULT _OnCoCreateDocument(VARIANTARG *pvarargOut); void _NotifyCommandStateChange();
BOOL _IsViewMSHTML(IShellView * psv);
BOOL _ActivateView(BSTR bstrUrl, LPITEMIDLIST pidl, DWORD dwFlags, BOOL fIsErrorUrl);
HRESULT _GetWebBrowserForEvt(IDispatch * pDispatch, IWebBrowser2 ** ppWebBrowser);
void _Exec_psbMixedZone();
#ifdef TEST_AMBIENTS
BOOL _LocalOffline(int iCmd); BOOL _LocalSilent(int iCmd); #endif // TEST_AMBIENTS
#define NAVTYPE_ShellNavigate 0x01
#define NAVTYPE_PageIsChanging 0x02
#define NAVTYPE_SiteIsChanging 0x04
void _EnableStop(BOOL fEnable); LRESULT _OnInitMenuPopup(HMENU hmenuPopup, int nIndex, BOOL fSystemMenu); HRESULT _updateNavigationUI(); HRESULT _setDescendentNavigate(VARIANTARG *pvarargIn); void _UpdateBrowserState(LPCITEMIDLIST pidl); void _UpdateDocHostState(LPITEMIDLIST pidl, BOOL fIsErrorUrl) const; HRESULT _FireBeforeNavigateEvent(LPCITEMIDLIST pidl, BOOL* pfUseCache); LPITEMIDLIST _GetPidlForDisplay(BSTR bstrUrl, BOOL * pfIsErrorUrl = NULL);
HRESULT _OpenNewFrame(LPITEMIDLIST pidlNew, UINT wFlags); STDMETHODIMP _UIActivateView(UINT uState); HRESULT _CancelPendingNavigation(BOOL fDontReleaseState = FALSE); void _StopCurrentView(void);
void _MayTrackClickStream(LPITEMIDLIST pidlThis); // (peihwal)
STDMETHODIMP _OnFocusChange(UINT itb);
void _RegisterAsDropTarget(); void _UnregisterAsDropTarget();
HRESULT _InitDocHost(IWebBrowser2 * pWebBrowser);
enum BrowserPaletteType { BPT_DeferPaletteSupport = 0, // we don't think we own the palette
BPT_UnknownDisplay, // need to decide if we need a palette
BPT_DisplayViewChanged, // BPT_UnknownDisplay handling notify
BPT_UnknownPalette, // need to decide what palette to use
BPT_PaletteViewChanged, // BPT_UnknownPalette handling notify
BPT_Normal, // handle WM_QUERYNEWPALETTE ourselves
BPT_ShellView, // forward WM_QUERYNEWPALETTE to view
BPT_NotPalettized // not a palettized display, do nothing
}; void _ColorsDirty(BrowserPaletteType bptNew); void _DisplayChanged(WPARAM wParam, LPARAM lParam); HRESULT _UpdateBrowserPaletteInPlace(LOGPALETTE *plp); void _RealizeBrowserPalette(BOOL fBackground); virtual void _PaletteChanged(WPARAM wParam, LPARAM lParam); BOOL _QueryNewPalette();
void _DLMDestroy(void); void _DLMUpdate(MSOCMD* prgCmd); void _DLMRegister(IUnknown* punk);
void CreateNewSyncShellView( void );
void _UpdateTravelLog(BOOL fForceUpdate = FALSE);
virtual BOOL _HeyMoe_IsWiseGuy(void) {return FALSE;}
void _ShowIEHardNavWarning(); BOOL _CanShowModalDialogNow();
IBrowserService2* _pbsOuter; IBrowserService3* _pbsOuter3; IShellBrowser* _psbOuter; IServiceProvider* _pspOuter; IDockingWindowSite* _pdwsOuter; // The following are intercepted by CCommonBrowser, but we don't call 'em
//IOleCommandTarget* _pctOuter;
//IInputObjectSite* _piosOuter;
BASEBROWSERDATA _bbd; IUnknown *_pauto;
BrowserPaletteType _bptBrowser; HPALETTE _hpalBrowser;
IViewObject *_pvo; // view object implementation on the shell view
UINT _cRefUIActivateSV;
DWORD _dwBrowserIndex; DWORD _dwReadyState;
DWORD _dwReadyStateCur; LPWSTR _pszTitleCur; IDropTarget * _pdtView; // Pointer to _bbd._psv's IDropTarget interface
IOleObject * _poleHistory; IStream * _pstmHistory; IBindCtx * _pbcHistory; IHTMLDocument2 * _pHTMLDocument; IPersistHistory * _pphHistory;
IOleInPlaceActiveObject *_pact; // for UIWindow
IClassFactory* _pcfHTML; // cached/locked class factory
DWORD _dwReadyStatePending; LPWSTR _pszTitlePending; DWORD _grfHLNFPending; HDPA _hdpaDLM; // downloading object (for DLM)
BOOL _cp; // current codepage
//
// NOTES: Currently, we support only one pending navigation.
// If we want to support queued navigation, we need to turn
// following two variables into a queue. (SatoNa)
//
DWORD _uActionQueued; // queued action
LPITEMIDLIST _pidlQueued; // pidl to go asynchronously
DWORD _dwSBSPQueued; // grfHLNF to go asynchronously
UINT _cRefCannotNavigate; // Increment when we can navigate
RECT _rcBorderDoc; // for UIWindow
DWORD _dwStartingAppTick;
BITBOOL _fDontResizeView : 1; // Don't resize _hwndView
BITBOOL _fNavigate:1; // are we navigating?
BITBOOL _fDescendentNavigate:1; // are our descendents navigating?
BITBOOL _fDownloadSet:1; // did we invoke download animation ?
BITBOOL _fNoDragDrop:1; // TRUE iff we want to register for drops
BITBOOL _fRegisteredDragDrop:1; // TRUE iff we have registered for drops
BITBOOL _fNavigatedToBlank: 1; // Has called _ShowBlankPage once.
BITBOOL _fAsyncNavigate:1; // Ignore sync-hack-bug-fix
BITBOOL _fPausedByParent :1; // Interaction paused by parent
BITBOOL _fDontAddTravelEntry:1; BITBOOL _fIsLocalAnchor:1; BITBOOL _fGeneratedPage:1; // trident told us that the page is generated.
BITBOOL _fOwnsPalette:1; // does the browser own the palette ? (did we get QueryNewPalette ..)
BITBOOL _fUsesPaletteCommands : 1; // if we are using a separate communication with trident for palette commands
BITBOOL _fCreateViewWindowPending:1; BITBOOL _fReleasingShellView:1; BITBOOL _fDeferredUIDeactivate:1; BITBOOL _fDeferredSelfDestruction:1; BITBOOL _fActive:1; // remember if the frame is active or not (WM_ACTIVATE)
BITBOOL _fUIActivateOnActive:1; // TRUE iff we have a bending uiactivate
BITBOOL _fInQueryStatus:1; BITBOOL _fCheckedDesktopComponentName:1; BITBOOL _fInDestroy:1; // being destroyed
BITBOOL _fDontUpdateTravelLog:1; BITBOOL _fHtmlNavCanceled:1; BITBOOL _fDontShowNavCancelPage:1;
BITBOOL _fHadBeforeNavigate :1; BITBOOL _fHadNavigateComplete :1; BITBOOL _fInvokeDefBrowserOnNewWindow:1;
enum DOCFLAGS { DOCFLAG_DOCCANNAVIGATE = 0x00000001, // The document knows how to navigate
DOCFLAG_NAVIGATEFROMDOC = 0x00000002, // Document called Navigate
DOCFLAG_SETNAVIGATABLECODEPAGE = 0x00000004, // GetBindInfo should call NavigatableCodepage
};
DWORD _dwDocFlags; // for IDropTarget
DWORD _dwDropEffect;
#ifdef DEBUG
BOOL _fProcessed_WM_CLOSE; // TRUE iff WM_CLOSE processed
BOOL _fMightBeShuttingDown; // TRUE if we might be shutting down (recieved a WM_QUERYENDSESSION || (WM_ENDSESSION w/ wParam == TRUE))
#endif
// friend CIEFrameAuto;
interface IShellHTMLWindowSupport *_phtmlWS; IUrlHistoryStg *_pIUrlHistoryStg; // pointer to url history storage object
ITravelLogStg *_pITravelLogStg; // exposed travel log object
ITargetFrame2 *_ptfrm; // Cached History IShellFolder
IUnknown *_punkSFHistory;
// what SSL icon to show
int _eSecureLockIconPending; // Support for OLECMDID_HTTPEQUIV (Client Pull, PICS, etc)
#ifdef NEVER
HRESULT _HandleHttpEquiv (VARIANT *pvarargIn, VARIANT *pvarargOut, BOOL fDone); HRESULT _KillRefreshTimer( void ); VOID _OnRefreshTimer(void); void _StartRefreshTimer(void);
// equiv handlers we know about
friend HRESULT _HandleRefresh (HWND hwnd, WCHAR *pwz, WCHAR *pwzColon, CBaseBrowser2 *pbb, BOOL fDone, LPARAM lParam); #endif
#ifdef NEVER
friend VOID CALLBACK _RefreshTimerProc (HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
// Client Pull values
WCHAR *_pwzRefreshURL; int _iRefreshTimeout; BOOL _iRefreshTimeoutSet:1; INT_PTR _iRefreshTimerID; #endif
#ifdef MESSAGEFILTER
// COM Message filter used to help dispatch TIMER messages during OLE operations.
LPMESSAGEFILTER _lpMF; #endif
CUrlTrackingStg * _ptracking;
CAutoImageResize *_pAIResize;
// _fTopBrowser vs. _fNoTopLevelBrowser:
// _fTopBrowser: True means we are the top most browser, or a top most browser does not exist and we are acting like the top most browser.
// In the latter case, the immediate childern of our host will also act like top most browsers.
// _fNoTopLevelBrowser: This means that the top most item isn't one of our shell browsers, so it's immediate browser child
// will act like a top most browser.
//
// In normal cases, a shell browser (CShellBrowser, CDesktopBrowser, ...) is a top most browser
// with TRUE==_fTopBrowser and FALSE==_fNoTopLevelBrowser. It can have subframes that will have
// FALSE==_fTopBrowser and FALSE==_fNoTopLevelBrowser.
//
// The only time _fNoTopLevelBrowser is TRUE is if some other object (like Athena) hosts MSHTML directly
// which will prevent some shell browser from being top most. Since the HTML can have several frames,
// each will have TRUE==_fTopBrowser, so _fNoTopLevelBrowser will be set to TRUE to distinguish this case.
BOOL _fTopBrowser :1; // Should only be set via the _SetTopBrowser method
BOOL _fNoTopLevelBrowser :1; // TRUE iff the toplevel is a non-shell browser (Athena). Shell browsers include CDesktopBrowser, CShellBrowser, ...
BOOL _fHaveOldStatusText :1; WCHAR _szwOldStatusText[MAX_PATH];
FOLDERSETDATABASE _fldBase; // cache viewset results in here (used when navigating)
// Manages extended toolbar buttons and tools menu extensions for IE
IToolbarExt* _pToolbarExt;
LPITEMIDLIST _pidlBeforeNavigateEvent; // pidl refered to in BeforeNavigate2 event
// ViewLinkedWebOC variables
BOOL _fIsViewLinkedWebOC; // TRUE if an instance of the WebOC is a ViewLinked
IWebBrowser2* _pDispViewLinkedWebOCFrame; // The pDisp of the Frame of a ViewLinkedWebOC.
BOOL _fHadFirstBeforeNavigate; // TRUE if we have already skipped over the first ViewLinkedWebOC's
// BeforeNavigateEvent.
TCHAR _szViewLinkedWebOCFrameName[INTERNET_MAX_URL_LENGTH+1];
public:
// handling for plugUI shutdown
// need the hwnd for the lang change modal property sheet
static HDPA s_hdpaOptionsHwnd;
static void _SyncDPA(); static int CALLBACK _OptionsPropSheetCallback(HWND hwndDlg, UINT uMsg, LPARAM lParam);
private: HRESULT _AddFolderOptionsSheets(DWORD dwReserved, LPFNADDPROPSHEETPAGE pfnAddPropSheetPage, LPPROPSHEETHEADER ppsh); HRESULT _AddInternetOptionsSheets(DWORD dwReserved, LPFNADDPROPSHEETPAGE pfnAddPropSheetPage, LPPROPSHEETHEADER ppsh); HRESULT _ReplaceWithGoHome(LPCITEMIDLIST * ppidl, LPITEMIDLIST * ppidlFree);
// this is private! it should only be called by _NavigateToPidl
HRESULT _CreateNewShellViewPidl(LPCITEMIDLIST pidl, DWORD grfHLNF, DWORD fSBSP); HRESULT _CreateNewShellView(IShellFolder* psf, LPCITEMIDLIST pidl, DWORD grfHLNF); HRESULT _DismissFindDialog();
// Privacy state
HRESULT _UpdatePrivacyIcon(BOOL fSetNewState, BOOL fNewState); };
HRESULT _DisplayParseError(HWND hwnd, HRESULT hres, LPCWSTR pwszPath);
#endif // _BASESB2_H
|