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
;