2 * Implementation of IShellBrowser interface
4 * Copyright 2011 Piotr Caban for CodeWeavers
5 * Copyright 2012 Jacek Caban for CodeWeavers
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26 static inline ShellBrowser
*impl_from_IShellBrowser(IShellBrowser
*iface
)
28 return CONTAINING_RECORD(iface
, ShellBrowser
, IShellBrowser_iface
);
31 static HRESULT WINAPI
ShellBrowser_QueryInterface(IShellBrowser
* iface
, REFIID riid
, void **ppv
)
33 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
35 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
36 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
37 *ppv
= &This
->IShellBrowser_iface
;
38 }else if(IsEqualGUID(&IID_IOleWindow
, riid
)) {
39 TRACE("(%p)->(IID_IOleWindow %p)\n", This
, ppv
);
40 *ppv
= &This
->IShellBrowser_iface
;
41 }else if(IsEqualGUID(&IID_IShellBrowser
, riid
)) {
42 TRACE("(%p)->(IID_IShellBrowser %p)\n", This
, ppv
);
43 *ppv
= &This
->IShellBrowser_iface
;
44 }else if(IsEqualGUID(&IID_IBrowserService
, riid
)) {
45 TRACE("(%p)->(IID_IBrowserService %p)\n", This
, ppv
);
46 *ppv
= &This
->IBrowserService_iface
;
47 }else if(IsEqualGUID(&IID_IDocObjectService
, riid
)) {
48 TRACE("(%p)->(IID_IDocObjectService %p)\n", This
, ppv
);
49 *ppv
= &This
->IDocObjectService_iface
;
51 FIXME("%p %s %p\n", This
, debugstr_guid(riid
), ppv
);
56 IUnknown_AddRef((IUnknown
*)*ppv
);
60 static ULONG WINAPI
ShellBrowser_AddRef(
63 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
64 LONG ref
= InterlockedIncrement(&This
->ref
);
66 TRACE("(%p) ref=%d\n", This
, ref
);
71 static ULONG WINAPI
ShellBrowser_Release(IShellBrowser
* iface
)
73 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
74 LONG ref
= InterlockedDecrement(&This
->ref
);
76 TRACE("(%p) ref=%d\n", This
, ref
);
79 assert(!This
->doc_host
);
86 static HRESULT WINAPI
ShellBrowser_GetWindow(
90 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
91 FIXME("%p %p\n", This
, phwnd
);
95 static HRESULT WINAPI
ShellBrowser_ContextSensitiveHelp(
99 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
100 FIXME("%p %d\n", This
, fEnterMode
);
104 static HRESULT WINAPI
ShellBrowser_InsertMenusSB(
105 IShellBrowser
* iface
,
107 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
109 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
110 FIXME("%p %p %p\n", This
, hmenuShared
, lpMenuWidths
);
114 static HRESULT WINAPI
ShellBrowser_SetMenuSB(
115 IShellBrowser
* iface
,
117 HOLEMENU holemenuReserved
,
118 HWND hwndActiveObject
)
120 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
121 FIXME("%p %p %p %p\n", This
, hmenuShared
, holemenuReserved
, hwndActiveObject
);
125 static HRESULT WINAPI
ShellBrowser_RemoveMenusSB(
126 IShellBrowser
* iface
,
129 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
130 FIXME("%p %p\n", This
, hmenuShared
);
134 static HRESULT WINAPI
ShellBrowser_SetStatusTextSB(
135 IShellBrowser
* iface
,
136 LPCOLESTR pszStatusText
)
138 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
139 FIXME("%p %s\n", This
, debugstr_w(pszStatusText
));
143 static HRESULT WINAPI
ShellBrowser_EnableModelessSB(
144 IShellBrowser
* iface
,
147 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
148 FIXME("%p %d\n", This
, fEnable
);
152 static HRESULT WINAPI
ShellBrowser_TranslateAcceleratorSB(
153 IShellBrowser
* iface
,
157 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
158 FIXME("%p %p %d\n", This
, pmsg
, (int)wID
);
162 static HRESULT WINAPI
ShellBrowser_BrowseObject(
163 IShellBrowser
* iface
,
167 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
168 FIXME("%p %p %u\n", This
, pidl
, wFlags
);
172 static HRESULT WINAPI
ShellBrowser_GetViewStateStream(
173 IShellBrowser
* iface
,
177 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
178 FIXME("%p %x %p\n", This
, grfMode
, ppStrm
);
182 static HRESULT WINAPI
ShellBrowser_GetControlWindow(
183 IShellBrowser
* iface
,
187 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
188 FIXME("%p %u %p\n", This
, id
, phwnd
);
192 static HRESULT WINAPI
ShellBrowser_SendControlMsg(
193 IShellBrowser
* iface
,
200 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
201 FIXME("%p %u %u %p\n", This
, id
, uMsg
, pret
);
205 static HRESULT WINAPI
ShellBrowser_QueryActiveShellView(
206 IShellBrowser
* iface
,
209 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
210 FIXME("%p %p\n", This
, ppshv
);
214 static HRESULT WINAPI
ShellBrowser_OnViewWindowActive(
215 IShellBrowser
* iface
,
218 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
219 FIXME("%p %p\n", This
, pshv
);
223 static HRESULT WINAPI
ShellBrowser_SetToolbarItems(
224 IShellBrowser
* iface
,
225 LPTBBUTTONSB lpButtons
,
229 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
230 FIXME("%p %p %u %u\n", This
, lpButtons
, nButtons
, uFlags
);
234 static const IShellBrowserVtbl ShellBrowserVtbl
= {
235 ShellBrowser_QueryInterface
,
237 ShellBrowser_Release
,
238 ShellBrowser_GetWindow
,
239 ShellBrowser_ContextSensitiveHelp
,
240 ShellBrowser_InsertMenusSB
,
241 ShellBrowser_SetMenuSB
,
242 ShellBrowser_RemoveMenusSB
,
243 ShellBrowser_SetStatusTextSB
,
244 ShellBrowser_EnableModelessSB
,
245 ShellBrowser_TranslateAcceleratorSB
,
246 ShellBrowser_BrowseObject
,
247 ShellBrowser_GetViewStateStream
,
248 ShellBrowser_GetControlWindow
,
249 ShellBrowser_SendControlMsg
,
250 ShellBrowser_QueryActiveShellView
,
251 ShellBrowser_OnViewWindowActive
,
252 ShellBrowser_SetToolbarItems
255 static inline ShellBrowser
*impl_from_IBrowserService(IBrowserService
*iface
)
257 return CONTAINING_RECORD(iface
, ShellBrowser
, IBrowserService_iface
);
260 static HRESULT WINAPI
BrowserService_QueryInterface(
261 IBrowserService
* iface
,
265 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
266 return IShellBrowser_QueryInterface(&This
->IShellBrowser_iface
, riid
, ppvObject
);
269 static ULONG WINAPI
BrowserService_AddRef(
270 IBrowserService
*iface
)
272 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
273 return IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
276 static ULONG WINAPI
BrowserService_Release(
277 IBrowserService
* iface
)
279 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
280 return IShellBrowser_Release(&This
->IShellBrowser_iface
);
283 static HRESULT WINAPI
BrowserService_GetParentSite(
284 IBrowserService
* iface
,
285 IOleInPlaceSite
**ppipsite
)
287 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
288 FIXME("%p %p\n", This
, ppipsite
);
292 static HRESULT WINAPI
BrowserService_SetTitle(
293 IBrowserService
* iface
,
297 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
298 FIXME("%p %p %s\n", This
, psv
, debugstr_w(pszName
));
302 static HRESULT WINAPI
BrowserService_GetTitle(
303 IBrowserService
* iface
,
308 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
309 FIXME("%p %p %p %d\n", This
, psv
, pszName
, cchName
);
313 static HRESULT WINAPI
BrowserService_GetOleObject(
314 IBrowserService
* iface
,
317 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
318 FIXME("%p %p\n", This
, ppobjv
);
322 static HRESULT WINAPI
BrowserService_GetTravelLog(
323 IBrowserService
* iface
,
326 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
327 FIXME("%p %p\n", This
, pptl
);
331 static HRESULT WINAPI
BrowserService_ShowControlWindow(
332 IBrowserService
* iface
,
336 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
337 FIXME("%p %u %d\n", This
, id
, fShow
);
341 static HRESULT WINAPI
BrowserService_IsControlWindowShown(
342 IBrowserService
* iface
,
346 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
347 FIXME("%p %u %p\n", This
, id
, pfShown
);
351 static HRESULT WINAPI
BrowserService_IEGetDisplayName(
352 IBrowserService
* iface
,
353 PCIDLIST_ABSOLUTE pidl
,
357 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
358 FIXME("%p %p %p %u\n", This
, pidl
, pwszName
, uFlags
);
362 static HRESULT WINAPI
BrowserService_IEParseDisplayName(
363 IBrowserService
* iface
,
366 PIDLIST_ABSOLUTE
*ppidlOut
)
368 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
369 FIXME("%p %u %s %p\n", This
, uiCP
, debugstr_w(pwszPath
), ppidlOut
);
373 static HRESULT WINAPI
BrowserService_DisplayParseError(
374 IBrowserService
* iface
,
378 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
379 FIXME("%p %x %s\n", This
, hres
, debugstr_w(pwszPath
));
383 static HRESULT WINAPI
BrowserService_NavigateToPidl(
384 IBrowserService
* iface
,
385 PCIDLIST_ABSOLUTE pidl
,
388 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
389 FIXME("%p %p %d\n", This
, pidl
, grfHLNF
);
393 static HRESULT WINAPI
BrowserService_SetNavigateState(
394 IBrowserService
* iface
,
397 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
398 FIXME("%p %d\n", This
, bnstate
);
402 static HRESULT WINAPI
BrowserService_GetNavigateState(
403 IBrowserService
* iface
,
406 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
407 FIXME("%p %p\n", This
, pbnstate
);
411 static HRESULT WINAPI
BrowserService_NotifyRedirect(
412 IBrowserService
* iface
,
414 PCIDLIST_ABSOLUTE pidl
,
417 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
418 FIXME("%p %p %p %p\n", This
, psv
, pidl
, pfDidBrowse
);
422 static HRESULT WINAPI
BrowserService_UpdateWindowList(
423 IBrowserService
* iface
)
425 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
430 static HRESULT WINAPI
BrowserService_UpdateBackForwardState(
431 IBrowserService
* iface
)
433 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
438 static HRESULT WINAPI
BrowserService_SetFlags(
439 IBrowserService
* iface
,
443 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
444 FIXME("%p %x %x\n", This
, dwFlags
, dwFlagMask
);
448 static HRESULT WINAPI
BrowserService_GetFlags(
449 IBrowserService
* iface
,
452 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
453 FIXME("%p %p\n", This
, pdwFlags
);
457 static HRESULT WINAPI
BrowserService_CanNavigateNow(
458 IBrowserService
* iface
)
460 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
465 static HRESULT WINAPI
BrowserService_GetPidl(
466 IBrowserService
* iface
,
467 PIDLIST_ABSOLUTE
*ppidl
)
469 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
470 FIXME("%p %p\n", This
, ppidl
);
474 static HRESULT WINAPI
BrowserService_SetReferrer(
475 IBrowserService
* iface
,
476 PCIDLIST_ABSOLUTE pidl
)
478 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
479 FIXME("%p %p\n", This
, pidl
);
483 static DWORD WINAPI
BrowserService_GetBrowserIndex(
484 IBrowserService
* iface
)
486 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
491 static HRESULT WINAPI
BrowserService_GetBrowserByIndex(
492 IBrowserService
* iface
,
496 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
497 FIXME("%p %x %p\n", This
, dwID
, ppunk
);
501 static HRESULT WINAPI
BrowserService_GetHistoryObject(
502 IBrowserService
* iface
,
507 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
508 FIXME("%p %p %p %p\n", This
, ppole
, pstm
, ppbc
);
512 static HRESULT WINAPI
BrowserService_SetHistoryObject(
513 IBrowserService
* iface
,
517 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
518 FIXME("%p %p %d\n", This
, pole
, fIsLocalAnchor
);
522 static HRESULT WINAPI
BrowserService_CacheOLEServer(
523 IBrowserService
* iface
,
526 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
527 FIXME("%p %p\n", This
, pole
);
531 static HRESULT WINAPI
BrowserService_GetSetCodePage(
532 IBrowserService
* iface
,
536 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
537 FIXME("%p %p %p\n", This
, pvarIn
, pvarOut
);
541 static HRESULT WINAPI
BrowserService_OnHttpEquiv(
542 IBrowserService
* iface
,
548 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
549 FIXME("%p %p %d %p %p\n", This
, psv
, fDone
, pvarargIn
, pvarargOut
);
553 static HRESULT WINAPI
BrowserService_GetPalette(
554 IBrowserService
* iface
,
557 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
558 FIXME("%p %p\n", This
, hpal
);
562 static HRESULT WINAPI
BrowserService_RegisterWindow(
563 IBrowserService
* iface
,
567 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
568 FIXME("%p %d %d\n", This
, fForceRegister
, swc
);
572 static const IBrowserServiceVtbl BrowserServiceVtbl
= {
573 BrowserService_QueryInterface
,
574 BrowserService_AddRef
,
575 BrowserService_Release
,
576 BrowserService_GetParentSite
,
577 BrowserService_SetTitle
,
578 BrowserService_GetTitle
,
579 BrowserService_GetOleObject
,
580 BrowserService_GetTravelLog
,
581 BrowserService_ShowControlWindow
,
582 BrowserService_IsControlWindowShown
,
583 BrowserService_IEGetDisplayName
,
584 BrowserService_IEParseDisplayName
,
585 BrowserService_DisplayParseError
,
586 BrowserService_NavigateToPidl
,
587 BrowserService_SetNavigateState
,
588 BrowserService_GetNavigateState
,
589 BrowserService_NotifyRedirect
,
590 BrowserService_UpdateWindowList
,
591 BrowserService_UpdateBackForwardState
,
592 BrowserService_SetFlags
,
593 BrowserService_GetFlags
,
594 BrowserService_CanNavigateNow
,
595 BrowserService_GetPidl
,
596 BrowserService_SetReferrer
,
597 BrowserService_GetBrowserIndex
,
598 BrowserService_GetBrowserByIndex
,
599 BrowserService_GetHistoryObject
,
600 BrowserService_SetHistoryObject
,
601 BrowserService_CacheOLEServer
,
602 BrowserService_GetSetCodePage
,
603 BrowserService_OnHttpEquiv
,
604 BrowserService_GetPalette
,
605 BrowserService_RegisterWindow
608 static inline ShellBrowser
*impl_from_IDocObjectService(IDocObjectService
*iface
)
610 return CONTAINING_RECORD(iface
, ShellBrowser
, IDocObjectService_iface
);
613 static HRESULT WINAPI
DocObjectService_QueryInterface(
614 IDocObjectService
* iface
,
618 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
619 return IShellBrowser_QueryInterface(&This
->IShellBrowser_iface
, riid
, ppvObject
);
622 static ULONG WINAPI
DocObjectService_AddRef(
623 IDocObjectService
* iface
)
625 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
626 return IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
629 static ULONG WINAPI
DocObjectService_Release(
630 IDocObjectService
* iface
)
632 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
633 return IShellBrowser_Release(&This
->IShellBrowser_iface
);
636 static HRESULT WINAPI
DocObjectService_FireBeforeNavigate2(
637 IDocObjectService
* iface
,
638 IDispatch
*pDispatch
,
641 LPCWSTR lpszFrameName
,
648 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
649 VARIANT var_url
, var_flags
, var_frame_name
, var_post_data
, var_post_data2
, var_headers
;
650 VARIANTARG params
[7];
651 DISPPARAMS dp
= {params
, NULL
, 7, 0};
652 VARIANT_BOOL cancel
= VARIANT_FALSE
;
653 SAFEARRAY
*post_data
;
655 TRACE("%p %p %s %x %s %p %d %s %d %p\n", This
, pDispatch
, debugstr_w(lpszUrl
),
656 dwFlags
, debugstr_w(lpszFrameName
), pPostData
, cbPostData
,
657 debugstr_w(lpszHeaders
), fPlayNavSound
, pfCancel
);
660 post_data
= SafeArrayCreateVector(VT_UI1
, 0, cbPostData
);
662 return E_OUTOFMEMORY
;
663 memcpy(post_data
->pvData
, pPostData
, cbPostData
);
668 V_VT(params
) = VT_BOOL
|VT_BYREF
;
669 V_BOOLREF(params
) = &cancel
;
671 V_VT(params
+1) = (VT_BYREF
|VT_VARIANT
);
672 V_VARIANTREF(params
+1) = &var_headers
;
673 V_VT(&var_headers
) = VT_BSTR
;
674 V_BSTR(&var_headers
) = lpszHeaders
? SysAllocString(lpszHeaders
) : NULL
;
676 V_VT(params
+2) = (VT_BYREF
|VT_VARIANT
);
677 V_VARIANTREF(params
+2) = &var_post_data2
;
678 V_VT(&var_post_data2
) = (VT_BYREF
|VT_VARIANT
);
679 V_VARIANTREF(&var_post_data2
) = &var_post_data
;
682 V_VT(&var_post_data
) = VT_UI1
|VT_ARRAY
;
683 V_ARRAY(&var_post_data
) = post_data
;
685 V_VT(&var_post_data
) = VT_EMPTY
;
688 V_VT(params
+3) = (VT_BYREF
|VT_VARIANT
);
689 V_VARIANTREF(params
+3) = &var_frame_name
;
690 V_VT(&var_frame_name
) = VT_BSTR
;
691 V_BSTR(&var_frame_name
) = lpszFrameName
? SysAllocString(lpszFrameName
) : NULL
;
693 V_VT(params
+4) = (VT_BYREF
|VT_VARIANT
);
694 V_VARIANTREF(params
+4) = &var_flags
;
695 V_VT(&var_flags
) = VT_I4
;
696 V_I4(&var_flags
) = 0;
698 V_VT(params
+5) = (VT_BYREF
|VT_VARIANT
);
699 V_VARIANTREF(params
+5) = &var_url
;
700 V_VT(&var_url
) = VT_BSTR
;
701 V_BSTR(&var_url
) = SysAllocString(lpszUrl
);
703 V_VT(params
+6) = (VT_DISPATCH
);
704 V_DISPATCH(params
+6) = (IDispatch
*)This
->doc_host
->wb
;
706 /* Keep reference to This. It may be released in event handler. */
707 IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
710 call_sink(This
->doc_host
->cps
.wbe2
, DISPID_BEFORENAVIGATE2
, &dp
);
713 IShellBrowser_Release(&This
->IShellBrowser_iface
);
715 SysFreeString(V_BSTR(&var_url
));
716 SysFreeString(V_BSTR(&var_headers
));
717 SysFreeString(V_BSTR(&var_frame_name
));
718 SafeArrayDestroy(post_data
);
720 *pfCancel
= !!cancel
;
724 static HRESULT WINAPI
DocObjectService_FireNavigateComplete2(
725 IDocObjectService
* iface
,
726 IHTMLWindow2
*pHTMLWindow2
,
729 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
730 DocHost
*doc_host
= This
->doc_host
;
731 IHTMLPrivateWindow
*priv_window
;
732 VARIANTARG params
[2];
733 DISPPARAMS dp
= {params
, NULL
, 2, 0};
738 TRACE("%p %p %x\n", This
, pHTMLWindow2
, dwFlags
);
740 if(doc_host
->travellog
.loading_pos
!= -1) {
741 WARN("histupdate not notified\n");
742 doc_host
->travellog
.position
= doc_host
->travellog
.loading_pos
;
743 doc_host
->travellog
.loading_pos
= -1;
746 hres
= IHTMLWindow2_QueryInterface(pHTMLWindow2
, &IID_IHTMLPrivateWindow
, (void**)&priv_window
);
750 hres
= IHTMLPrivateWindow_GetAddressBarUrl(priv_window
, &url
);
751 IHTMLPrivateWindow_Release(priv_window
);
755 TRACE("got URL %s\n", debugstr_w(url
));
756 set_dochost_url(This
->doc_host
, url
);
758 V_VT(params
) = (VT_BYREF
|VT_VARIANT
);
759 V_VARIANTREF(params
) = &url_var
;
761 V_VT(params
+1) = VT_DISPATCH
;
762 V_DISPATCH(params
+1) = (IDispatch
*)doc_host
->wb
;
764 V_VT(&url_var
) = VT_BSTR
;
765 V_BSTR(&url_var
) = url
;
767 /* Keep reference to This. It may be released in event handler. */
768 IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
771 call_sink(This
->doc_host
->cps
.wbe2
, DISPID_NAVIGATECOMPLETE2
, &dp
);
776 This
->doc_host
->busy
= VARIANT_FALSE
;
777 IShellBrowser_Release(&This
->IShellBrowser_iface
);
781 static HRESULT WINAPI
DocObjectService_FireDownloadBegin(
782 IDocObjectService
* iface
)
784 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
789 static HRESULT WINAPI
DocObjectService_FireDownloadComplete(
790 IDocObjectService
* iface
)
792 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
797 static HRESULT WINAPI
DocObjectService_FireDocumentComplete(
798 IDocObjectService
* iface
,
799 IHTMLWindow2
*pHTMLWindow
,
802 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
803 IHTMLPrivateWindow
*priv_window
;
804 VARIANTARG params
[2];
805 DISPPARAMS dp
= {params
, NULL
, 2, 0};
810 TRACE("%p %p %x\n", This
, pHTMLWindow
, dwFlags
);
812 hres
= IHTMLWindow2_QueryInterface(pHTMLWindow
, &IID_IHTMLPrivateWindow
, (void**)&priv_window
);
816 hres
= IHTMLPrivateWindow_GetAddressBarUrl(priv_window
, &url
);
817 IHTMLPrivateWindow_Release(priv_window
);
821 TRACE("got URL %s\n", debugstr_w(url
));
823 V_VT(params
) = (VT_BYREF
|VT_VARIANT
);
824 V_VARIANTREF(params
) = &url_var
;
826 V_VT(params
+1) = VT_DISPATCH
;
827 V_DISPATCH(params
+1) = (IDispatch
*)This
->doc_host
->wb
;
829 V_VT(&url_var
) = VT_BSTR
;
830 V_BSTR(&url_var
) = url
;
832 /* Keep reference to This. It may be released in event handler. */
833 IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
836 call_sink(This
->doc_host
->cps
.wbe2
, DISPID_DOCUMENTCOMPLETE
, &dp
);
841 This
->doc_host
->busy
= VARIANT_FALSE
;
843 IShellBrowser_Release(&This
->IShellBrowser_iface
);
847 static HRESULT WINAPI
DocObjectService_UpdateDesktopComponent(
848 IDocObjectService
* iface
,
849 IHTMLWindow2
*pHTMLWindow
)
851 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
852 FIXME("%p %p\n", This
, pHTMLWindow
);
856 static HRESULT WINAPI
DocObjectService_GetPendingUrl(
857 IDocObjectService
* iface
,
858 BSTR
*pbstrPendingUrl
)
860 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
861 FIXME("%p %p\n", This
, pbstrPendingUrl
);
865 static HRESULT WINAPI
DocObjectService_ActiveElementChanged(
866 IDocObjectService
* iface
,
867 IHTMLElement
*pHTMLElement
)
869 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
870 FIXME("%p %p\n", This
, pHTMLElement
);
874 static HRESULT WINAPI
DocObjectService_GetUrlSearchComponent(
875 IDocObjectService
* iface
,
878 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
879 FIXME("%p %p\n", This
, pbstrSearch
);
883 static HRESULT WINAPI
DocObjectService_IsErrorUrl(
884 IDocObjectService
* iface
,
888 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
889 FIXME("%p %s %p\n", This
, debugstr_w(lpszUrl
), pfIsError
);
895 static const IDocObjectServiceVtbl DocObjectServiceVtbl
= {
896 DocObjectService_QueryInterface
,
897 DocObjectService_AddRef
,
898 DocObjectService_Release
,
899 DocObjectService_FireBeforeNavigate2
,
900 DocObjectService_FireNavigateComplete2
,
901 DocObjectService_FireDownloadBegin
,
902 DocObjectService_FireDownloadComplete
,
903 DocObjectService_FireDocumentComplete
,
904 DocObjectService_UpdateDesktopComponent
,
905 DocObjectService_GetPendingUrl
,
906 DocObjectService_ActiveElementChanged
,
907 DocObjectService_GetUrlSearchComponent
,
908 DocObjectService_IsErrorUrl
911 HRESULT
create_browser_service(DocHost
*doc_host
, ShellBrowser
**ret
)
915 sb
= heap_alloc(sizeof(ShellBrowser
));
917 return E_OUTOFMEMORY
;
919 sb
->IShellBrowser_iface
.lpVtbl
= &ShellBrowserVtbl
;
920 sb
->IBrowserService_iface
.lpVtbl
= &BrowserServiceVtbl
;
921 sb
->IDocObjectService_iface
.lpVtbl
= &DocObjectServiceVtbl
;
924 sb
->doc_host
= doc_host
;
930 void detach_browser_service(ShellBrowser
*sb
)
933 IShellBrowser_Release(&sb
->IShellBrowser_iface
);
936 static inline NewWindowManager
*impl_from_INewWindowManager(INewWindowManager
*iface
)
938 return CONTAINING_RECORD(iface
, NewWindowManager
, INewWindowManager_iface
);
941 static HRESULT WINAPI
NewWindowManager_QueryInterface(INewWindowManager
*iface
, REFIID riid
, void **ppv
)
943 NewWindowManager
*This
= impl_from_INewWindowManager(iface
);
945 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
946 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
947 *ppv
= &This
->INewWindowManager_iface
;
948 }else if(IsEqualGUID(&IID_INewWindowManager
, riid
)) {
949 TRACE("(%p)->(IID_INewWindowManager %p)\n", This
, ppv
);
950 *ppv
= &This
->INewWindowManager_iface
;
952 WARN("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
954 return E_NOINTERFACE
;
957 IUnknown_AddRef((IUnknown
*)*ppv
);
961 static ULONG WINAPI
NewWindowManager_AddRef(INewWindowManager
*iface
)
963 NewWindowManager
*This
= impl_from_INewWindowManager(iface
);
965 TRACE("(%p)\n", This
);
967 return IOleClientSite_AddRef(&This
->doc_host
->IOleClientSite_iface
);
970 static ULONG WINAPI
NewWindowManager_Release(INewWindowManager
*iface
)
972 NewWindowManager
*This
= impl_from_INewWindowManager(iface
);
974 TRACE("(%p)\n", This
);
976 return IOleClientSite_Release(&This
->doc_host
->IOleClientSite_iface
);
979 static HRESULT WINAPI
NewWindowManager_EvaluateNewWindow(INewWindowManager
*iface
, LPCWSTR pszUrl
,
980 LPCWSTR pszName
, LPCWSTR pszUrlContext
, LPCWSTR pszFeatures
, BOOL fReplace
, DWORD dwFlags
,
981 DWORD dwUserActionTime
)
983 NewWindowManager
*This
= impl_from_INewWindowManager(iface
);
984 FIXME("(%p)->(%s %s %s %s %x %x %d)\n", This
, debugstr_w(pszUrl
), debugstr_w(pszName
), debugstr_w(pszUrlContext
),
985 debugstr_w(pszFeatures
), fReplace
, dwFlags
, dwUserActionTime
);
989 static const INewWindowManagerVtbl NewWindowManagerVtbl
= {
990 NewWindowManager_QueryInterface
,
991 NewWindowManager_AddRef
,
992 NewWindowManager_Release
,
993 NewWindowManager_EvaluateNewWindow
996 void NewWindowManager_Init(DocHost
*doc_host
)
998 doc_host
->nwm
.INewWindowManager_iface
.lpVtbl
= &NewWindowManagerVtbl
;
999 doc_host
->nwm
.doc_host
= doc_host
;