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
28 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(ieframe
);
32 static inline ShellBrowser
*impl_from_IShellBrowser(IShellBrowser
*iface
)
34 return CONTAINING_RECORD(iface
, ShellBrowser
, IShellBrowser_iface
);
37 static HRESULT WINAPI
ShellBrowser_QueryInterface(IShellBrowser
* iface
, REFIID riid
, void **ppv
)
39 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
41 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
42 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
43 *ppv
= &This
->IShellBrowser_iface
;
44 }else if(IsEqualGUID(&IID_IOleWindow
, riid
)) {
45 TRACE("(%p)->(IID_IOleWindow %p)\n", This
, ppv
);
46 *ppv
= &This
->IShellBrowser_iface
;
47 }else if(IsEqualGUID(&IID_IShellBrowser
, riid
)) {
48 TRACE("(%p)->(IID_IShellBrowser %p)\n", This
, ppv
);
49 *ppv
= &This
->IShellBrowser_iface
;
50 }else if(IsEqualGUID(&IID_IBrowserService
, riid
)) {
51 TRACE("(%p)->(IID_IBrowserService %p)\n", This
, ppv
);
52 *ppv
= &This
->IBrowserService_iface
;
53 }else if(IsEqualGUID(&IID_IDocObjectService
, riid
)) {
54 TRACE("(%p)->(IID_IDocObjectService %p)\n", This
, ppv
);
55 *ppv
= &This
->IDocObjectService_iface
;
57 FIXME("%p %s %p\n", This
, debugstr_guid(riid
), ppv
);
62 IUnknown_AddRef((IUnknown
*)*ppv
);
66 static ULONG WINAPI
ShellBrowser_AddRef(
69 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
70 LONG ref
= InterlockedIncrement(&This
->ref
);
72 TRACE("(%p) ref=%d\n", This
, ref
);
77 static ULONG WINAPI
ShellBrowser_Release(IShellBrowser
* iface
)
79 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
80 LONG ref
= InterlockedDecrement(&This
->ref
);
82 TRACE("(%p) ref=%d\n", This
, ref
);
85 assert(!This
->doc_host
);
92 static HRESULT WINAPI
ShellBrowser_GetWindow(
96 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
97 FIXME("%p %p\n", This
, phwnd
);
101 static HRESULT WINAPI
ShellBrowser_ContextSensitiveHelp(
102 IShellBrowser
* iface
,
105 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
106 FIXME("%p %d\n", This
, fEnterMode
);
110 static HRESULT WINAPI
ShellBrowser_InsertMenusSB(
111 IShellBrowser
* iface
,
113 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
115 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
116 FIXME("%p %p %p\n", This
, hmenuShared
, lpMenuWidths
);
120 static HRESULT WINAPI
ShellBrowser_SetMenuSB(
121 IShellBrowser
* iface
,
123 HOLEMENU holemenuReserved
,
124 HWND hwndActiveObject
)
126 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
127 FIXME("%p %p %p %p\n", This
, hmenuShared
, holemenuReserved
, hwndActiveObject
);
131 static HRESULT WINAPI
ShellBrowser_RemoveMenusSB(
132 IShellBrowser
* iface
,
135 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
136 FIXME("%p %p\n", This
, hmenuShared
);
140 static HRESULT WINAPI
ShellBrowser_SetStatusTextSB(
141 IShellBrowser
* iface
,
142 LPCOLESTR pszStatusText
)
144 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
145 FIXME("%p %s\n", This
, debugstr_w(pszStatusText
));
149 static HRESULT WINAPI
ShellBrowser_EnableModelessSB(
150 IShellBrowser
* iface
,
153 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
154 FIXME("%p %d\n", This
, fEnable
);
158 static HRESULT WINAPI
ShellBrowser_TranslateAcceleratorSB(
159 IShellBrowser
* iface
,
163 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
164 FIXME("%p %p %d\n", This
, pmsg
, (int)wID
);
168 static HRESULT WINAPI
ShellBrowser_BrowseObject(
169 IShellBrowser
* iface
,
173 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
174 FIXME("%p %p %u\n", This
, pidl
, wFlags
);
178 static HRESULT WINAPI
ShellBrowser_GetViewStateStream(
179 IShellBrowser
* iface
,
183 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
184 FIXME("%p %x %p\n", This
, grfMode
, ppStrm
);
188 static HRESULT WINAPI
ShellBrowser_GetControlWindow(
189 IShellBrowser
* iface
,
193 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
194 FIXME("%p %u %p\n", This
, id
, phwnd
);
198 static HRESULT WINAPI
ShellBrowser_SendControlMsg(
199 IShellBrowser
* iface
,
206 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
207 FIXME("%p %u %u %p\n", This
, id
, uMsg
, pret
);
211 static HRESULT WINAPI
ShellBrowser_QueryActiveShellView(
212 IShellBrowser
* iface
,
215 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
216 FIXME("%p %p\n", This
, ppshv
);
220 static HRESULT WINAPI
ShellBrowser_OnViewWindowActive(
221 IShellBrowser
* iface
,
224 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
225 FIXME("%p %p\n", This
, pshv
);
229 static HRESULT WINAPI
ShellBrowser_SetToolbarItems(
230 IShellBrowser
* iface
,
231 LPTBBUTTONSB lpButtons
,
235 ShellBrowser
*This
= impl_from_IShellBrowser(iface
);
236 FIXME("%p %p %u %u\n", This
, lpButtons
, nButtons
, uFlags
);
240 static const IShellBrowserVtbl ShellBrowserVtbl
= {
241 ShellBrowser_QueryInterface
,
243 ShellBrowser_Release
,
244 ShellBrowser_GetWindow
,
245 ShellBrowser_ContextSensitiveHelp
,
246 ShellBrowser_InsertMenusSB
,
247 ShellBrowser_SetMenuSB
,
248 ShellBrowser_RemoveMenusSB
,
249 ShellBrowser_SetStatusTextSB
,
250 ShellBrowser_EnableModelessSB
,
251 ShellBrowser_TranslateAcceleratorSB
,
252 ShellBrowser_BrowseObject
,
253 ShellBrowser_GetViewStateStream
,
254 ShellBrowser_GetControlWindow
,
255 ShellBrowser_SendControlMsg
,
256 ShellBrowser_QueryActiveShellView
,
257 ShellBrowser_OnViewWindowActive
,
258 ShellBrowser_SetToolbarItems
261 static inline ShellBrowser
*impl_from_IBrowserService(IBrowserService
*iface
)
263 return CONTAINING_RECORD(iface
, ShellBrowser
, IBrowserService_iface
);
266 static HRESULT WINAPI
BrowserService_QueryInterface(
267 IBrowserService
* iface
,
271 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
272 return IShellBrowser_QueryInterface(&This
->IShellBrowser_iface
, riid
, ppvObject
);
275 static ULONG WINAPI
BrowserService_AddRef(
276 IBrowserService
*iface
)
278 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
279 return IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
282 static ULONG WINAPI
BrowserService_Release(
283 IBrowserService
* iface
)
285 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
286 return IShellBrowser_Release(&This
->IShellBrowser_iface
);
289 static HRESULT WINAPI
BrowserService_GetParentSite(
290 IBrowserService
* iface
,
291 IOleInPlaceSite
**ppipsite
)
293 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
294 FIXME("%p %p\n", This
, ppipsite
);
298 static HRESULT WINAPI
BrowserService_SetTitle(
299 IBrowserService
* iface
,
303 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
304 FIXME("%p %p %s\n", This
, psv
, debugstr_w(pszName
));
308 static HRESULT WINAPI
BrowserService_GetTitle(
309 IBrowserService
* iface
,
314 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
315 FIXME("%p %p %p %d\n", This
, psv
, pszName
, cchName
);
319 static HRESULT WINAPI
BrowserService_GetOleObject(
320 IBrowserService
* iface
,
323 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
324 FIXME("%p %p\n", This
, ppobjv
);
328 static HRESULT WINAPI
BrowserService_GetTravelLog(
329 IBrowserService
* iface
,
332 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
333 FIXME("%p %p\n", This
, pptl
);
337 static HRESULT WINAPI
BrowserService_ShowControlWindow(
338 IBrowserService
* iface
,
342 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
343 FIXME("%p %u %d\n", This
, id
, fShow
);
347 static HRESULT WINAPI
BrowserService_IsControlWindowShown(
348 IBrowserService
* iface
,
352 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
353 FIXME("%p %u %p\n", This
, id
, pfShown
);
357 static HRESULT WINAPI
BrowserService_IEGetDisplayName(
358 IBrowserService
* iface
,
359 PCIDLIST_ABSOLUTE pidl
,
363 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
364 FIXME("%p %p %p %u\n", This
, pidl
, pwszName
, uFlags
);
368 static HRESULT WINAPI
BrowserService_IEParseDisplayName(
369 IBrowserService
* iface
,
372 PIDLIST_ABSOLUTE
*ppidlOut
)
374 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
375 FIXME("%p %u %s %p\n", This
, uiCP
, debugstr_w(pwszPath
), ppidlOut
);
379 static HRESULT WINAPI
BrowserService_DisplayParseError(
380 IBrowserService
* iface
,
384 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
385 FIXME("%p %x %s\n", This
, hres
, debugstr_w(pwszPath
));
389 static HRESULT WINAPI
BrowserService_NavigateToPidl(
390 IBrowserService
* iface
,
391 PCIDLIST_ABSOLUTE pidl
,
394 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
395 FIXME("%p %p %d\n", This
, pidl
, grfHLNF
);
399 static HRESULT WINAPI
BrowserService_SetNavigateState(
400 IBrowserService
* iface
,
403 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
404 FIXME("%p %d\n", This
, bnstate
);
408 static HRESULT WINAPI
BrowserService_GetNavigateState(
409 IBrowserService
* iface
,
412 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
413 FIXME("%p %p\n", This
, pbnstate
);
417 static HRESULT WINAPI
BrowserService_NotifyRedirect(
418 IBrowserService
* iface
,
420 PCIDLIST_ABSOLUTE pidl
,
423 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
424 FIXME("%p %p %p %p\n", This
, psv
, pidl
, pfDidBrowse
);
428 static HRESULT WINAPI
BrowserService_UpdateWindowList(
429 IBrowserService
* iface
)
431 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
436 static HRESULT WINAPI
BrowserService_UpdateBackForwardState(
437 IBrowserService
* iface
)
439 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
444 static HRESULT WINAPI
BrowserService_SetFlags(
445 IBrowserService
* iface
,
449 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
450 FIXME("%p %x %x\n", This
, dwFlags
, dwFlagMask
);
454 static HRESULT WINAPI
BrowserService_GetFlags(
455 IBrowserService
* iface
,
458 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
459 FIXME("%p %p\n", This
, pdwFlags
);
463 static HRESULT WINAPI
BrowserService_CanNavigateNow(
464 IBrowserService
* iface
)
466 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
471 static HRESULT WINAPI
BrowserService_GetPidl(
472 IBrowserService
* iface
,
473 PIDLIST_ABSOLUTE
*ppidl
)
475 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
476 FIXME("%p %p\n", This
, ppidl
);
480 static HRESULT WINAPI
BrowserService_SetReferrer(
481 IBrowserService
* iface
,
482 PCIDLIST_ABSOLUTE pidl
)
484 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
485 FIXME("%p %p\n", This
, pidl
);
489 static DWORD WINAPI
BrowserService_GetBrowserIndex(
490 IBrowserService
* iface
)
492 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
497 static HRESULT WINAPI
BrowserService_GetBrowserByIndex(
498 IBrowserService
* iface
,
502 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
503 FIXME("%p %x %p\n", This
, dwID
, ppunk
);
507 static HRESULT WINAPI
BrowserService_GetHistoryObject(
508 IBrowserService
* iface
,
513 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
514 FIXME("%p %p %p %p\n", This
, ppole
, pstm
, ppbc
);
518 static HRESULT WINAPI
BrowserService_SetHistoryObject(
519 IBrowserService
* iface
,
523 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
524 FIXME("%p %p %d\n", This
, pole
, fIsLocalAnchor
);
528 static HRESULT WINAPI
BrowserService_CacheOLEServer(
529 IBrowserService
* iface
,
532 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
533 FIXME("%p %p\n", This
, pole
);
537 static HRESULT WINAPI
BrowserService_GetSetCodePage(
538 IBrowserService
* iface
,
542 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
543 FIXME("%p %s %p\n", This
, debugstr_variant(pvarIn
), pvarOut
);
547 static HRESULT WINAPI
BrowserService_OnHttpEquiv(
548 IBrowserService
* iface
,
554 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
555 FIXME("%p %p %d %s %p\n", This
, psv
, fDone
, debugstr_variant(pvarargIn
), pvarargOut
);
559 static HRESULT WINAPI
BrowserService_GetPalette(
560 IBrowserService
* iface
,
563 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
564 FIXME("%p %p\n", This
, hpal
);
568 static HRESULT WINAPI
BrowserService_RegisterWindow(
569 IBrowserService
* iface
,
573 ShellBrowser
*This
= impl_from_IBrowserService(iface
);
574 FIXME("%p %d %d\n", This
, fForceRegister
, swc
);
578 static const IBrowserServiceVtbl BrowserServiceVtbl
= {
579 BrowserService_QueryInterface
,
580 BrowserService_AddRef
,
581 BrowserService_Release
,
582 BrowserService_GetParentSite
,
583 BrowserService_SetTitle
,
584 BrowserService_GetTitle
,
585 BrowserService_GetOleObject
,
586 BrowserService_GetTravelLog
,
587 BrowserService_ShowControlWindow
,
588 BrowserService_IsControlWindowShown
,
589 BrowserService_IEGetDisplayName
,
590 BrowserService_IEParseDisplayName
,
591 BrowserService_DisplayParseError
,
592 BrowserService_NavigateToPidl
,
593 BrowserService_SetNavigateState
,
594 BrowserService_GetNavigateState
,
595 BrowserService_NotifyRedirect
,
596 BrowserService_UpdateWindowList
,
597 BrowserService_UpdateBackForwardState
,
598 BrowserService_SetFlags
,
599 BrowserService_GetFlags
,
600 BrowserService_CanNavigateNow
,
601 BrowserService_GetPidl
,
602 BrowserService_SetReferrer
,
603 BrowserService_GetBrowserIndex
,
604 BrowserService_GetBrowserByIndex
,
605 BrowserService_GetHistoryObject
,
606 BrowserService_SetHistoryObject
,
607 BrowserService_CacheOLEServer
,
608 BrowserService_GetSetCodePage
,
609 BrowserService_OnHttpEquiv
,
610 BrowserService_GetPalette
,
611 BrowserService_RegisterWindow
614 static inline ShellBrowser
*impl_from_IDocObjectService(IDocObjectService
*iface
)
616 return CONTAINING_RECORD(iface
, ShellBrowser
, IDocObjectService_iface
);
619 static HRESULT WINAPI
DocObjectService_QueryInterface(
620 IDocObjectService
* iface
,
624 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
625 return IShellBrowser_QueryInterface(&This
->IShellBrowser_iface
, riid
, ppvObject
);
628 static ULONG WINAPI
DocObjectService_AddRef(
629 IDocObjectService
* iface
)
631 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
632 return IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
635 static ULONG WINAPI
DocObjectService_Release(
636 IDocObjectService
* iface
)
638 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
639 return IShellBrowser_Release(&This
->IShellBrowser_iface
);
642 static HRESULT WINAPI
DocObjectService_FireBeforeNavigate2(
643 IDocObjectService
* iface
,
644 IDispatch
*pDispatch
,
647 LPCWSTR lpszFrameName
,
654 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
655 VARIANT var_url
, var_flags
, var_frame_name
, var_post_data
, var_post_data2
, var_headers
;
656 VARIANTARG params
[7];
657 DISPPARAMS dp
= {params
, NULL
, 7, 0};
658 VARIANT_BOOL cancel
= VARIANT_FALSE
;
659 SAFEARRAY
*post_data
;
660 WCHAR file_path
[MAX_PATH
];
661 DWORD file_path_len
= ARRAY_SIZE(file_path
);
663 TRACE("%p %p %s %x %s %p %d %s %d %p\n", This
, pDispatch
, debugstr_w(lpszUrl
),
664 dwFlags
, debugstr_w(lpszFrameName
), pPostData
, cbPostData
,
665 debugstr_w(lpszHeaders
), fPlayNavSound
, pfCancel
);
668 post_data
= SafeArrayCreateVector(VT_UI1
, 0, cbPostData
);
670 return E_OUTOFMEMORY
;
671 memcpy(post_data
->pvData
, pPostData
, cbPostData
);
676 V_VT(params
) = VT_BOOL
|VT_BYREF
;
677 V_BOOLREF(params
) = &cancel
;
679 V_VT(params
+1) = (VT_BYREF
|VT_VARIANT
);
680 V_VARIANTREF(params
+1) = &var_headers
;
681 V_VT(&var_headers
) = VT_BSTR
;
682 V_BSTR(&var_headers
) = lpszHeaders
? SysAllocString(lpszHeaders
) : NULL
;
684 V_VT(params
+2) = (VT_BYREF
|VT_VARIANT
);
685 V_VARIANTREF(params
+2) = &var_post_data2
;
686 V_VT(&var_post_data2
) = (VT_BYREF
|VT_VARIANT
);
687 V_VARIANTREF(&var_post_data2
) = &var_post_data
;
690 V_VT(&var_post_data
) = VT_UI1
|VT_ARRAY
;
691 V_ARRAY(&var_post_data
) = post_data
;
693 V_VT(&var_post_data
) = VT_EMPTY
;
696 V_VT(params
+3) = (VT_BYREF
|VT_VARIANT
);
697 V_VARIANTREF(params
+3) = &var_frame_name
;
698 V_VT(&var_frame_name
) = VT_BSTR
;
699 V_BSTR(&var_frame_name
) = lpszFrameName
? SysAllocString(lpszFrameName
) : NULL
;
701 V_VT(params
+4) = (VT_BYREF
|VT_VARIANT
);
702 V_VARIANTREF(params
+4) = &var_flags
;
703 V_VT(&var_flags
) = VT_I4
;
704 V_I4(&var_flags
) = 0;
706 V_VT(params
+5) = (VT_BYREF
|VT_VARIANT
);
707 V_VARIANTREF(params
+5) = &var_url
;
708 V_VT(&var_url
) = VT_BSTR
;
709 if(PathCreateFromUrlW(lpszUrl
, file_path
, &file_path_len
, 0) == S_OK
)
710 V_BSTR(&var_url
) = SysAllocString(file_path
);
712 V_BSTR(&var_url
) = SysAllocString(lpszUrl
);
714 V_VT(params
+6) = (VT_DISPATCH
);
715 V_DISPATCH(params
+6) = (IDispatch
*)This
->doc_host
->wb
;
717 /* Keep reference to This. It may be released in event handler. */
718 IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
721 call_sink(This
->doc_host
->cps
.wbe2
, DISPID_BEFORENAVIGATE2
, &dp
);
724 IShellBrowser_Release(&This
->IShellBrowser_iface
);
726 SysFreeString(V_BSTR(&var_url
));
727 SysFreeString(V_BSTR(&var_headers
));
728 SysFreeString(V_BSTR(&var_frame_name
));
729 SafeArrayDestroy(post_data
);
731 *pfCancel
= !!cancel
;
735 static HRESULT WINAPI
DocObjectService_FireNavigateComplete2(
736 IDocObjectService
* iface
,
737 IHTMLWindow2
*pHTMLWindow2
,
740 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
741 DocHost
*doc_host
= This
->doc_host
;
742 IHTMLPrivateWindow
*priv_window
;
743 VARIANTARG params
[2];
744 DISPPARAMS dp
= {params
, NULL
, 2, 0};
749 TRACE("%p %p %x\n", This
, pHTMLWindow2
, dwFlags
);
751 update_navigation_commands(This
->doc_host
);
753 if(doc_host
->travellog
.loading_pos
!= -1) {
754 WARN("histupdate not notified\n");
755 doc_host
->travellog
.position
= doc_host
->travellog
.loading_pos
;
756 doc_host
->travellog
.loading_pos
= -1;
759 hres
= IHTMLWindow2_QueryInterface(pHTMLWindow2
, &IID_IHTMLPrivateWindow
, (void**)&priv_window
);
763 hres
= IHTMLPrivateWindow_GetAddressBarUrl(priv_window
, &url
);
764 IHTMLPrivateWindow_Release(priv_window
);
768 TRACE("got URL %s\n", debugstr_w(url
));
769 set_dochost_url(This
->doc_host
, url
);
771 V_VT(params
) = (VT_BYREF
|VT_VARIANT
);
772 V_VARIANTREF(params
) = &url_var
;
774 V_VT(params
+1) = VT_DISPATCH
;
775 V_DISPATCH(params
+1) = (IDispatch
*)doc_host
->wb
;
777 V_VT(&url_var
) = VT_BSTR
;
778 V_BSTR(&url_var
) = url
;
780 /* Keep reference to This. It may be released in event handler. */
781 IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
784 call_sink(This
->doc_host
->cps
.wbe2
, DISPID_NAVIGATECOMPLETE2
, &dp
);
789 IShellBrowser_Release(&This
->IShellBrowser_iface
);
793 static HRESULT WINAPI
DocObjectService_FireDownloadBegin(
794 IDocObjectService
* iface
)
796 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
801 static HRESULT WINAPI
DocObjectService_FireDownloadComplete(
802 IDocObjectService
* iface
)
804 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
809 static HRESULT WINAPI
DocObjectService_FireDocumentComplete(
810 IDocObjectService
* iface
,
811 IHTMLWindow2
*pHTMLWindow
,
814 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
815 IHTMLPrivateWindow
*priv_window
;
816 VARIANTARG params
[2];
817 DISPPARAMS dp
= {params
, NULL
, 2, 0};
822 TRACE("%p %p %x\n", This
, pHTMLWindow
, dwFlags
);
824 hres
= IHTMLWindow2_QueryInterface(pHTMLWindow
, &IID_IHTMLPrivateWindow
, (void**)&priv_window
);
828 hres
= IHTMLPrivateWindow_GetAddressBarUrl(priv_window
, &url
);
829 IHTMLPrivateWindow_Release(priv_window
);
833 TRACE("got URL %s\n", debugstr_w(url
));
835 V_VT(params
) = (VT_BYREF
|VT_VARIANT
);
836 V_VARIANTREF(params
) = &url_var
;
838 V_VT(params
+1) = VT_DISPATCH
;
839 V_DISPATCH(params
+1) = (IDispatch
*)This
->doc_host
->wb
;
841 V_VT(&url_var
) = VT_BSTR
;
842 V_BSTR(&url_var
) = url
;
844 /* Keep reference to This. It may be released in event handler. */
845 IShellBrowser_AddRef(&This
->IShellBrowser_iface
);
848 call_sink(This
->doc_host
->cps
.wbe2
, DISPID_DOCUMENTCOMPLETE
, &dp
);
853 IShellBrowser_Release(&This
->IShellBrowser_iface
);
857 static HRESULT WINAPI
DocObjectService_UpdateDesktopComponent(
858 IDocObjectService
* iface
,
859 IHTMLWindow2
*pHTMLWindow
)
861 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
862 FIXME("%p %p\n", This
, pHTMLWindow
);
866 static HRESULT WINAPI
DocObjectService_GetPendingUrl(
867 IDocObjectService
* iface
,
868 BSTR
*pbstrPendingUrl
)
870 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
871 FIXME("%p %p\n", This
, pbstrPendingUrl
);
875 static HRESULT WINAPI
DocObjectService_ActiveElementChanged(
876 IDocObjectService
* iface
,
877 IHTMLElement
*pHTMLElement
)
879 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
880 FIXME("%p %p\n", This
, pHTMLElement
);
884 static HRESULT WINAPI
DocObjectService_GetUrlSearchComponent(
885 IDocObjectService
* iface
,
888 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
889 FIXME("%p %p\n", This
, pbstrSearch
);
893 static HRESULT WINAPI
DocObjectService_IsErrorUrl(
894 IDocObjectService
* iface
,
898 ShellBrowser
*This
= impl_from_IDocObjectService(iface
);
899 FIXME("%p %s %p\n", This
, debugstr_w(lpszUrl
), pfIsError
);
905 static const IDocObjectServiceVtbl DocObjectServiceVtbl
= {
906 DocObjectService_QueryInterface
,
907 DocObjectService_AddRef
,
908 DocObjectService_Release
,
909 DocObjectService_FireBeforeNavigate2
,
910 DocObjectService_FireNavigateComplete2
,
911 DocObjectService_FireDownloadBegin
,
912 DocObjectService_FireDownloadComplete
,
913 DocObjectService_FireDocumentComplete
,
914 DocObjectService_UpdateDesktopComponent
,
915 DocObjectService_GetPendingUrl
,
916 DocObjectService_ActiveElementChanged
,
917 DocObjectService_GetUrlSearchComponent
,
918 DocObjectService_IsErrorUrl
921 HRESULT
create_browser_service(DocHost
*doc_host
, ShellBrowser
**ret
)
925 sb
= heap_alloc(sizeof(ShellBrowser
));
927 return E_OUTOFMEMORY
;
929 sb
->IShellBrowser_iface
.lpVtbl
= &ShellBrowserVtbl
;
930 sb
->IBrowserService_iface
.lpVtbl
= &BrowserServiceVtbl
;
931 sb
->IDocObjectService_iface
.lpVtbl
= &DocObjectServiceVtbl
;
934 sb
->doc_host
= doc_host
;
940 void detach_browser_service(ShellBrowser
*sb
)
943 IShellBrowser_Release(&sb
->IShellBrowser_iface
);
946 static inline NewWindowManager
*impl_from_INewWindowManager(INewWindowManager
*iface
)
948 return CONTAINING_RECORD(iface
, NewWindowManager
, INewWindowManager_iface
);
951 static HRESULT WINAPI
NewWindowManager_QueryInterface(INewWindowManager
*iface
, REFIID riid
, void **ppv
)
953 NewWindowManager
*This
= impl_from_INewWindowManager(iface
);
955 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
956 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
957 *ppv
= &This
->INewWindowManager_iface
;
958 }else if(IsEqualGUID(&IID_INewWindowManager
, riid
)) {
959 TRACE("(%p)->(IID_INewWindowManager %p)\n", This
, ppv
);
960 *ppv
= &This
->INewWindowManager_iface
;
962 WARN("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
964 return E_NOINTERFACE
;
967 IUnknown_AddRef((IUnknown
*)*ppv
);
971 static ULONG WINAPI
NewWindowManager_AddRef(INewWindowManager
*iface
)
973 NewWindowManager
*This
= impl_from_INewWindowManager(iface
);
975 TRACE("(%p)\n", This
);
977 return IOleClientSite_AddRef(&This
->doc_host
->IOleClientSite_iface
);
980 static ULONG WINAPI
NewWindowManager_Release(INewWindowManager
*iface
)
982 NewWindowManager
*This
= impl_from_INewWindowManager(iface
);
984 TRACE("(%p)\n", This
);
986 return IOleClientSite_Release(&This
->doc_host
->IOleClientSite_iface
);
989 static HRESULT WINAPI
NewWindowManager_EvaluateNewWindow(INewWindowManager
*iface
, LPCWSTR pszUrl
,
990 LPCWSTR pszName
, LPCWSTR pszUrlContext
, LPCWSTR pszFeatures
, BOOL fReplace
, DWORD dwFlags
,
991 DWORD dwUserActionTime
)
993 NewWindowManager
*This
= impl_from_INewWindowManager(iface
);
994 FIXME("(%p)->(%s %s %s %s %x %x %d)\n", This
, debugstr_w(pszUrl
), debugstr_w(pszName
), debugstr_w(pszUrlContext
),
995 debugstr_w(pszFeatures
), fReplace
, dwFlags
, dwUserActionTime
);
999 static const INewWindowManagerVtbl NewWindowManagerVtbl
= {
1000 NewWindowManager_QueryInterface
,
1001 NewWindowManager_AddRef
,
1002 NewWindowManager_Release
,
1003 NewWindowManager_EvaluateNewWindow
1006 void NewWindowManager_Init(DocHost
*doc_host
)
1008 doc_host
->nwm
.INewWindowManager_iface
.lpVtbl
= &NewWindowManagerVtbl
;
1009 doc_host
->nwm
.doc_host
= doc_host
;