Module: wine Branch: master Commit: 979b42d749d89f021bdc5554f542d27c47d5572a URL: http://source.winehq.org/git/wine.git/?a=commit;h=979b42d749d89f021bdc5554f5...
Author: Jacek Caban jacek@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); } }