Module: wine Branch: master Commit: d356d15225aa0e717ed0b5cf40718ea513a6d909 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d356d15225aa0e717ed0b5cf40...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Dec 18 14:08:13 2008 +0100
mshtml: Use stored nsINetUtil interface.
---
dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/nsembed.c | 2 ++ dlls/mshtml/nsio.c | 35 ++++++++++++++++++++++------------- 3 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 60e250d..0d02f26 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -500,6 +500,7 @@ BOOL load_gecko(BOOL); void close_gecko(void); void register_nsservice(nsIComponentRegistrar*,nsIServiceManager*); void init_nsio(nsIComponentManager*,nsIComponentRegistrar*); +void release_nsio(void); BOOL install_wine_gecko(BOOL);
HRESULT nsuri_to_url(LPCWSTR,BSTR*); diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index 923604d..34bc6d5 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -865,6 +865,8 @@ void close_gecko(void) { TRACE("()\n");
+ release_nsio(); + if(pCompMgr) nsIComponentManager_Release(pCompMgr);
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index 31fb897..0669463 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -47,6 +47,7 @@ static const IID NS_IOSERVICE_CID = {0x9ac9e770, 0x18bc, 0x11d3, {0x93, 0x37, 0x00, 0x10, 0x4b, 0xa0, 0xfd, 0x40}};
static nsIIOService *nsio = NULL; +static nsINetUtil *net_util;
static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
@@ -2260,21 +2261,9 @@ static nsrefcnt NSAPI nsNetUtil_Release(nsINetUtil *iface) static nsresult NSAPI nsNetUtil_ParseContentType(nsINetUtil *iface, const nsACString *aTypeHeader, nsACString *aCharset, PRBool *aHadCharset, nsACString *aContentType) { - nsINetUtil *net_util; - nsresult nsres; - TRACE("(%p %p %p %p)\n", aTypeHeader, aCharset, aHadCharset, aContentType);
- nsres = nsIIOService_QueryInterface(nsio, &IID_nsINetUtil, (void**)&net_util); - if(NS_FAILED(nsres)) { - WARN("Could not get nsINetUtil interface: %08x\n", nsres); - return nsres; - } - - nsres = nsINetUtil_ParseContentType(net_util, aTypeHeader, aCharset, aHadCharset, aContentType); - - nsINetUtil_Release(net_util); - return nsres; + return nsINetUtil_ParseContentType(net_util, aTypeHeader, aCharset, aHadCharset, aContentType); }
static const nsINetUtilVtbl nsNetUtilVtbl = { @@ -2380,6 +2369,13 @@ void init_nsio(nsIComponentManager *component_manager, nsIComponentRegistrar *re return; }
+ nsres = nsIIOService_QueryInterface(nsio, &IID_nsINetUtil, (void**)&net_util); + if(NS_FAILED(nsres)) { + WARN("Could not get nsINetUtil interface: %08x\n", nsres); + nsIIOService_Release(nsio); + return; + } + nsres = nsIComponentRegistrar_UnregisterFactory(registrar, &NS_IOSERVICE_CID, old_factory); nsIFactory_Release(old_factory); if(NS_FAILED(nsres)) @@ -2390,3 +2386,16 @@ void init_nsio(nsIComponentManager *component_manager, nsIComponentRegistrar *re if(NS_FAILED(nsres)) ERR("RegisterFactory failed: %08x\n", nsres); } + +void release_nsio(void) +{ + if(net_util) { + nsINetUtil_Release(net_util); + net_util = NULL; + } + + if(nsio) { + nsIIOService_Release(nsio); + nsio = NULL; + } +}