| LEFT | RIGHT |
| 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 #ifdef SUPPORT_FILTER | |
| 7 #include "PluginFilter.h" | 6 #include "PluginFilter.h" |
| 8 #endif | |
| 9 #include "PluginSettings.h" | 7 #include "PluginSettings.h" |
| 10 #include "PluginClass.h" | 8 #include "PluginClass.h" |
| 11 #include "PluginSystem.h" | 9 #include "PluginSystem.h" |
| 12 #include <WinInet.h> | 10 #include <WinInet.h> |
| 13 #include "wtypes.h" | 11 #include "wtypes.h" |
| 14 | 12 |
| 15 namespace | 13 namespace |
| 16 { | 14 { |
| 17 std::string g_blockedByABPPage = "<!DOCTYPE html>" | 15 std::string g_blockedByABPPage = "<!DOCTYPE html>" |
| 18 "<html>" | 16 "<html>" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 { | 92 { |
| 95 return CFilter::contentTypeObject; | 93 return CFilter::contentTypeObject; |
| 96 } | 94 } |
| 97 else if (ext == L".jsp" || ext == L".php" || ext == L".html") | 95 else if (ext == L".jsp" || ext == L".php" || ext == L".html") |
| 98 { | 96 { |
| 99 return CFilter::contentTypeSubdocument; | 97 return CFilter::contentTypeSubdocument; |
| 100 } | 98 } |
| 101 return CFilter::contentTypeAny; | 99 return CFilter::contentTypeAny; |
| 102 } | 100 } |
| 103 | 101 |
| 104 int WBPassthruSink::GetContentType(const CString& mimeType, const CString& domai
n, const CString& src) | 102 int WBPassthruSink::GetContentType(const CString& mimeType, const std::wstring&
domain, const CString& src) |
| 105 { | 103 { |
| 106 // No referer or mime type | 104 // No referer or mime type |
| 107 // BINDSTRING_XDR_ORIGIN works only for IE v8+ | 105 // BINDSTRING_XDR_ORIGIN works only for IE v8+ |
| 108 if (mimeType.IsEmpty() && domain.IsEmpty() && CPluginClient::GetInstance()->Ge
tIEVersion() >= 8) | 106 if (mimeType.IsEmpty() && domain.empty() && CPluginClient::GetInstance()->GetI
EVersion() >= 8) |
| 109 { | 107 { |
| 110 return CFilter::contentTypeXmlHttpRequest; | 108 return CFilter::contentTypeXmlHttpRequest; |
| 111 } | 109 } |
| 112 int contentType = GetContentTypeFromMimeType(mimeType); | 110 int contentType = GetContentTypeFromMimeType(mimeType); |
| 113 if (contentType == CFilter::contentTypeAny) | 111 if (contentType == CFilter::contentTypeAny) |
| 114 { | 112 { |
| 115 contentType = GetContentTypeFromURL(src); | 113 contentType = GetContentTypeFromURL(src); |
| 116 } | 114 } |
| 117 return contentType; | 115 return contentType; |
| 118 } | 116 } |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 } | 163 } |
| 166 } | 164 } |
| 167 // We can obtain IBindCtx* here, but IEnumString obtained via IBindCtx::Enum
ObjectParam | 165 // We can obtain IBindCtx* here, but IEnumString obtained via IBindCtx::Enum
ObjectParam |
| 168 // does not return any parameter, so it's useless. | 166 // does not return any parameter, so it's useless. |
| 169 } | 167 } |
| 170 | 168 |
| 171 CString cookie; | 169 CString cookie; |
| 172 ULONG len1 = 2048; | 170 ULONG len1 = 2048; |
| 173 ULONG len2 = 2048; | 171 ULONG len2 = 2048; |
| 174 | 172 |
| 175 #ifdef SUPPORT_FILTER | |
| 176 CPluginTab* tab = CPluginClass::GetTab(::GetCurrentThreadId()); | 173 CPluginTab* tab = CPluginClass::GetTab(::GetCurrentThreadId()); |
| 177 CPluginClient* client = CPluginClient::GetInstance(); | 174 CPluginClient* client = CPluginClient::GetInstance(); |
| 178 | 175 |
| 179 if (tab && client) | 176 if (tab && client) |
| 180 { | 177 { |
| 181 CString documentUrl = tab->GetDocumentUrl(); | 178 CString documentUrl = tab->GetDocumentUrl(); |
| 182 // Page is identical to document => don't block | 179 // Page is identical to document => don't block |
| 183 if (documentUrl == src) | 180 if (documentUrl == src) |
| 184 { | 181 { |
| 185 // fall through | 182 // fall through |
| 186 } | 183 } |
| 187 else if (CPluginSettings::GetInstance()->IsPluginEnabled() && !client->IsWhi
telistedUrl(std::wstring(documentUrl))) | 184 else if (CPluginSettings::GetInstance()->IsPluginEnabled() && !client->IsWhi
telistedUrl(std::wstring(documentUrl))) |
| 188 { | 185 { |
| 189 m_boundDomain = tab->GetDocumentUrl(); | 186 m_boundDomain = tab->GetDocumentUrl(); |
| 190 m_contentType = CFilter::contentTypeAny; | 187 m_contentType = CFilter::contentTypeAny; |
| 191 #ifdef SUPPORT_FRAME_CACHING | |
| 192 if (tab != nullptr && tab->IsFrameCached(src)) | 188 if (tab != nullptr && tab->IsFrameCached(src)) |
| 193 { | 189 { |
| 194 m_contentType = CFilter::contentTypeSubdocument; | 190 m_contentType = CFilter::contentTypeSubdocument; |
| 195 } | 191 } |
| 196 else | 192 else |
| 197 #endif // SUPPORT_FRAME_CACHING | |
| 198 { | 193 { |
| 199 m_contentType = GetContentType(mimeType, m_boundDomain, src); | 194 m_contentType = GetContentType(mimeType, m_boundDomain, src); |
| 200 } | 195 } |
| 201 } | 196 } |
| 202 } | 197 } |
| 203 | 198 |
| 204 if (tab == nullptr) | 199 if (tab == nullptr) |
| 205 { | 200 { |
| 206 m_contentType = GetContentType(mimeType, m_boundDomain, src); | 201 m_contentType = GetContentType(mimeType, m_boundDomain, src); |
| 207 } | 202 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 227 } | 222 } |
| 228 } | 223 } |
| 229 } | 224 } |
| 230 | 225 |
| 231 // The descision about EContentType::contentTypeAny is made later in | 226 // The descision about EContentType::contentTypeAny is made later in |
| 232 // WBPassthruSink::BeginningTransaction. Sometimes here we cannot detect the r
equest type, but | 227 // WBPassthruSink::BeginningTransaction. Sometimes here we cannot detect the r
equest type, but |
| 233 // in WBPassthruSink::BeginningTransaction the header Accept is available whic
h allows to | 228 // in WBPassthruSink::BeginningTransaction the header Accept is available whic
h allows to |
| 234 // obtain the "request type" in our terminology. | 229 // obtain the "request type" in our terminology. |
| 235 if (nullptr != client | 230 if (nullptr != client |
| 236 && CFilter::EContentType::contentTypeAny != m_contentType | 231 && CFilter::EContentType::contentTypeAny != m_contentType |
| 237 && client->ShouldBlock(src, m_contentType, m_boundDomain, true)) | 232 && client->ShouldBlock(static_cast<const wchar_t*>(src), m_contentType, m_bo
undDomain, true)) |
| 238 { | 233 { |
| 239 isBlocked = true; | 234 isBlocked = true; |
| 240 } | 235 } |
| 241 | 236 |
| 242 // For IE6 and earlier there is iframe back button issue, so avoid it. | 237 // For IE6 and earlier there is iframe back button issue, so avoid it. |
| 243 if (isBlocked && client->GetIEVersion() > 6) | 238 if (isBlocked && client->GetIEVersion() > 6) |
| 244 { | 239 { |
| 245 handled = true; | 240 handled = true; |
| 246 if (CFilter::EContentType::contentTypeImage == m_contentType) | 241 if (CFilter::EContentType::contentTypeImage == m_contentType) |
| 247 { | 242 { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 265 { | 260 { |
| 266 m_spInternetProtocolSink->ReportResult(INET_E_REDIRECTING, 301, L"data:"); | 261 m_spInternetProtocolSink->ReportResult(INET_E_REDIRECTING, 301, L"data:"); |
| 267 return INET_E_REDIRECT_FAILED; | 262 return INET_E_REDIRECT_FAILED; |
| 268 } | 263 } |
| 269 if (CFilter::EContentType::contentTypeAny != m_contentType) | 264 if (CFilter::EContentType::contentTypeAny != m_contentType) |
| 270 { | 265 { |
| 271 m_spInternetProtocolSink->ReportResult(INET_E_REDIRECTING, 301, L"data:"); | 266 m_spInternetProtocolSink->ReportResult(INET_E_REDIRECTING, 301, L"data:"); |
| 272 return INET_E_REDIRECT_FAILED; | 267 return INET_E_REDIRECT_FAILED; |
| 273 } | 268 } |
| 274 } | 269 } |
| 275 #endif // SUPPORT_FILTER | |
| 276 | 270 |
| 277 return isBlocked ? S_FALSE : hr; | 271 return isBlocked ? S_FALSE : hr; |
| 278 } | 272 } |
| 279 | 273 |
| 280 HRESULT WBPassthruSink::OnRead(void* pv, ULONG cb, ULONG* pcbRead) | 274 HRESULT WBPassthruSink::OnRead(void* pv, ULONG cb, ULONG* pcbRead) |
| 281 { | 275 { |
| 282 if (pv == nullptr) | 276 if (pv == nullptr) |
| 283 { | 277 { |
| 284 return E_POINTER; | 278 return E_POINTER; |
| 285 } | 279 } |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 } | 463 } |
| 470 | 464 |
| 471 STDMETHODIMP WBPassthru::UnlockRequest() | 465 STDMETHODIMP WBPassthru::UnlockRequest() |
| 472 { | 466 { |
| 473 if (!m_hasOriginalStartCalled) | 467 if (!m_hasOriginalStartCalled) |
| 474 { | 468 { |
| 475 return S_OK; | 469 return S_OK; |
| 476 } | 470 } |
| 477 return BaseClass::UnlockRequest(); | 471 return BaseClass::UnlockRequest(); |
| 478 } | 472 } |
| LEFT | RIGHT |