| Index: src/plugin/PluginAppNamespaceClient.cpp |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/src/plugin/PluginAppNamespaceClient.cpp |
| @@ -0,0 +1,93 @@ |
| +/* |
| + * This file is part of Adblock Plus <https://adblockplus.org/>, |
| + * Copyright (C) 2006-2015 Eyeo GmbH |
| + * |
| + * Adblock Plus is free software: you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License version 3 as |
| + * published by the Free Software Foundation. |
| + * |
| + * Adblock Plus is distributed in the hope that it will be useful, |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| + * GNU General Public License for more details. |
| + * |
| + * You should have received a copy of the GNU General Public License |
| + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| + */ |
| + |
| +#include "PluginStdAfx.h" |
| + |
| +#include "PluginAppNamespaceClient.h" |
| +#include "PluginClient.h" |
| +#include "PluginWbPassThrough.h" |
| + |
| + |
| +typedef PassthroughAPP::CMetaFactory<PassthroughAPP::CComClassFactoryProtocol,WBPassthru> MetaFactory; |
|
Eric
2015/05/16 21:00:48
This definition could go in an anonymous namespace
|
| + |
| + |
| +CPluginAppNamespaceClient::CPluginAppNamespaceClient() : m_spCFHTTP(NULL), m_spCFHTTPS(NULL) |
| +{ |
| + // Should only be called once |
| + // We register mime filters here |
| + // Register asynchronous protocol |
| + CComPtr<IInternetSession> spSession; |
|
Eric
2015/05/16 21:00:48
We're also calling 'CoInternetGetSession' in the d
|
| + HRESULT hr = ::CoInternetGetSession(0, &spSession, 0); |
| + if (FAILED(hr) || !spSession) |
| + { |
| + DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SESSION, PLUGIN_ERROR_SESSION_GET_INTERNET_SESSION, "MimeClient::CoInternetGetSession failed"); |
| + return; |
| + } |
| + |
| + hr = MetaFactory::CreateInstance(CLSID_HttpProtocol, &m_spCFHTTP); |
|
Eric
2015/05/16 21:00:48
The invocation of 'CreateInstance' starts a memory
|
| + if (FAILED(hr) || !m_spCFHTTP) |
| + { |
| + DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SESSION, PLUGIN_ERROR_SESSION_CREATE_HTTP_INSTANCE, "MimeClient::CreateInstance failed"); |
| + return; |
| + } |
| + |
| + hr = spSession->RegisterNameSpace(m_spCFHTTP, CLSID_HttpProtocol, L"http", 0, 0, 0); |
| + if (FAILED(hr)) |
| + { |
| + DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SESSION, PLUGIN_ERROR_SESSION_REGISTER_HTTP_NAMESPACE, "MimeClient::RegisterNameSpace failed"); |
| + return; |
| + } |
| + |
| + hr = MetaFactory::CreateInstance(CLSID_HttpSProtocol, &m_spCFHTTPS); |
| + if (FAILED(hr) || !m_spCFHTTPS) |
| + { |
| + DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SESSION, PLUGIN_ERROR_SESSION_CREATE_HTTPS_INSTANCE, "MimeClient::CreateInstance failed"); |
| + return; |
|
Eric
2015/05/16 21:00:48
If the "http" handler registers correctly, but thi
|
| + } |
| + |
| + hr = spSession->RegisterNameSpace(m_spCFHTTPS, CLSID_HttpSProtocol, L"https", 0, 0, 0); |
| + if (FAILED(hr)) |
| + { |
| + DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SESSION, PLUGIN_ERROR_SESSION_REGISTER_HTTPS_NAMESPACE, "MimeClient::RegisterNameSpace failed"); |
| + return; |
| + } |
| + |
| +} |
| + |
| + |
| +CPluginAppNamespaceClient::~CPluginAppNamespaceClient() |
| +{ |
| + CComPtr<IInternetSession> spSession; |
| + |
| + ::CoInternetGetSession(0, &spSession, 0); |
| + if (spSession) |
| + { |
|
Eric
2015/05/16 21:00:48
We are manually unregistering both name spaces wit
|
| + spSession->UnregisterNameSpace(m_spCFHTTP, L"http"); |
| + if (m_spCFHTTP != NULL) |
| + { |
| + m_spCFHTTP.Release(); |
| + m_spCFHTTP = NULL; |
| + } |
| + spSession->UnregisterNameSpace(m_spCFHTTPS, L"https"); |
| + if (m_spCFHTTPS != NULL) |
| + { |
| + m_spCFHTTPS.Release(); |
| + m_spCFHTTPS = NULL; |
| + } |
| + |
| + } |
| +} |