Jacek Caban : mshtml: Store IMoniker in BSCallback.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 9 10:37:24 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: aa760c8b1e3ad91064944ab527476157a8edd9d2
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=aa760c8b1e3ad91064944ab527476157a8edd9d2

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Aug  9 16:37:48 2006 +0200

mshtml: Store IMoniker in BSCallback.

---

 dlls/mshtml/mshtml_private.h |    7 +++++--
 dlls/mshtml/navigate.c       |   18 +++++++++++++-----
 dlls/mshtml/persist.c        |    4 ++--
 3 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index e34c0fa..8f293f8 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -172,6 +172,8 @@ struct BSCallback {
     nsIStreamListener *nslistener;
     nsISupports *nscontext;
 
+    IMoniker *mon;
+
     nsProtocolStream *nsstream;
 };
 
@@ -308,8 +310,9 @@ void nsAString_Finish(nsAString*);
 
 nsIInputStream *create_nsstream(const char*,PRInt32);
 
-BSCallback *create_bscallback(HTMLDocument*,LPCOLESTR);
-HRESULT start_binding(BSCallback*,IMoniker*);
+BSCallback *create_bscallback(HTMLDocument*,IMoniker*);
+HRESULT start_binding(BSCallback*);
+void create_hidden_hwnd(HTMLDocument*);
 
 IHlink *Hlink_Create(void);
 IHTMLSelectionObject *HTMLSelectionObject_Create(nsISelection*);
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index 2b0b194..c37c475 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -131,7 +131,7 @@ static nsresult NSAPI nsInputStream_Read
     PRUint32 written = 0;
     nsresult nsres;
 
-    FIXME("(%p)->(%p %p %ld %p)\n", This, aWriter, aClousure, aCount, _retval);
+    TRACE("(%p)->(%p %p %ld %p)\n", This, aWriter, aClousure, aCount, _retval);
 
     if(!This->buf_size)
         return S_OK;
@@ -246,6 +246,8 @@ static ULONG WINAPI BindStatusCallback_R
             nsISupports_Release(This->nscontext);
         if(This->nsstream)
             nsIInputStream_Release(NSINSTREAM(This->nsstream));
+        if(This->mon)
+            IMoniker_Release(This->mon);
         mshtml_free(This->headers);
         mshtml_free(This);
     }
@@ -564,7 +566,7 @@ static const IServiceProviderVtbl Servic
     BSCServiceProvider_QueryService
 };
 
-BSCallback *create_bscallback(HTMLDocument *doc, LPCOLESTR url)
+BSCallback *create_bscallback(HTMLDocument *doc, IMoniker *mon)
 {
     BSCallback *ret = mshtml_alloc(sizeof(BSCallback));
 
@@ -582,6 +584,10 @@ BSCallback *create_bscallback(HTMLDocume
     ret->nscontext = NULL;
     ret->nsstream = NULL;
 
+    if(mon)
+        IMoniker_AddRef(mon);
+    ret->mon = mon;
+
     return ret;
 }
 
@@ -663,7 +669,7 @@ void hlink_frame_navigate(HTMLDocument *
     IMoniker *mon;
     IHlink *hlink;
 
-    callback = create_bscallback(doc, uri);
+    callback = create_bscallback(doc, NULL);
 
     if(post_data_stream) {
         parse_post_data(post_data_stream, &callback->headers, &callback->post_data,
@@ -692,7 +698,7 @@ void hlink_frame_navigate(HTMLDocument *
 
 }
 
-HRESULT start_binding(BSCallback *bscallback, IMoniker *mon)
+HRESULT start_binding(BSCallback *bscallback)
 {
     IStream *str = NULL;
     IBindCtx *bctx;
@@ -704,7 +710,7 @@ HRESULT start_binding(BSCallback *bscall
         return hres;
     }
 
-    hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&str);
+    hres = IMoniker_BindToStorage(bscallback->mon, bctx, NULL, &IID_IStream, (void**)&str);
     IBindCtx_Release(bctx);
     if(FAILED(hres)) {
         WARN("BindToStorage failed: %08lx\n", hres);
@@ -714,5 +720,7 @@ HRESULT start_binding(BSCallback *bscall
     if(str)
         IStream_Release(str);
 
+    IMoniker_Release(bscallback->mon);
+    bscallback->mon = NULL;
     return S_OK;
 }
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index d935aaf..d6a49f5 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -215,7 +215,7 @@ static HRESULT WINAPI PersistMoniker_Loa
         }
     }
 
-    bscallback = create_bscallback(This, url);
+    bscallback = create_bscallback(This, pimkName);
 
     if(This->nscontainer) {
         nsIInputStream *post_data_stream = get_post_data_stream(pibc);
@@ -249,7 +249,7 @@ static HRESULT WINAPI PersistMoniker_Loa
     if(pibc)
         FIXME("not supported pibc\n");
 
-    hres = start_binding(bscallback, pimkName);
+    hres = start_binding(bscallback);
 
     IBindStatusCallback_Release(STATUSCLB(bscallback));
     CoTaskMemFree(url);




More information about the wine-cvs mailing list