Hi all,
The last release of Wine Gecko caused a few regressions. Thanks to Alexandre, we've found the reason. The bad news is that the fix requires a new package. I've uploaded RC build to:
http://gerwazy.lo3.wroc.pl/~jcaban/wine/wine_gecko-0.9.1.cab
I'd appreciate if people that observe the regression (mostly strange crashed) could retest bugs with this build. To do so, you will need the new package and the attached patch. Also quick tests with random apps would be nice. This is a bugfix release based on the same codebase as 0.9.0 version so I don't expect any new regressions with it.
Also the last debug version was accidentally stripped. It will be fixed in this release. I'm planning to do the release tomorrow, so it will be in Git on Friday.
Thanks, Jacek
From 35f651d05f04dc80dd85451d48428d5c6174dac2 Mon Sep 17 00:00:00 2001
From: Jacek Caban jacek@codeweavers.com Date: Thu, 5 Feb 2009 00:17:09 +0100 Subject: [PATCH] mshtml: Wine Gecko 0.9.1 release. To: wine-patches wine-patches@winehq.org
--- dlls/mshtml/htmldoc.c | 4 +++- dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/mutation.c | 15 +++++++++++++++ dlls/mshtml/nsembed.c | 4 +++- dlls/mshtml/nsiface.idl | 3 ++- 5 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 32da2e0..a6aa73f 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -214,8 +214,10 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface)
ConnectionPointContainer_Destroy(&This->cp_container);
- if(This->nsdoc) + if(This->nsdoc) { + remove_mutation_observer(This->nscontainer, This->nsdoc); nsIDOMHTMLDocument_Release(This->nsdoc); + } if(This->nscontainer) NSContainer_Release(This->nscontainer);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index e4c98a7..b67c485 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -510,6 +510,7 @@ void NSContainer_Release(NSContainer*);
void init_mutation(NSContainer*); void set_mutation_observer(NSContainer*,nsIDOMHTMLDocument*); +void remove_mutation_observer(NSContainer*,nsIDOMHTMLDocument*);
void HTMLDocument_LockContainer(HTMLDocument*,BOOL); void show_context_menu(HTMLDocument*,DWORD,POINT*,IDispatch*); diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index ea61d5a..ab9649c 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -55,6 +55,21 @@ void set_mutation_observer(NSContainer *nscontainer, nsIDOMHTMLDocument *nshtmld nsIDOMNSDocument_Release(nsdoc); }
+void remove_mutation_observer(NSContainer *nscontainer, nsIDOMHTMLDocument *nshtmldoc) +{ + nsIDOMNSDocument *nsdoc; + nsresult nsres; + + nsres = nsIDOMHTMLDocument_QueryInterface(nshtmldoc, &IID_nsIDOMNSDocument, (void**)&nsdoc); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMNSDocument: %08x\n", nsres); + return; + } + + nsIDOMNSDocument_WineRemoveObserver(nsdoc, NSDOCOBS(nscontainer)); + nsIDOMNSDocument_Release(nsdoc); +} + #define IE_MAJOR_VERSION 7 #define IE_MINOR_VERSION 0
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index ee386ac..16ac21e 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -857,8 +857,10 @@ void update_nsdocument(HTMLDocument *doc) return; }
- if(doc->nsdoc) + if(doc->nsdoc) { + remove_mutation_observer(doc->nscontainer, doc->nsdoc); nsIDOMHTMLDocument_Release(doc->nsdoc); + }
doc->nsdoc = nsdoc;
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl index 219ac0c..ef64145 100644 --- a/dlls/mshtml/nsiface.idl +++ b/dlls/mshtml/nsiface.idl @@ -23,7 +23,7 @@ * compatible with XPCOM, usable in C code. */
-cpp_quote("#define GECKO_VERSION "0.9.0"") +cpp_quote("#define GECKO_VERSION "0.9.1"") cpp_quote("#define GECKO_VERSION_STRING "Wine Gecko " GECKO_VERSION")
import "wtypes.idl"; @@ -873,6 +873,7 @@ interface nsIDOMNSDocument : nsISupports
/* Wine extensions */ nsresult WineAddObserver(nsIDocumentObserver *aObserver); + nsresult WineRemoveObserver(nsIDocumentObserver *aObserver); nsresult WineAddScriptRunner(nsIRunnable *aRunnable); }