Jacek Caban : mshtml: Moved QueryService call to hlink_frame_navigate.
Alexandre Julliard
julliard at winehq.org
Mon Oct 12 11:19:41 CDT 2009
Module: wine
Branch: master
Commit: 4aa48041fafaff23751be52edfd0f212ddd18ddb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4aa48041fafaff23751be52edfd0f212ddd18ddb
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sun Oct 11 21:11:03 2009 +0200
mshtml: Moved QueryService call to hlink_frame_navigate.
---
dlls/mshtml/mshtml_private.h | 2 +-
dlls/mshtml/navigate.c | 43 +++++++++++++++++++++++++----------------
dlls/mshtml/nsio.c | 20 +-----------------
3 files changed, 29 insertions(+), 36 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 2f9e1e5..4a10fea 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -607,7 +607,7 @@ BOOL install_wine_gecko(BOOL);
HRESULT nsuri_to_url(LPCWSTR,BOOL,BSTR*);
-void hlink_frame_navigate(HTMLDocument*,IHlinkFrame*,LPCWSTR,nsIInputStream*,DWORD);
+HRESULT hlink_frame_navigate(HTMLDocument*,LPCWSTR,nsIInputStream*,DWORD);
void call_property_onchanged(ConnectionPoint*,DISPID);
HRESULT call_set_active_object(IOleInPlaceUIWindow*,IOleInPlaceActiveObject*);
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index 267168f..7c7376d 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -1160,14 +1160,27 @@ void channelbsc_set_channel(nsChannelBSC *This, nsChannel *channel, nsIStreamLis
}
}
-void hlink_frame_navigate(HTMLDocument *doc, IHlinkFrame *hlink_frame,
- LPCWSTR uri, nsIInputStream *post_data_stream, DWORD hlnf)
+HRESULT hlink_frame_navigate(HTMLDocument *doc, LPCWSTR url,
+ nsIInputStream *post_data_stream, DWORD hlnf)
{
+ IHlinkFrame *hlink_frame;
+ IServiceProvider *sp;
BSCallback *callback;
IBindCtx *bindctx;
IMoniker *mon;
IHlink *hlink;
- HRESULT hr;
+ HRESULT hres;
+
+ hres = IOleClientSite_QueryInterface(doc->doc_obj->client, &IID_IServiceProvider,
+ (void**)&sp);
+ if(FAILED(hres))
+ return hres;
+
+ hres = IServiceProvider_QueryService(sp, &IID_IHlinkFrame, &IID_IHlinkFrame,
+ (void**)&hlink_frame);
+ IServiceProvider_Release(sp);
+ if(FAILED(hres))
+ return hres;
callback = &create_channelbsc(NULL)->bsc;
@@ -1178,21 +1191,15 @@ void hlink_frame_navigate(HTMLDocument *doc, IHlinkFrame *hlink_frame,
debugstr_an(callback->post_data, callback->post_data_len));
}
- hr = CreateAsyncBindCtx(0, STATUSCLB(callback), NULL, &bindctx);
- if (FAILED(hr)) {
- IBindStatusCallback_Release(STATUSCLB(callback));
- return;
- }
+ hres = CreateAsyncBindCtx(0, STATUSCLB(callback), NULL, &bindctx);
+ if(SUCCEEDED(hres))
+ hres = CoCreateInstance(&CLSID_StdHlink, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IHlink, (LPVOID*)&hlink);
- hr = CoCreateInstance(&CLSID_StdHlink, NULL, CLSCTX_INPROC_SERVER, &IID_IHlink, (LPVOID*)&hlink);
- if (FAILED(hr)) {
- IBindCtx_Release(bindctx);
- IBindStatusCallback_Release(STATUSCLB(callback));
- return;
- }
+ if(SUCCEEDED(hres))
+ hres = CreateURLMoniker(NULL, url, &mon);
- hr = CreateURLMoniker(NULL, uri, &mon);
- if (SUCCEEDED(hr)) {
+ if(SUCCEEDED(hres)) {
IHlink_SetMonikerReference(hlink, 0, mon, NULL);
if(hlnf & HLNF_OPENINNEWWINDOW) {
@@ -1200,11 +1207,13 @@ void hlink_frame_navigate(HTMLDocument *doc, IHlinkFrame *hlink_frame,
IHlink_SetTargetFrameName(hlink, wszBlank); /* FIXME */
}
- IHlinkFrame_Navigate(hlink_frame, hlnf, bindctx, STATUSCLB(callback), hlink);
+ hres = IHlinkFrame_Navigate(hlink_frame, hlnf, bindctx, STATUSCLB(callback), hlink);
IMoniker_Release(mon);
}
+ IHlinkFrame_Release(hlink_frame);
IBindCtx_Release(bindctx);
IBindStatusCallback_Release(STATUSCLB(callback));
+ return hres;
}
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 8ed0108..f10db48 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -128,7 +128,6 @@ static BOOL exec_shldocvw_67(HTMLDocumentObj *doc, LPCWSTR url)
static BOOL before_async_open(nsChannel *channel, NSContainer *container)
{
HTMLDocumentObj *doc = container->doc;
- IServiceProvider *service_provider;
DWORD hlnf = 0;
LPCWSTR uri;
HRESULT hres;
@@ -154,23 +153,8 @@ static BOOL before_async_open(nsChannel *channel, NSContainer *container)
if(!hlnf && !exec_shldocvw_67(doc, uri))
return FALSE;
- hres = IOleClientSite_QueryInterface(doc->client, &IID_IServiceProvider,
- (void**)&service_provider);
- if(SUCCEEDED(hres)) {
- IHlinkFrame *hlink_frame;
-
- hres = IServiceProvider_QueryService(service_provider, &IID_IHlinkFrame,
- &IID_IHlinkFrame, (void**)&hlink_frame);
- IServiceProvider_Release(service_provider);
- if(SUCCEEDED(hres)) {
- hlink_frame_navigate(&doc->basedoc, hlink_frame, uri, channel->post_data_stream, hlnf);
- IHlinkFrame_Release(hlink_frame);
-
- return FALSE;
- }
- }
-
- return TRUE;
+ hres = hlink_frame_navigate(&doc->basedoc, uri, channel->post_data_stream, hlnf);
+ return hres != S_OK;
}
#define NSCHANNEL_THIS(iface) DEFINE_THIS(nsChannel, HttpChannel, iface)
More information about the wine-cvs
mailing list