Sweden-Number/dlls/shdocvw/shellbrowser.c

777 lines
21 KiB
C

/*
* Implementation of IShellBrowser interface
*
* Copyright 2011 Piotr Caban for CodeWeavers
*
* 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
*/
#include "wine/debug.h"
#include "shdocvw.h"
#include "shdeprecated.h"
#include "docobjectservice.h"
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
typedef struct {
IShellBrowser IShellBrowser_iface;
IBrowserService IBrowserService_iface;
IDocObjectService IDocObjectService_iface;
LONG ref;
} ShellBrowser;
static inline ShellBrowser *impl_from_IShellBrowser(IShellBrowser *iface)
{
return CONTAINING_RECORD(iface, ShellBrowser, IShellBrowser_iface);
}
static HRESULT WINAPI ShellBrowser_QueryInterface(
IShellBrowser* iface,
REFIID riid,
void **ppvObject)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
*ppvObject = NULL;
if(IsEqualGUID(&IID_IShellBrowser, riid) || IsEqualGUID(&IID_IOleWindow, riid)
|| IsEqualGUID(&IID_IUnknown, riid))
*ppvObject = &This->IShellBrowser_iface;
else if(IsEqualGUID(&IID_IBrowserService, riid))
*ppvObject = &This->IBrowserService_iface;
else if(IsEqualGUID(&IID_IDocObjectService, riid))
*ppvObject = &This->IDocObjectService_iface;
if(*ppvObject) {
TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
IUnknown_AddRef((IUnknown*)*ppvObject);
return S_OK;
}
FIXME("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
return E_NOINTERFACE;
}
static ULONG WINAPI ShellBrowser_AddRef(
IShellBrowser* iface)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
return ref;
}
static ULONG WINAPI ShellBrowser_Release(
IShellBrowser* iface)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
if(!ref)
heap_free(This);
return ref;
}
static HRESULT WINAPI ShellBrowser_GetWindow(
IShellBrowser* iface,
HWND *phwnd)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p\n", This, phwnd);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_ContextSensitiveHelp(
IShellBrowser* iface,
BOOL fEnterMode)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %d\n", This, fEnterMode);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_InsertMenusSB(
IShellBrowser* iface,
HMENU hmenuShared,
LPOLEMENUGROUPWIDTHS lpMenuWidths)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p %p\n", This, hmenuShared, lpMenuWidths);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_SetMenuSB(
IShellBrowser* iface,
HMENU hmenuShared,
HOLEMENU holemenuReserved,
HWND hwndActiveObject)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p %p %p\n", This, hmenuShared, holemenuReserved, hwndActiveObject);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_RemoveMenusSB(
IShellBrowser* iface,
HMENU hmenuShared)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p\n", This, hmenuShared);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_SetStatusTextSB(
IShellBrowser* iface,
LPCOLESTR pszStatusText)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %s\n", This, debugstr_w(pszStatusText));
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_EnableModelessSB(
IShellBrowser* iface,
BOOL fEnable)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %d\n", This, fEnable);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_TranslateAcceleratorSB(
IShellBrowser* iface,
MSG *pmsg,
WORD wID)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p %d\n", This, pmsg, (int)wID);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_BrowseObject(
IShellBrowser* iface,
LPCITEMIDLIST pidl,
UINT wFlags)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p %u\n", This, pidl, wFlags);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_GetViewStateStream(
IShellBrowser* iface,
DWORD grfMode,
IStream **ppStrm)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %x %p\n", This, grfMode, ppStrm);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_GetControlWindow(
IShellBrowser* iface,
UINT id,
HWND *phwnd)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %u %p\n", This, id, phwnd);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_SendControlMsg(
IShellBrowser* iface,
UINT id,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
LRESULT *pret)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %u %u %p\n", This, id, uMsg, pret);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_QueryActiveShellView(
IShellBrowser* iface,
IShellView **ppshv)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p\n", This, ppshv);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_OnViewWindowActive(
IShellBrowser* iface,
IShellView *pshv)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p\n", This, pshv);
return E_NOTIMPL;
}
static HRESULT WINAPI ShellBrowser_SetToolbarItems(
IShellBrowser* iface,
LPTBBUTTONSB lpButtons,
UINT nButtons,
UINT uFlags)
{
ShellBrowser *This = impl_from_IShellBrowser(iface);
FIXME("%p %p %u %u\n", This, lpButtons, nButtons, uFlags);
return E_NOTIMPL;
}
static const IShellBrowserVtbl ShellBrowserVtbl = {
ShellBrowser_QueryInterface,
ShellBrowser_AddRef,
ShellBrowser_Release,
ShellBrowser_GetWindow,
ShellBrowser_ContextSensitiveHelp,
ShellBrowser_InsertMenusSB,
ShellBrowser_SetMenuSB,
ShellBrowser_RemoveMenusSB,
ShellBrowser_SetStatusTextSB,
ShellBrowser_EnableModelessSB,
ShellBrowser_TranslateAcceleratorSB,
ShellBrowser_BrowseObject,
ShellBrowser_GetViewStateStream,
ShellBrowser_GetControlWindow,
ShellBrowser_SendControlMsg,
ShellBrowser_QueryActiveShellView,
ShellBrowser_OnViewWindowActive,
ShellBrowser_SetToolbarItems
};
static inline ShellBrowser *impl_from_IBrowserService(IBrowserService *iface)
{
return CONTAINING_RECORD(iface, ShellBrowser, IBrowserService_iface);
}
static HRESULT WINAPI BrowserService_QueryInterface(
IBrowserService* iface,
REFIID riid,
void **ppvObject)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
return IShellBrowser_QueryInterface(&This->IShellBrowser_iface, riid, ppvObject);
}
static ULONG WINAPI BrowserService_AddRef(
IBrowserService *iface)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
return IShellBrowser_AddRef(&This->IShellBrowser_iface);
}
static ULONG WINAPI BrowserService_Release(
IBrowserService* iface)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
return IShellBrowser_Release(&This->IShellBrowser_iface);
}
static HRESULT WINAPI BrowserService_GetParentSite(
IBrowserService* iface,
IOleInPlaceSite **ppipsite)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, ppipsite);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_SetTitle(
IBrowserService* iface,
IShellView *psv,
LPCWSTR pszName)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %s\n", This, psv, debugstr_w(pszName));
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetTitle(
IBrowserService* iface,
IShellView *psv,
LPWSTR pszName,
DWORD cchName)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %p %d\n", This, psv, pszName, cchName);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetOleObject(
IBrowserService* iface,
IOleObject **ppobjv)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, ppobjv);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetTravelLog(
IBrowserService* iface,
ITravelLog **pptl)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, pptl);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_ShowControlWindow(
IBrowserService* iface,
UINT id,
BOOL fShow)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %u %d\n", This, id, fShow);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_IsControlWindowShown(
IBrowserService* iface,
UINT id,
BOOL *pfShown)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %u %p\n", This, id, pfShown);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_IEGetDisplayName(
IBrowserService* iface,
PCIDLIST_ABSOLUTE pidl,
LPWSTR pwszName,
UINT uFlags)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %p %u\n", This, pidl, pwszName, uFlags);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_IEParseDisplayName(
IBrowserService* iface,
UINT uiCP,
LPCWSTR pwszPath,
PIDLIST_ABSOLUTE *ppidlOut)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %u %s %p\n", This, uiCP, debugstr_w(pwszPath), ppidlOut);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_DisplayParseError(
IBrowserService* iface,
HRESULT hres,
LPCWSTR pwszPath)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %x %s\n", This, hres, debugstr_w(pwszPath));
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_NavigateToPidl(
IBrowserService* iface,
PCIDLIST_ABSOLUTE pidl,
DWORD grfHLNF)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %d\n", This, pidl, grfHLNF);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_SetNavigateState(
IBrowserService* iface,
BNSTATE bnstate)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %d\n", This, bnstate);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetNavigateState(
IBrowserService* iface,
BNSTATE *pbnstate)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, pbnstate);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_NotifyRedirect(
IBrowserService* iface,
IShellView *psv,
PCIDLIST_ABSOLUTE pidl,
BOOL *pfDidBrowse)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %p %p\n", This, psv, pidl, pfDidBrowse);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_UpdateWindowList(
IBrowserService* iface)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_UpdateBackForwardState(
IBrowserService* iface)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_SetFlags(
IBrowserService* iface,
DWORD dwFlags,
DWORD dwFlagMask)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %x %x\n", This, dwFlags, dwFlagMask);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetFlags(
IBrowserService* iface,
DWORD *pdwFlags)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, pdwFlags);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_CanNavigateNow(
IBrowserService* iface)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetPidl(
IBrowserService* iface,
PIDLIST_ABSOLUTE *ppidl)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, ppidl);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_SetReferrer(
IBrowserService* iface,
PCIDLIST_ABSOLUTE pidl)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, pidl);
return E_NOTIMPL;
}
static DWORD WINAPI BrowserService_GetBrowserIndex(
IBrowserService* iface)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetBrowserByIndex(
IBrowserService* iface,
DWORD dwID,
IUnknown **ppunk)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %x %p\n", This, dwID, ppunk);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetHistoryObject(
IBrowserService* iface,
IOleObject **ppole,
IStream **pstm,
IBindCtx **ppbc)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %p %p\n", This, ppole, pstm, ppbc);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_SetHistoryObject(
IBrowserService* iface,
IOleObject *pole,
BOOL fIsLocalAnchor)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %d\n", This, pole, fIsLocalAnchor);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_CacheOLEServer(
IBrowserService* iface,
IOleObject *pole)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, pole);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetSetCodePage(
IBrowserService* iface,
VARIANT *pvarIn,
VARIANT *pvarOut)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %p\n", This, pvarIn, pvarOut);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_OnHttpEquiv(
IBrowserService* iface,
IShellView *psv,
BOOL fDone,
VARIANT *pvarargIn,
VARIANT *pvarargOut)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p %d %p %p\n", This, psv, fDone, pvarargIn, pvarargOut);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_GetPalette(
IBrowserService* iface,
HPALETTE *hpal)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %p\n", This, hpal);
return E_NOTIMPL;
}
static HRESULT WINAPI BrowserService_RegisterWindow(
IBrowserService* iface,
BOOL fForceRegister,
int swc)
{
ShellBrowser *This = impl_from_IBrowserService(iface);
FIXME("%p %d %d\n", This, fForceRegister, swc);
return E_NOTIMPL;
}
static const IBrowserServiceVtbl BrowserServiceVtbl = {
BrowserService_QueryInterface,
BrowserService_AddRef,
BrowserService_Release,
BrowserService_GetParentSite,
BrowserService_SetTitle,
BrowserService_GetTitle,
BrowserService_GetOleObject,
BrowserService_GetTravelLog,
BrowserService_ShowControlWindow,
BrowserService_IsControlWindowShown,
BrowserService_IEGetDisplayName,
BrowserService_IEParseDisplayName,
BrowserService_DisplayParseError,
BrowserService_NavigateToPidl,
BrowserService_SetNavigateState,
BrowserService_GetNavigateState,
BrowserService_NotifyRedirect,
BrowserService_UpdateWindowList,
BrowserService_UpdateBackForwardState,
BrowserService_SetFlags,
BrowserService_GetFlags,
BrowserService_CanNavigateNow,
BrowserService_GetPidl,
BrowserService_SetReferrer,
BrowserService_GetBrowserIndex,
BrowserService_GetBrowserByIndex,
BrowserService_GetHistoryObject,
BrowserService_SetHistoryObject,
BrowserService_CacheOLEServer,
BrowserService_GetSetCodePage,
BrowserService_OnHttpEquiv,
BrowserService_GetPalette,
BrowserService_RegisterWindow
};
static inline ShellBrowser *impl_from_IDocObjectService(IDocObjectService *iface)
{
return CONTAINING_RECORD(iface, ShellBrowser, IDocObjectService_iface);
}
static HRESULT WINAPI DocObjectService_QueryInterface(
IDocObjectService* iface,
REFIID riid,
void **ppvObject)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
return IShellBrowser_QueryInterface(&This->IShellBrowser_iface, riid, ppvObject);
}
static ULONG WINAPI DocObjectService_AddRef(
IDocObjectService* iface)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
return IShellBrowser_AddRef(&This->IShellBrowser_iface);
}
static ULONG WINAPI DocObjectService_Release(
IDocObjectService* iface)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
return IShellBrowser_Release(&This->IShellBrowser_iface);
}
static HRESULT WINAPI DocObjectService_FireBeforeNavigate2(
IDocObjectService* iface,
IDispatch *pDispatch,
LPCWSTR lpszUrl,
DWORD dwFlags,
LPCWSTR lpszFrameName,
BYTE *pPostData,
DWORD cbPostData,
LPCWSTR lpszHeaders,
BOOL fPlayNavSound,
BOOL *pfCancel)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p %p %s %x %s %p %d %s %d %p\n", This, pDispatch, debugstr_w(lpszUrl),
dwFlags, debugstr_w(lpszFrameName), pPostData, cbPostData,
debugstr_w(lpszHeaders), fPlayNavSound, pfCancel);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
IDocObjectService* iface,
IHTMLWindow2 *pHTMLWindow2,
DWORD dwFlags)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p %p %x\n", This, pHTMLWindow2, dwFlags);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_FireDownloadBegin(
IDocObjectService* iface)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_FireDownloadComplete(
IDocObjectService* iface)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_FireDocumentComplete(
IDocObjectService* iface,
IHTMLWindow2 *pHTMLWindow,
DWORD dwFlags)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p %p %x\n", This, pHTMLWindow, dwFlags);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_UpdateDesktopComponent(
IDocObjectService* iface,
IHTMLWindow2 *pHTMLWindow)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p %p\n", This, pHTMLWindow);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_GetPendingUrl(
IDocObjectService* iface,
BSTR *pbstrPendingUrl)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p %p\n", This, pbstrPendingUrl);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_ActiveElementChanged(
IDocObjectService* iface,
IHTMLElement *pHTMLElement)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p %p\n", This, pHTMLElement);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_GetUrlSearchComponent(
IDocObjectService* iface,
BSTR *pbstrSearch)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p %p\n", This, pbstrSearch);
return E_NOTIMPL;
}
static HRESULT WINAPI DocObjectService_IsErrorUrl(
IDocObjectService* iface,
LPCWSTR lpszUrl,
BOOL *pfIsError)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
FIXME("%p %s %p\n", This, debugstr_w(lpszUrl), pfIsError);
*pfIsError = FALSE;
return S_OK;
}
static const IDocObjectServiceVtbl DocObjectServiceVtbl = {
DocObjectService_QueryInterface,
DocObjectService_AddRef,
DocObjectService_Release,
DocObjectService_FireBeforeNavigate2,
DocObjectService_FireNavigateComplete2,
DocObjectService_FireDownloadBegin,
DocObjectService_FireDownloadComplete,
DocObjectService_FireDocumentComplete,
DocObjectService_UpdateDesktopComponent,
DocObjectService_GetPendingUrl,
DocObjectService_ActiveElementChanged,
DocObjectService_GetUrlSearchComponent,
DocObjectService_IsErrorUrl
};
HRESULT ShellBrowser_Create(IShellBrowser **ppv)
{
ShellBrowser *sb;
sb = heap_alloc(sizeof(ShellBrowser));
if(!sb)
return E_OUTOFMEMORY;
sb->IShellBrowser_iface.lpVtbl = &ShellBrowserVtbl;
sb->IBrowserService_iface.lpVtbl = &BrowserServiceVtbl;
sb->IDocObjectService_iface.lpVtbl = &DocObjectServiceVtbl;
sb->ref = 1;
*ppv = &sb->IShellBrowser_iface;
return S_OK;
}