Jacek Caban : mshtml: Don't access BSCallback directly in nsembed.c.
Alexandre Julliard
julliard at winehq.org
Mon Mar 24 07:54:47 CDT 2008
Module: wine
Branch: master
Commit: 979b42d749d89f021bdc5554f542d27c47d5572a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=979b42d749d89f021bdc5554f542d27c47d5572a
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sun Mar 23 02:15:39 2008 +0100
mshtml: Don't access BSCallback directly in nsembed.c.
---
dlls/mshtml/mshtml_private.h | 1 +
dlls/mshtml/navigate.c | 7 +++++++
dlls/mshtml/nsembed.c | 26 ++++++++++++++++----------
3 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 66bb11d..2936f76 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -435,6 +435,7 @@ void set_document_bscallback(HTMLDocument*,BSCallback*);
void set_current_mon(HTMLDocument*,IMoniker*);
void channelbsc_set_channel(BSCallback*,nsChannel*,nsIStreamListener*,nsISupports*);
+IMoniker *get_channelbsc_mon(BSCallback*);
IHTMLSelectionObject *HTMLSelectionObject_Create(HTMLDocument*,nsISelection*);
IHTMLTxtRange *HTMLTxtRange_Create(HTMLDocument*,nsIDOMRange*);
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index 66cea25..e3ac735 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -866,6 +866,13 @@ HRESULT start_binding(HTMLDocument *doc, BSCallback *bscallback, IBindCtx *bctx)
return S_OK;
}
+IMoniker *get_channelbsc_mon(BSCallback *This)
+{
+ if(This->mon)
+ IMoniker_AddRef(This->mon);
+ return This->mon;
+}
+
void set_document_bscallback(HTMLDocument *doc, BSCallback *callback)
{
BSCallback *iter;
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index efdad04..5d9b247 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -1138,16 +1138,22 @@ static nsresult NSAPI nsURIContentListener_OnStartURIOpen(nsIURIContentListener
nsIWineURI_SetNSContainer(wine_uri, This);
nsIWineURI_SetIsDocumentURI(wine_uri, TRUE);
- if(This->bscallback && This->bscallback->mon) {
- LPWSTR wine_url;
- HRESULT hres;
-
- hres = IMoniker_GetDisplayName(This->bscallback->mon, NULL, 0, &wine_url);
- if(SUCCEEDED(hres)) {
- nsIWineURI_SetWineURL(wine_uri, wine_url);
- CoTaskMemFree(wine_url);
- }else {
- WARN("GetDisplayName failed: %08x\n", hres);
+ if(This->bscallback) {
+ IMoniker *mon = get_channelbsc_mon(This->bscallback);
+
+ if(mon) {
+ LPWSTR wine_url;
+ HRESULT hres;
+
+ hres = IMoniker_GetDisplayName(mon, NULL, 0, &wine_url);
+ if(SUCCEEDED(hres)) {
+ nsIWineURI_SetWineURL(wine_uri, wine_url);
+ CoTaskMemFree(wine_url);
+ }else {
+ WARN("GetDisplayName failed: %08x\n", hres);
+ }
+
+ IMoniker_Release(mon);
}
}
More information about the wine-cvs
mailing list