| OLD | NEW |
| 1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
| 2 | 2 |
| 3 #include "PluginWbPassThrough.h" | 3 #include "PluginWbPassThrough.h" |
| 4 #include "PluginClient.h" | 4 #include "PluginClient.h" |
| 5 #include "PluginClientFactory.h" | 5 #include "PluginClientFactory.h" |
| 6 #include "PluginFilter.h" | 6 #include "PluginFilter.h" |
| 7 #include "PluginSettings.h" | 7 #include "PluginSettings.h" |
| 8 #include "PluginClass.h" | 8 #include "PluginClass.h" |
| 9 #include "PluginSystem.h" | 9 #include "PluginSystem.h" |
| 10 #include <WinInet.h> | 10 #include <WinInet.h> |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 } | 51 } |
| 52 // It is important to have this check last, since it is rather generic, and mi
ght overlay text/html, for example | 52 // It is important to have this check last, since it is rather generic, and mi
ght overlay text/html, for example |
| 53 if (mimeType.Find(L"xml") >= 0) | 53 if (mimeType.Find(L"xml") >= 0) |
| 54 { | 54 { |
| 55 return CFilter::contentTypeXmlHttpRequest; | 55 return CFilter::contentTypeXmlHttpRequest; |
| 56 } | 56 } |
| 57 | 57 |
| 58 return CFilter::contentTypeAny; | 58 return CFilter::contentTypeAny; |
| 59 } | 59 } |
| 60 | 60 |
| 61 int WBPassthruSink::GetContentTypeFromURL(const CString& src) | 61 int WBPassthruSink::GetContentTypeFromURL(const std::wstring& src) |
| 62 { | 62 { |
| 63 CString srcExt = src; | 63 CString srcLegacy = ToCString(src); |
| 64 CString srcExt = srcLegacy; |
| 64 | 65 |
| 65 int pos = 0; | 66 int pos = 0; |
| 66 if ((pos = src.Find('?')) > 0) | 67 if ((pos = srcLegacy.Find('?')) > 0) |
| 67 { | 68 { |
| 68 srcExt = src.Left(pos); | 69 srcExt = srcLegacy.Left(pos); |
| 69 } | 70 } |
| 70 | 71 |
| 71 int lastDotIndex = srcExt.ReverseFind('.'); | 72 int lastDotIndex = srcExt.ReverseFind('.'); |
| 72 if (lastDotIndex < 0) | 73 if (lastDotIndex < 0) |
| 73 return CFilter::contentTypeAny; | 74 return CFilter::contentTypeAny; |
| 74 CString ext = srcExt.Mid(lastDotIndex); | 75 CString ext = srcExt.Mid(lastDotIndex); |
| 75 if (ext == L".jpg" || ext == L".gif" || ext == L".png" || ext == L".jpeg") | 76 if (ext == L".jpg" || ext == L".gif" || ext == L".png" || ext == L".jpeg") |
| 76 { | 77 { |
| 77 return CFilter::contentTypeImage; | 78 return CFilter::contentTypeImage; |
| 78 } | 79 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 92 { | 93 { |
| 93 return CFilter::contentTypeObject; | 94 return CFilter::contentTypeObject; |
| 94 } | 95 } |
| 95 else if (ext == L".jsp" || ext == L".php" || ext == L".html") | 96 else if (ext == L".jsp" || ext == L".php" || ext == L".html") |
| 96 { | 97 { |
| 97 return CFilter::contentTypeSubdocument; | 98 return CFilter::contentTypeSubdocument; |
| 98 } | 99 } |
| 99 return CFilter::contentTypeAny; | 100 return CFilter::contentTypeAny; |
| 100 } | 101 } |
| 101 | 102 |
| 102 int WBPassthruSink::GetContentType(const CString& mimeType, const std::wstring&
domain, const CString& src) | 103 int WBPassthruSink::GetContentType(const CString& mimeType, const std::wstring&
domain, const std::wstring& src) |
| 103 { | 104 { |
| 104 // No referer or mime type | 105 // No referer or mime type |
| 105 // BINDSTRING_XDR_ORIGIN works only for IE v8+ | 106 // BINDSTRING_XDR_ORIGIN works only for IE v8+ |
| 106 if (mimeType.IsEmpty() && domain.empty() && CPluginClient::GetInstance()->GetI
EVersion() >= 8) | 107 if (mimeType.IsEmpty() && domain.empty() && CPluginClient::GetInstance()->GetI
EVersion() >= 8) |
| 107 { | 108 { |
| 108 return CFilter::contentTypeXmlHttpRequest; | 109 return CFilter::contentTypeXmlHttpRequest; |
| 109 } | 110 } |
| 110 int contentType = GetContentTypeFromMimeType(mimeType); | 111 int contentType = GetContentTypeFromMimeType(mimeType); |
| 111 if (contentType == CFilter::contentTypeAny) | 112 if (contentType == CFilter::contentTypeAny) |
| 112 { | 113 { |
| 113 contentType = GetContentTypeFromURL(src); | 114 contentType = GetContentTypeFromURL(src); |
| 114 } | 115 } |
| 115 return contentType; | 116 return contentType; |
| 116 } | 117 } |
| 117 | 118 |
| 118 ////////////////////////////////////////////////////////////////////////////////
//////// | 119 ////////////////////////////////////////////////////////////////////////////////
//////// |
| 119 //WBPassthruSink | 120 //WBPassthruSink |
| 120 //Monitor and/or cancel every request and responde | 121 //Monitor and/or cancel every request and responde |
| 121 //WB makes, including images, sounds, scripts, etc | 122 //WB makes, including images, sounds, scripts, etc |
| 122 ////////////////////////////////////////////////////////////////////////////////
//////// | 123 ////////////////////////////////////////////////////////////////////////////////
//////// |
| 123 HRESULT WBPassthruSink::OnStart(LPCWSTR szUrl, IInternetProtocolSink *pOIProtSin
k, | 124 HRESULT WBPassthruSink::OnStart(LPCWSTR szUrl, IInternetProtocolSink *pOIProtSin
k, |
| 124 IInternetBindInfo *pOIBindInfo, DWORD grfPI, HAN
DLE_PTR dwReserved, | 125 IInternetBindInfo *pOIBindInfo, DWORD grfPI, HAN
DLE_PTR dwReserved, |
| 125 IInternetProtocol* pTargetProtocol, bool& handle
d) | 126 IInternetProtocol* pTargetProtocol, bool& handle
d) |
| 126 { | 127 { |
| 127 m_pTargetProtocol = pTargetProtocol; | 128 m_pTargetProtocol = pTargetProtocol; |
| 128 bool isBlocked = false; | 129 bool isBlocked = false; |
| 129 CString src = szUrl; | 130 std::wstring src(szUrl); |
| 130 DEBUG_GENERAL(src); | 131 DEBUG_GENERAL(ToCString(src)); |
| 131 CPluginClient::UnescapeUrl(src); | 132 UnescapeUrl(src); |
| 132 | 133 |
| 133 // call the impl of the base class as soon as possible because it initializes
the base class | 134 // call the impl of the base class as soon as possible because it initializes
the base class |
| 134 // members, used by this method. It queries for the required interfaces. | 135 // members, used by this method. It queries for the required interfaces. |
| 135 HRESULT hr = BaseClass::OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, dwRese
rved, pTargetProtocol); | 136 HRESULT hr = BaseClass::OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, dwRese
rved, pTargetProtocol); |
| 136 if (FAILED(hr)) | 137 if (FAILED(hr)) |
| 137 { | 138 { |
| 138 return hr; | 139 return hr; |
| 139 } | 140 } |
| 140 | 141 |
| 141 CString mimeType; | 142 CString mimeType; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 168 | 169 |
| 169 CString cookie; | 170 CString cookie; |
| 170 ULONG len1 = 2048; | 171 ULONG len1 = 2048; |
| 171 ULONG len2 = 2048; | 172 ULONG len2 = 2048; |
| 172 | 173 |
| 173 CPluginTab* tab = CPluginClass::GetTab(::GetCurrentThreadId()); | 174 CPluginTab* tab = CPluginClass::GetTab(::GetCurrentThreadId()); |
| 174 CPluginClient* client = CPluginClient::GetInstance(); | 175 CPluginClient* client = CPluginClient::GetInstance(); |
| 175 | 176 |
| 176 if (tab && client) | 177 if (tab && client) |
| 177 { | 178 { |
| 178 CString documentUrl = tab->GetDocumentUrl(); | 179 std::wstring documentUrl = tab->GetDocumentUrl(); |
| 179 // Page is identical to document => don't block | 180 // Page is identical to document => don't block |
| 180 if (documentUrl == src) | 181 if (documentUrl == src) |
| 181 { | 182 { |
| 182 // fall through | 183 // fall through |
| 183 } | 184 } |
| 184 else if (CPluginSettings::GetInstance()->IsPluginEnabled() && !client->IsWhi
telistedUrl(std::wstring(documentUrl))) | 185 else if (CPluginSettings::GetInstance()->IsPluginEnabled() && !client->IsWhi
telistedUrl(documentUrl)) |
| 185 { | 186 { |
| 186 m_boundDomain = tab->GetDocumentUrl(); | 187 m_boundDomain = tab->GetDocumentUrl(); |
| 187 m_contentType = CFilter::contentTypeAny; | 188 m_contentType = CFilter::contentTypeAny; |
| 188 if (tab != nullptr && tab->IsFrameCached(src)) | 189 if (tab != nullptr && tab->IsFrameCached(src)) |
| 189 { | 190 { |
| 190 m_contentType = CFilter::contentTypeSubdocument; | 191 m_contentType = CFilter::contentTypeSubdocument; |
| 191 } | 192 } |
| 192 else | 193 else |
| 193 { | 194 { |
| 194 m_contentType = GetContentType(mimeType, m_boundDomain, src); | 195 m_contentType = GetContentType(mimeType, m_boundDomain, src); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 222 } | 223 } |
| 223 } | 224 } |
| 224 } | 225 } |
| 225 | 226 |
| 226 // The descision about EContentType::contentTypeAny is made later in | 227 // The descision about EContentType::contentTypeAny is made later in |
| 227 // WBPassthruSink::BeginningTransaction. Sometimes here we cannot detect the r
equest type, but | 228 // WBPassthruSink::BeginningTransaction. Sometimes here we cannot detect the r
equest type, but |
| 228 // in WBPassthruSink::BeginningTransaction the header Accept is available whic
h allows to | 229 // in WBPassthruSink::BeginningTransaction the header Accept is available whic
h allows to |
| 229 // obtain the "request type" in our terminology. | 230 // obtain the "request type" in our terminology. |
| 230 if (nullptr != client | 231 if (nullptr != client |
| 231 && CFilter::EContentType::contentTypeAny != m_contentType | 232 && CFilter::EContentType::contentTypeAny != m_contentType |
| 232 && client->ShouldBlock(static_cast<const wchar_t*>(src), m_contentType, m_bo
undDomain, true)) | 233 && client->ShouldBlock(src, m_contentType, m_boundDomain, true)) |
| 233 { | 234 { |
| 234 isBlocked = true; | 235 isBlocked = true; |
| 235 } | 236 } |
| 236 | 237 |
| 237 // For IE6 and earlier there is iframe back button issue, so avoid it. | 238 // For IE6 and earlier there is iframe back button issue, so avoid it. |
| 238 if (isBlocked && client->GetIEVersion() > 6) | 239 if (isBlocked && client->GetIEVersion() > 6) |
| 239 { | 240 { |
| 240 handled = true; | 241 handled = true; |
| 241 if (CFilter::EContentType::contentTypeImage == m_contentType) | 242 if (CFilter::EContentType::contentTypeImage == m_contentType) |
| 242 { | 243 { |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 } | 464 } |
| 464 | 465 |
| 465 STDMETHODIMP WBPassthru::UnlockRequest() | 466 STDMETHODIMP WBPassthru::UnlockRequest() |
| 466 { | 467 { |
| 467 if (!m_hasOriginalStartCalled) | 468 if (!m_hasOriginalStartCalled) |
| 468 { | 469 { |
| 469 return S_OK; | 470 return S_OK; |
| 470 } | 471 } |
| 471 return BaseClass::UnlockRequest(); | 472 return BaseClass::UnlockRequest(); |
| 472 } | 473 } |
| OLD | NEW |