]> git.saurik.com Git - wxWidgets.git/commitdiff
Explicitly unregister custom wxWebViewIE namespaces when we are done with them. Also...
authorSteve Lamerton <steve.lamerton@gmail.com>
Sun, 21 Oct 2012 20:33:48 +0000 (20:33 +0000)
committerSteve Lamerton <steve.lamerton@gmail.com>
Sun, 21 Oct 2012 20:33:48 +0000 (20:33 +0000)
Closes #14749

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72715 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/webview_ie.h
src/msw/webview_ie.cpp

index ca6feb492419d4f011df1c0f4ff9e1fe926cecd3..9e038ebe3d6aa27cfa4c6002f920d16856bef6ee 100644 (file)
@@ -241,7 +241,10 @@ public:
 class ClassFactory : public IClassFactory
 {
 public:
-    ClassFactory(wxSharedPtr<wxWebViewHandler> handler) : m_handler(handler) {}
+    ClassFactory(wxSharedPtr<wxWebViewHandler> handler) : m_handler(handler) 
+    { AddRef(); }
+
+    wxString GetName() { return m_handler->GetName(); }
 
     //IClassFactory
     HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter,
index 723c4ed096663fd2644ab5635a558bafacfcadcb..0eb1be1c7e3ff6db6fe0f80d675eed6b4d3352d2 100644 (file)
@@ -104,9 +104,27 @@ bool wxWebViewIE::Create(wxWindow* parent,
 
 wxWebViewIE::~wxWebViewIE()
 {
-    for(unsigned int i = 0; i < m_factories.size(); i++)
+    wxDynamicLibrary urlMon(wxT("urlmon.dll"));
+    if(urlMon.HasSymbol(wxT("CoInternetGetSession")))
     {
-        m_factories[i]->Release();
+        typedef HRESULT (WINAPI *CoInternetGetSession_t)(DWORD,
+                                                         wxIInternetSession**,
+                                                         DWORD);
+        wxDYNLIB_FUNCTION(CoInternetGetSession_t, CoInternetGetSession, urlMon);
+
+        wxIInternetSession* session;
+        HRESULT res = (*pfnCoInternetGetSession)(0, &session, 0);
+        if(FAILED(res))
+        {
+            wxFAIL_MSG("Could not retrive internet session");
+        }
+
+        for(unsigned int i = 0; i < m_factories.size(); i++)
+        {
+            session->UnregisterNameSpace(m_factories[i], 
+                                        (m_factories[i]->GetName()).wc_str());
+            m_factories[i]->Release();
+        }
     }
     FindClear();
 }