2 * Implementation of IShellBrowser interface
4 * Copyright 2011 Piotr Caban for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "wine/debug.h"
23 #include "shdeprecated.h"
24 #include "docobjectservice.h"
26 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
29 IShellBrowser IShellBrowser_iface;
30 IBrowserService IBrowserService_iface;
31 IDocObjectService IDocObjectService_iface;
36 static inline ShellBrowser *impl_from_IShellBrowser(IShellBrowser *iface)
38 return CONTAINING_RECORD(iface, ShellBrowser, IShellBrowser_iface);
41 static HRESULT WINAPI ShellBrowser_QueryInterface(
46 ShellBrowser *This = impl_from_IShellBrowser(iface);
49 if(IsEqualGUID(&IID_IShellBrowser, riid) || IsEqualGUID(&IID_IOleWindow, riid)
50 || IsEqualGUID(&IID_IUnknown, riid))
51 *ppvObject = &This->IShellBrowser_iface;
52 else if(IsEqualGUID(&IID_IBrowserService, riid))
53 *ppvObject = &This->IBrowserService_iface;
54 else if(IsEqualGUID(&IID_IDocObjectService, riid))
55 *ppvObject = &This->IDocObjectService_iface;
58 TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
59 IUnknown_AddRef((IUnknown*)*ppvObject);
63 FIXME("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
67 static ULONG WINAPI ShellBrowser_AddRef(
70 ShellBrowser *This = impl_from_IShellBrowser(iface);
71 LONG ref = InterlockedIncrement(&This->ref);
73 TRACE("(%p) ref=%d\n", This, ref);
78 static ULONG WINAPI ShellBrowser_Release(
81 ShellBrowser *This = impl_from_IShellBrowser(iface);
82 LONG ref = InterlockedDecrement(&This->ref);
84 TRACE("(%p) ref=%d\n", This, ref);
91 static HRESULT WINAPI ShellBrowser_GetWindow(
95 ShellBrowser *This = impl_from_IShellBrowser(iface);
96 FIXME("%p %p\n", This, phwnd);
100 static HRESULT WINAPI ShellBrowser_ContextSensitiveHelp(
101 IShellBrowser* iface,
104 ShellBrowser *This = impl_from_IShellBrowser(iface);
105 FIXME("%p %d\n", This, fEnterMode);
109 static HRESULT WINAPI ShellBrowser_InsertMenusSB(
110 IShellBrowser* iface,
112 LPOLEMENUGROUPWIDTHS lpMenuWidths)
114 ShellBrowser *This = impl_from_IShellBrowser(iface);
115 FIXME("%p %p %p\n", This, hmenuShared, lpMenuWidths);
119 static HRESULT WINAPI ShellBrowser_SetMenuSB(
120 IShellBrowser* iface,
122 HOLEMENU holemenuReserved,
123 HWND hwndActiveObject)
125 ShellBrowser *This = impl_from_IShellBrowser(iface);
126 FIXME("%p %p %p %p\n", This, hmenuShared, holemenuReserved, hwndActiveObject);
130 static HRESULT WINAPI ShellBrowser_RemoveMenusSB(
131 IShellBrowser* iface,
134 ShellBrowser *This = impl_from_IShellBrowser(iface);
135 FIXME("%p %p\n", This, hmenuShared);
139 static HRESULT WINAPI ShellBrowser_SetStatusTextSB(
140 IShellBrowser* iface,
141 LPCOLESTR pszStatusText)
143 ShellBrowser *This = impl_from_IShellBrowser(iface);
144 FIXME("%p %s\n", This, debugstr_w(pszStatusText));
148 static HRESULT WINAPI ShellBrowser_EnableModelessSB(
149 IShellBrowser* iface,
152 ShellBrowser *This = impl_from_IShellBrowser(iface);
153 FIXME("%p %d\n", This, fEnable);
157 static HRESULT WINAPI ShellBrowser_TranslateAcceleratorSB(
158 IShellBrowser* iface,
162 ShellBrowser *This = impl_from_IShellBrowser(iface);
163 FIXME("%p %p %d\n", This, pmsg, (int)wID);
167 static HRESULT WINAPI ShellBrowser_BrowseObject(
168 IShellBrowser* iface,
172 ShellBrowser *This = impl_from_IShellBrowser(iface);
173 FIXME("%p %p %u\n", This, pidl, wFlags);
177 static HRESULT WINAPI ShellBrowser_GetViewStateStream(
178 IShellBrowser* iface,
182 ShellBrowser *This = impl_from_IShellBrowser(iface);
183 FIXME("%p %x %p\n", This, grfMode, ppStrm);
187 static HRESULT WINAPI ShellBrowser_GetControlWindow(
188 IShellBrowser* iface,
192 ShellBrowser *This = impl_from_IShellBrowser(iface);
193 FIXME("%p %u %p\n", This, id, phwnd);
197 static HRESULT WINAPI ShellBrowser_SendControlMsg(
198 IShellBrowser* iface,
205 ShellBrowser *This = impl_from_IShellBrowser(iface);
206 FIXME("%p %u %u %p\n", This, id, uMsg, pret);
210 static HRESULT WINAPI ShellBrowser_QueryActiveShellView(
211 IShellBrowser* iface,
214 ShellBrowser *This = impl_from_IShellBrowser(iface);
215 FIXME("%p %p\n", This, ppshv);
219 static HRESULT WINAPI ShellBrowser_OnViewWindowActive(
220 IShellBrowser* iface,
223 ShellBrowser *This = impl_from_IShellBrowser(iface);
224 FIXME("%p %p\n", This, pshv);
228 static HRESULT WINAPI ShellBrowser_SetToolbarItems(
229 IShellBrowser* iface,
230 LPTBBUTTONSB lpButtons,
234 ShellBrowser *This = impl_from_IShellBrowser(iface);
235 FIXME("%p %p %u %u\n", This, lpButtons, nButtons, uFlags);
239 static const IShellBrowserVtbl ShellBrowserVtbl = {
240 ShellBrowser_QueryInterface,
242 ShellBrowser_Release,
243 ShellBrowser_GetWindow,
244 ShellBrowser_ContextSensitiveHelp,
245 ShellBrowser_InsertMenusSB,
246 ShellBrowser_SetMenuSB,
247 ShellBrowser_RemoveMenusSB,
248 ShellBrowser_SetStatusTextSB,
249 ShellBrowser_EnableModelessSB,
250 ShellBrowser_TranslateAcceleratorSB,
251 ShellBrowser_BrowseObject,
252 ShellBrowser_GetViewStateStream,
253 ShellBrowser_GetControlWindow,
254 ShellBrowser_SendControlMsg,
255 ShellBrowser_QueryActiveShellView,
256 ShellBrowser_OnViewWindowActive,
257 ShellBrowser_SetToolbarItems
260 static inline ShellBrowser *impl_from_IBrowserService(IBrowserService *iface)
262 return CONTAINING_RECORD(iface, ShellBrowser, IBrowserService_iface);
265 static HRESULT WINAPI BrowserService_QueryInterface(
266 IBrowserService* iface,
270 ShellBrowser *This = impl_from_IBrowserService(iface);
271 return IShellBrowser_QueryInterface(&This->IShellBrowser_iface, riid, ppvObject);
274 static ULONG WINAPI BrowserService_AddRef(
275 IBrowserService *iface)
277 ShellBrowser *This = impl_from_IBrowserService(iface);
278 return IShellBrowser_AddRef(&This->IShellBrowser_iface);
281 static ULONG WINAPI BrowserService_Release(
282 IBrowserService* iface)
284 ShellBrowser *This = impl_from_IBrowserService(iface);
285 return IShellBrowser_Release(&This->IShellBrowser_iface);
288 static HRESULT WINAPI BrowserService_GetParentSite(
289 IBrowserService* iface,
290 IOleInPlaceSite **ppipsite)
292 ShellBrowser *This = impl_from_IBrowserService(iface);
293 FIXME("%p %p\n", This, ppipsite);
297 static HRESULT WINAPI BrowserService_SetTitle(
298 IBrowserService* iface,
302 ShellBrowser *This = impl_from_IBrowserService(iface);
303 FIXME("%p %p %s\n", This, psv, debugstr_w(pszName));
307 static HRESULT WINAPI BrowserService_GetTitle(
308 IBrowserService* iface,
313 ShellBrowser *This = impl_from_IBrowserService(iface);
314 FIXME("%p %p %p %d\n", This, psv, pszName, cchName);
318 static HRESULT WINAPI BrowserService_GetOleObject(
319 IBrowserService* iface,
322 ShellBrowser *This = impl_from_IBrowserService(iface);
323 FIXME("%p %p\n", This, ppobjv);
327 static HRESULT WINAPI BrowserService_GetTravelLog(
328 IBrowserService* iface,
331 ShellBrowser *This = impl_from_IBrowserService(iface);
332 FIXME("%p %p\n", This, pptl);
336 static HRESULT WINAPI BrowserService_ShowControlWindow(
337 IBrowserService* iface,
341 ShellBrowser *This = impl_from_IBrowserService(iface);
342 FIXME("%p %u %d\n", This, id, fShow);
346 static HRESULT WINAPI BrowserService_IsControlWindowShown(
347 IBrowserService* iface,
351 ShellBrowser *This = impl_from_IBrowserService(iface);
352 FIXME("%p %u %p\n", This, id, pfShown);
356 static HRESULT WINAPI BrowserService_IEGetDisplayName(
357 IBrowserService* iface,
358 PCIDLIST_ABSOLUTE pidl,
362 ShellBrowser *This = impl_from_IBrowserService(iface);
363 FIXME("%p %p %p %u\n", This, pidl, pwszName, uFlags);
367 static HRESULT WINAPI BrowserService_IEParseDisplayName(
368 IBrowserService* iface,
371 PIDLIST_ABSOLUTE *ppidlOut)
373 ShellBrowser *This = impl_from_IBrowserService(iface);
374 FIXME("%p %u %s %p\n", This, uiCP, debugstr_w(pwszPath), ppidlOut);
378 static HRESULT WINAPI BrowserService_DisplayParseError(
379 IBrowserService* iface,
383 ShellBrowser *This = impl_from_IBrowserService(iface);
384 FIXME("%p %x %s\n", This, hres, debugstr_w(pwszPath));
388 static HRESULT WINAPI BrowserService_NavigateToPidl(
389 IBrowserService* iface,
390 PCIDLIST_ABSOLUTE pidl,
393 ShellBrowser *This = impl_from_IBrowserService(iface);
394 FIXME("%p %p %d\n", This, pidl, grfHLNF);
398 static HRESULT WINAPI BrowserService_SetNavigateState(
399 IBrowserService* iface,
402 ShellBrowser *This = impl_from_IBrowserService(iface);
403 FIXME("%p %d\n", This, bnstate);
407 static HRESULT WINAPI BrowserService_GetNavigateState(
408 IBrowserService* iface,
411 ShellBrowser *This = impl_from_IBrowserService(iface);
412 FIXME("%p %p\n", This, pbnstate);
416 static HRESULT WINAPI BrowserService_NotifyRedirect(
417 IBrowserService* iface,
419 PCIDLIST_ABSOLUTE pidl,
422 ShellBrowser *This = impl_from_IBrowserService(iface);
423 FIXME("%p %p %p %p\n", This, psv, pidl, pfDidBrowse);
427 static HRESULT WINAPI BrowserService_UpdateWindowList(
428 IBrowserService* iface)
430 ShellBrowser *This = impl_from_IBrowserService(iface);
435 static HRESULT WINAPI BrowserService_UpdateBackForwardState(
436 IBrowserService* iface)
438 ShellBrowser *This = impl_from_IBrowserService(iface);
443 static HRESULT WINAPI BrowserService_SetFlags(
444 IBrowserService* iface,
448 ShellBrowser *This = impl_from_IBrowserService(iface);
449 FIXME("%p %x %x\n", This, dwFlags, dwFlagMask);
453 static HRESULT WINAPI BrowserService_GetFlags(
454 IBrowserService* iface,
457 ShellBrowser *This = impl_from_IBrowserService(iface);
458 FIXME("%p %p\n", This, pdwFlags);
462 static HRESULT WINAPI BrowserService_CanNavigateNow(
463 IBrowserService* iface)
465 ShellBrowser *This = impl_from_IBrowserService(iface);
470 static HRESULT WINAPI BrowserService_GetPidl(
471 IBrowserService* iface,
472 PIDLIST_ABSOLUTE *ppidl)
474 ShellBrowser *This = impl_from_IBrowserService(iface);
475 FIXME("%p %p\n", This, ppidl);
479 static HRESULT WINAPI BrowserService_SetReferrer(
480 IBrowserService* iface,
481 PCIDLIST_ABSOLUTE pidl)
483 ShellBrowser *This = impl_from_IBrowserService(iface);
484 FIXME("%p %p\n", This, pidl);
488 static DWORD WINAPI BrowserService_GetBrowserIndex(
489 IBrowserService* iface)
491 ShellBrowser *This = impl_from_IBrowserService(iface);
496 static HRESULT WINAPI BrowserService_GetBrowserByIndex(
497 IBrowserService* iface,
501 ShellBrowser *This = impl_from_IBrowserService(iface);
502 FIXME("%p %x %p\n", This, dwID, ppunk);
506 static HRESULT WINAPI BrowserService_GetHistoryObject(
507 IBrowserService* iface,
512 ShellBrowser *This = impl_from_IBrowserService(iface);
513 FIXME("%p %p %p %p\n", This, ppole, pstm, ppbc);
517 static HRESULT WINAPI BrowserService_SetHistoryObject(
518 IBrowserService* iface,
522 ShellBrowser *This = impl_from_IBrowserService(iface);
523 FIXME("%p %p %d\n", This, pole, fIsLocalAnchor);
527 static HRESULT WINAPI BrowserService_CacheOLEServer(
528 IBrowserService* iface,
531 ShellBrowser *This = impl_from_IBrowserService(iface);
532 FIXME("%p %p\n", This, pole);
536 static HRESULT WINAPI BrowserService_GetSetCodePage(
537 IBrowserService* iface,
541 ShellBrowser *This = impl_from_IBrowserService(iface);
542 FIXME("%p %p %p\n", This, pvarIn, pvarOut);
546 static HRESULT WINAPI BrowserService_OnHttpEquiv(
547 IBrowserService* iface,
553 ShellBrowser *This = impl_from_IBrowserService(iface);
554 FIXME("%p %p %d %p %p\n", This, psv, fDone, pvarargIn, pvarargOut);
558 static HRESULT WINAPI BrowserService_GetPalette(
559 IBrowserService* iface,
562 ShellBrowser *This = impl_from_IBrowserService(iface);
563 FIXME("%p %p\n", This, hpal);
567 static HRESULT WINAPI BrowserService_RegisterWindow(
568 IBrowserService* iface,
572 ShellBrowser *This = impl_from_IBrowserService(iface);
573 FIXME("%p %d %d\n", This, fForceRegister, swc);
577 static const IBrowserServiceVtbl BrowserServiceVtbl = {
578 BrowserService_QueryInterface,
579 BrowserService_AddRef,
580 BrowserService_Release,
581 BrowserService_GetParentSite,
582 BrowserService_SetTitle,
583 BrowserService_GetTitle,
584 BrowserService_GetOleObject,
585 BrowserService_GetTravelLog,
586 BrowserService_ShowControlWindow,
587 BrowserService_IsControlWindowShown,
588 BrowserService_IEGetDisplayName,
589 BrowserService_IEParseDisplayName,
590 BrowserService_DisplayParseError,
591 BrowserService_NavigateToPidl,
592 BrowserService_SetNavigateState,
593 BrowserService_GetNavigateState,
594 BrowserService_NotifyRedirect,
595 BrowserService_UpdateWindowList,
596 BrowserService_UpdateBackForwardState,
597 BrowserService_SetFlags,
598 BrowserService_GetFlags,
599 BrowserService_CanNavigateNow,
600 BrowserService_GetPidl,
601 BrowserService_SetReferrer,
602 BrowserService_GetBrowserIndex,
603 BrowserService_GetBrowserByIndex,
604 BrowserService_GetHistoryObject,
605 BrowserService_SetHistoryObject,
606 BrowserService_CacheOLEServer,
607 BrowserService_GetSetCodePage,
608 BrowserService_OnHttpEquiv,
609 BrowserService_GetPalette,
610 BrowserService_RegisterWindow
613 static inline ShellBrowser *impl_from_IDocObjectService(IDocObjectService *iface)
615 return CONTAINING_RECORD(iface, ShellBrowser, IDocObjectService_iface);
618 static HRESULT WINAPI DocObjectService_QueryInterface(
619 IDocObjectService* iface,
623 ShellBrowser *This = impl_from_IDocObjectService(iface);
624 return IShellBrowser_QueryInterface(&This->IShellBrowser_iface, riid, ppvObject);
627 static ULONG WINAPI DocObjectService_AddRef(
628 IDocObjectService* iface)
630 ShellBrowser *This = impl_from_IDocObjectService(iface);
631 return IShellBrowser_AddRef(&This->IShellBrowser_iface);
634 static ULONG WINAPI DocObjectService_Release(
635 IDocObjectService* iface)
637 ShellBrowser *This = impl_from_IDocObjectService(iface);
638 return IShellBrowser_Release(&This->IShellBrowser_iface);
641 static HRESULT WINAPI DocObjectService_FireBeforeNavigate2(
642 IDocObjectService* iface,
643 IDispatch *pDispatch,
646 LPCWSTR lpszFrameName,
653 ShellBrowser *This = impl_from_IDocObjectService(iface);
654 FIXME("%p %p %s %x %s %p %d %s %d %p\n", This, pDispatch, debugstr_w(lpszUrl),
655 dwFlags, debugstr_w(lpszFrameName), pPostData, cbPostData,
656 debugstr_w(lpszHeaders), fPlayNavSound, pfCancel);
660 static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
661 IDocObjectService* iface,
662 IHTMLWindow2 *pHTMLWindow2,
665 ShellBrowser *This = impl_from_IDocObjectService(iface);
666 FIXME("%p %p %x\n", This, pHTMLWindow2, dwFlags);
670 static HRESULT WINAPI DocObjectService_FireDownloadBegin(
671 IDocObjectService* iface)
673 ShellBrowser *This = impl_from_IDocObjectService(iface);
678 static HRESULT WINAPI DocObjectService_FireDownloadComplete(
679 IDocObjectService* iface)
681 ShellBrowser *This = impl_from_IDocObjectService(iface);
686 static HRESULT WINAPI DocObjectService_FireDocumentComplete(
687 IDocObjectService* iface,
688 IHTMLWindow2 *pHTMLWindow,
691 ShellBrowser *This = impl_from_IDocObjectService(iface);
692 FIXME("%p %p %x\n", This, pHTMLWindow, dwFlags);
696 static HRESULT WINAPI DocObjectService_UpdateDesktopComponent(
697 IDocObjectService* iface,
698 IHTMLWindow2 *pHTMLWindow)
700 ShellBrowser *This = impl_from_IDocObjectService(iface);
701 FIXME("%p %p\n", This, pHTMLWindow);
705 static HRESULT WINAPI DocObjectService_GetPendingUrl(
706 IDocObjectService* iface,
707 BSTR *pbstrPendingUrl)
709 ShellBrowser *This = impl_from_IDocObjectService(iface);
710 FIXME("%p %p\n", This, pbstrPendingUrl);
714 static HRESULT WINAPI DocObjectService_ActiveElementChanged(
715 IDocObjectService* iface,
716 IHTMLElement *pHTMLElement)
718 ShellBrowser *This = impl_from_IDocObjectService(iface);
719 FIXME("%p %p\n", This, pHTMLElement);
723 static HRESULT WINAPI DocObjectService_GetUrlSearchComponent(
724 IDocObjectService* iface,
727 ShellBrowser *This = impl_from_IDocObjectService(iface);
728 FIXME("%p %p\n", This, pbstrSearch);
732 static HRESULT WINAPI DocObjectService_IsErrorUrl(
733 IDocObjectService* iface,
737 ShellBrowser *This = impl_from_IDocObjectService(iface);
738 FIXME("%p %s %p\n", This, debugstr_w(lpszUrl), pfIsError);
744 static const IDocObjectServiceVtbl DocObjectServiceVtbl = {
745 DocObjectService_QueryInterface,
746 DocObjectService_AddRef,
747 DocObjectService_Release,
748 DocObjectService_FireBeforeNavigate2,
749 DocObjectService_FireNavigateComplete2,
750 DocObjectService_FireDownloadBegin,
751 DocObjectService_FireDownloadComplete,
752 DocObjectService_FireDocumentComplete,
753 DocObjectService_UpdateDesktopComponent,
754 DocObjectService_GetPendingUrl,
755 DocObjectService_ActiveElementChanged,
756 DocObjectService_GetUrlSearchComponent,
757 DocObjectService_IsErrorUrl
760 HRESULT ShellBrowser_Create(IShellBrowser **ppv)
764 sb = heap_alloc(sizeof(ShellBrowser));
766 return E_OUTOFMEMORY;
768 sb->IShellBrowser_iface.lpVtbl = &ShellBrowserVtbl;
769 sb->IBrowserService_iface.lpVtbl = &BrowserServiceVtbl;
770 sb->IDocObjectService_iface.lpVtbl = &DocObjectServiceVtbl;
774 *ppv = &sb->IShellBrowser_iface;