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