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