| 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 bool IsXmlHttpRequest(const std::wstring& additionalHeaders) | 67 bool IsXmlHttpRequest(const std::wstring& additionalHeaders) |
| 68 { | 68 { |
| 69 auto requestedWithHeader = ExtractHttpHeader<std::wstring>(additionalHeaders
, L"X-Requested-With:", L"\n"); | 69 auto requestedWithHeader = ExtractHttpHeader<std::wstring>(additionalHeaders
, L"X-Requested-With:", L"\n"); |
| 70 return TrimString(requestedWithHeader) == L"XMLHttpRequest"; | 70 return TrimString(requestedWithHeader) == L"XMLHttpRequest"; |
| 71 } | 71 } |
| 72 } | 72 } |
| 73 | 73 |
| 74 WBPassthruSink::WBPassthruSink() | 74 WBPassthruSink::WBPassthruSink() |
| 75 : m_currentPositionOfSentPage(0) | 75 : m_currentPositionOfSentPage(0) |
| 76 , m_contentType(CFilter::EContentType::contentTypeAny) | 76 , m_contentType(CFilter::EContentType::contentTypeAny) |
| 77 , m_blockedInTransaction(false) | 77 , m_isCustomResponse(false) |
| 78 { | 78 { |
| 79 } | 79 } |
| 80 | 80 |
| 81 int WBPassthruSink::GetContentTypeFromMimeType(const CString& mimeType) | 81 int WBPassthruSink::GetContentTypeFromMimeType(const CString& mimeType) |
| 82 { | 82 { |
| 83 if (mimeType.Find(L"image/") >= 0) | 83 if (mimeType.Find(L"image/") >= 0) |
| 84 { | 84 { |
| 85 return CFilter::contentTypeImage; | 85 return CFilter::contentTypeImage; |
| 86 } | 86 } |
| 87 if (mimeType.Find(L"text/css") >= 0) | 87 if (mimeType.Find(L"text/css") >= 0) |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 if (IsFlashRequest(pszAdditionalHeaders)) | 323 if (IsFlashRequest(pszAdditionalHeaders)) |
| 324 { | 324 { |
| 325 m_contentType = CFilter::EContentType::contentTypeObjectSubrequest; | 325 m_contentType = CFilter::EContentType::contentTypeObjectSubrequest; |
| 326 } | 326 } |
| 327 | 327 |
| 328 if (pszAdditionalHeaders && *pszAdditionalHeaders && IsXmlHttpRequest(*pszAddi
tionalHeaders)) | 328 if (pszAdditionalHeaders && *pszAdditionalHeaders && IsXmlHttpRequest(*pszAddi
tionalHeaders)) |
| 329 { | 329 { |
| 330 m_contentType = CFilter::EContentType::contentTypeXmlHttpRequest; | 330 m_contentType = CFilter::EContentType::contentTypeXmlHttpRequest; |
| 331 } | 331 } |
| 332 | 332 |
| 333 m_blockedInTransaction = client->ShouldBlock(szURL, m_contentType, m_boundDoma
in, /*debug flag but must be set*/true); | 333 if (client->ShouldBlock(szURL, m_contentType, m_boundDomain, /*debug flag but
must be set*/true)) |
| 334 if (m_blockedInTransaction) | |
| 335 { | 334 { |
| 335 m_isCustomResponse = m_contentType != CFilter::contentTypeObjectSubrequest; |
| 336 return E_ABORT; | 336 return E_ABORT; |
| 337 } | 337 } |
| 338 return nativeHr; | 338 return nativeHr; |
| 339 } | 339 } |
| 340 | 340 |
| 341 STDMETHODIMP WBPassthruSink::OnResponse(DWORD dwResponseCode, LPCWSTR szResponse
Headers, LPCWSTR szRequestHeaders, LPWSTR *pszAdditionalRequestHeaders) | 341 STDMETHODIMP WBPassthruSink::OnResponse(DWORD dwResponseCode, LPCWSTR szResponse
Headers, LPCWSTR szRequestHeaders, LPWSTR *pszAdditionalRequestHeaders) |
| 342 { | 342 { |
| 343 if (pszAdditionalRequestHeaders) | 343 if (pszAdditionalRequestHeaders) |
| 344 { | 344 { |
| 345 *pszAdditionalRequestHeaders = 0; | 345 *pszAdditionalRequestHeaders = 0; |
| 346 } | 346 } |
| 347 | 347 |
| 348 CComPtr<IHttpNegotiate> spHttpNegotiate; | 348 CComPtr<IHttpNegotiate> spHttpNegotiate; |
| 349 QueryServiceFromClient(&spHttpNegotiate); | 349 QueryServiceFromClient(&spHttpNegotiate); |
| 350 | 350 |
| 351 return spHttpNegotiate ? spHttpNegotiate->OnResponse(dwResponseCode, szRespons
eHeaders, szRequestHeaders, pszAdditionalRequestHeaders) : S_OK; | 351 return spHttpNegotiate ? spHttpNegotiate->OnResponse(dwResponseCode, szRespons
eHeaders, szRequestHeaders, pszAdditionalRequestHeaders) : S_OK; |
| 352 } | 352 } |
| 353 | 353 |
| 354 STDMETHODIMP WBPassthruSink::ReportProgress(ULONG ulStatusCode, LPCWSTR szStatus
Text) | 354 STDMETHODIMP WBPassthruSink::ReportProgress(ULONG ulStatusCode, LPCWSTR szStatus
Text) |
| 355 { | 355 { |
| 356 return m_spInternetProtocolSink ? m_spInternetProtocolSink->ReportProgress(ulS
tatusCode, szStatusText) : S_OK; | 356 return m_spInternetProtocolSink ? m_spInternetProtocolSink->ReportProgress(ulS
tatusCode, szStatusText) : S_OK; |
| 357 } | 357 } |
| 358 | 358 |
| 359 STDMETHODIMP WBPassthruSink::ReportResult(/* [in] */ HRESULT hrResult, /* [in] *
/ DWORD dwError, /* [in] */ LPCWSTR szResult) | 359 STDMETHODIMP WBPassthruSink::ReportResult(/* [in] */ HRESULT hrResult, /* [in] *
/ DWORD dwError, /* [in] */ LPCWSTR szResult) |
| 360 { | 360 { |
| 361 if (m_blockedInTransaction) | 361 if (m_isCustomResponse) |
| 362 { | 362 { |
| 363 // Don't notify the client about aborting of the operation, thus don't call
BaseClass::ReportResult. | 363 // Don't notify the client about aborting of the operation, thus don't call
BaseClass::ReportResult. |
| 364 // Current method is called by the original protocol implementation and we a
re intercepting the | 364 // Current method is called by the original protocol implementation and we a
re intercepting the |
| 365 // call here and eating it, we will call the proper ReportResult later by ou
rself. | 365 // call here and eating it, we will call the proper ReportResult later by ou
rself. |
| 366 return S_OK; | 366 return S_OK; |
| 367 } | 367 } |
| 368 return BaseClass::ReportResult(hrResult, dwError, szResult); | 368 return BaseClass::ReportResult(hrResult, dwError, szResult); |
| 369 } | 369 } |
| 370 | 370 |
| 371 | 371 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 384 } | 384 } |
| 385 | 385 |
| 386 return OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, dwReserved, m_spInterne
tProtocol); | 386 return OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, dwReserved, m_spInterne
tProtocol); |
| 387 } | 387 } |
| 388 | 388 |
| 389 STDMETHODIMP WBPassthru::Read(/* [in, out] */ void *pv,/* [in] */ ULONG cb,/* [o
ut] */ ULONG *pcbRead) | 389 STDMETHODIMP WBPassthru::Read(/* [in, out] */ void *pv,/* [in] */ ULONG cb,/* [o
ut] */ ULONG *pcbRead) |
| 390 { | 390 { |
| 391 WBPassthruSink* pSink = GetSink(); | 391 WBPassthruSink* pSink = GetSink(); |
| 392 return pSink->OnRead(pv, cb, pcbRead); | 392 return pSink->OnRead(pv, cb, pcbRead); |
| 393 } | 393 } |
| OLD | NEW |