Jacek Caban : mshtml: Store current moniker in HTMLDocument.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jun 12 06:30:43 CDT 2007


Module: wine
Branch: master
Commit: 54d2a44794be928453e86ae307cfa671a512587f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=54d2a44794be928453e86ae307cfa671a512587f

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jun 11 17:27:19 2007 +0200

mshtml: Store current moniker in HTMLDocument.

---

 dlls/mshtml/htmldoc.c        |    1 +
 dlls/mshtml/mshtml_private.h |    2 ++
 dlls/mshtml/nsio.c           |    8 ++++++++
 dlls/mshtml/persist.c        |   12 ++++++++++++
 4 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index a009cc8..ba57e3e 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -159,6 +159,7 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface)
             IOleDocumentView_SetInPlaceSite(DOCVIEW(This), NULL);
 
         set_document_bscallback(This, NULL);
+        set_current_mon(This, NULL);
 
         if(This->tooltips_hwnd)
             DestroyWindow(This->tooltips_hwnd);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 74ee748..b9f5d61 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -101,6 +101,7 @@ struct HTMLDocument {
     IOleInPlaceFrame *frame;
 
     BSCallback *bscallback;
+    IMoniker *mon;
 
     HWND hwnd;
     HWND tooltips_hwnd;
@@ -353,6 +354,7 @@ BSCallback *create_bscallback(IMoniker*);
 HRESULT start_binding(BSCallback*);
 HRESULT load_stream(BSCallback*,IStream*);
 void set_document_bscallback(HTMLDocument*,BSCallback*);
+void set_current_mon(HTMLDocument*,IMoniker*);
 
 IHlink *Hlink_Create(void);
 IHTMLSelectionObject *HTMLSelectionObject_Create(nsISelection*);
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 735a577..1b50d2e 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -690,6 +690,11 @@ static nsresult NSAPI nsChannel_AsyncOpen(nsIHttpChannel *iface, nsIStreamListen
                 return This->channel
                     ?  nsIChannel_AsyncOpen(This->channel, aListener, aContext)
                     : NS_ERROR_UNEXPECTED;
+
+            hres = create_mon_for_nschannel(This, &mon);
+            if(FAILED(hres))
+                return NS_ERROR_UNEXPECTED;
+            set_current_mon(container->doc, mon);
         }
     }
 
@@ -715,6 +720,9 @@ static nsresult NSAPI nsChannel_AsyncOpen(nsIHttpChannel *iface, nsIStreamListen
 
         nsres = nsIChannel_AsyncOpen(This->channel, aListener, aContext);
 
+        if(mon)
+            IMoniker_Release(mon);
+
         if(NS_FAILED(nsres) && (This->load_flags & LOAD_INITIAL_DOCUMENT_URI))
             return WINE_NS_LOAD_FROM_MONIKER;
         return nsres;
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 8959cd7..4b3df40 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -113,6 +113,15 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
     return ret;
 }
 
+void set_current_mon(HTMLDocument *This, IMoniker *mon)
+{
+    if(This->mon)
+        IMoniker_Release(This->mon);
+    if(mon)
+        IMoniker_AddRef(mon);
+    This->mon = mon;
+}
+
 static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BOOL *bind_complete)
 {
     BSCallback *bscallback;
@@ -165,6 +174,8 @@ static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BO
 
     TRACE("got url: %s\n", debugstr_w(url));
 
+    set_current_mon(This, mon);
+
     if(This->client) {
         VARIANT silent, offline;
         IOleCommandTarget *cmdtrg = NULL;
@@ -655,4 +666,5 @@ void HTMLDocument_Persist_Init(HTMLDocument *This)
     This->lpPersistStreamInitVtbl = &PersistStreamInitVtbl;
 
     This->bscallback = NULL;
+    This->mon = NULL;
 }




More information about the wine-cvs mailing list