Jacek Caban : mshtml: Use stored nsINetUtil interface.

Alexandre Julliard julliard at winehq.org
Thu Dec 18 08:08:57 CST 2008


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

Author: Jacek Caban <jacek at 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;
+    }
+}




More information about the wine-cvs mailing list