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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 } | 102 } |
103 // It is important to have this check last, since it is rather generic, and mi
ght overlay text/html, for example | 103 // It is important to have this check last, since it is rather generic, and mi
ght overlay text/html, for example |
104 if (mimeType.Find(L"xml") >= 0) | 104 if (mimeType.Find(L"xml") >= 0) |
105 { | 105 { |
106 return CFilter::contentTypeXmlHttpRequest; | 106 return CFilter::contentTypeXmlHttpRequest; |
107 } | 107 } |
108 | 108 |
109 return CFilter::contentTypeAny; | 109 return CFilter::contentTypeAny; |
110 } | 110 } |
111 | 111 |
112 int WBPassthruSink::GetContentTypeFromURL(const CString& src) | 112 int WBPassthruSink::GetContentTypeFromURL(const std::wstring& src) |
113 { | 113 { |
114 CString srcExt = src; | 114 CString srcLegacy = ToCString(src); |
| 115 CString srcExt = srcLegacy; |
115 | 116 |
116 int pos = 0; | 117 int pos = 0; |
117 if ((pos = src.Find('?')) > 0) | 118 if ((pos = srcLegacy.Find('?')) > 0) |
118 { | 119 { |
119 srcExt = src.Left(pos); | 120 srcExt = srcLegacy.Left(pos); |
120 } | 121 } |
121 | 122 |
122 int lastDotIndex = srcExt.ReverseFind('.'); | 123 int lastDotIndex = srcExt.ReverseFind('.'); |
123 if (lastDotIndex < 0) | 124 if (lastDotIndex < 0) |
124 return CFilter::contentTypeAny; | 125 return CFilter::contentTypeAny; |
125 CString ext = srcExt.Mid(lastDotIndex); | 126 CString ext = srcExt.Mid(lastDotIndex); |
126 if (ext == L".jpg" || ext == L".gif" || ext == L".png" || ext == L".jpeg") | 127 if (ext == L".jpg" || ext == L".gif" || ext == L".png" || ext == L".jpeg") |
127 { | 128 { |
128 return CFilter::contentTypeImage; | 129 return CFilter::contentTypeImage; |
129 } | 130 } |
(...skipping 13 matching lines...) Expand all Loading... |
143 { | 144 { |
144 return CFilter::contentTypeObject; | 145 return CFilter::contentTypeObject; |
145 } | 146 } |
146 else if (ext == L".jsp" || ext == L".php" || ext == L".html") | 147 else if (ext == L".jsp" || ext == L".php" || ext == L".html") |
147 { | 148 { |
148 return CFilter::contentTypeSubdocument; | 149 return CFilter::contentTypeSubdocument; |
149 } | 150 } |
150 return CFilter::contentTypeAny; | 151 return CFilter::contentTypeAny; |
151 } | 152 } |
152 | 153 |
153 int WBPassthruSink::GetContentType(const CString& mimeType, const std::wstring&
domain, const CString& src) | 154 int WBPassthruSink::GetContentType(const CString& mimeType, const std::wstring&
domain, const std::wstring& src) |
154 { | 155 { |
155 // No referer or mime type | 156 // No referer or mime type |
156 // BINDSTRING_XDR_ORIGIN works only for IE v8+ | 157 // BINDSTRING_XDR_ORIGIN works only for IE v8+ |
157 if (mimeType.IsEmpty() && domain.empty() && CPluginClient::GetInstance()->GetI
EVersion() >= 8) | 158 if (mimeType.IsEmpty() && domain.empty() && CPluginClient::GetInstance()->GetI
EVersion() >= 8) |
158 { | 159 { |
159 return CFilter::contentTypeXmlHttpRequest; | 160 return CFilter::contentTypeXmlHttpRequest; |
160 } | 161 } |
161 int contentType = GetContentTypeFromMimeType(mimeType); | 162 int contentType = GetContentTypeFromMimeType(mimeType); |
162 if (contentType == CFilter::contentTypeAny) | 163 if (contentType == CFilter::contentTypeAny) |
163 { | 164 { |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 if (pszAdditionalHeaders && *pszAdditionalHeaders) | 299 if (pszAdditionalHeaders && *pszAdditionalHeaders) |
299 { | 300 { |
300 m_boundDomain = ExtractHttpHeader<std::wstring>(*pszAdditionalHeaders, L"Ref
erer:", L"\n"); | 301 m_boundDomain = ExtractHttpHeader<std::wstring>(*pszAdditionalHeaders, L"Ref
erer:", L"\n"); |
301 } | 302 } |
302 m_boundDomain = TrimString(m_boundDomain); | 303 m_boundDomain = TrimString(m_boundDomain); |
303 CPluginTab* tab = CPluginClass::GetTab(::GetCurrentThreadId()); | 304 CPluginTab* tab = CPluginClass::GetTab(::GetCurrentThreadId()); |
304 CPluginClient* client = CPluginClient::GetInstance(); | 305 CPluginClient* client = CPluginClient::GetInstance(); |
305 | 306 |
306 if (tab && client) | 307 if (tab && client) |
307 { | 308 { |
308 CString documentUrl = tab->GetDocumentUrl(); | 309 std::wstring documentUrl = tab->GetDocumentUrl(); |
309 // Page is identical to document => don't block | 310 // Page is identical to document => don't block |
310 if (documentUrl == ToCString(src)) | 311 if (documentUrl == src) |
311 { | 312 { |
312 return nativeHr; | 313 return nativeHr; |
313 } | 314 } |
314 else if (CPluginSettings::GetInstance()->IsPluginEnabled() && !client->IsWhi
telistedUrl(std::wstring(documentUrl))) | 315 else if (CPluginSettings::GetInstance()->IsPluginEnabled() && !client->IsWhi
telistedUrl(documentUrl)) |
315 { | 316 { |
316 if (tab->IsFrameCached(ToCString(src))) | 317 if (tab->IsFrameCached(src)) |
317 { | 318 { |
318 m_contentType = CFilter::contentTypeSubdocument; | 319 m_contentType = CFilter::contentTypeSubdocument; |
319 } | 320 } |
320 } | 321 } |
321 } | 322 } |
322 | 323 |
323 if (IsFlashRequest(pszAdditionalHeaders)) | 324 if (IsFlashRequest(pszAdditionalHeaders)) |
324 { | 325 { |
325 m_contentType = CFilter::EContentType::contentTypeObjectSubrequest; | 326 m_contentType = CFilter::EContentType::contentTypeObjectSubrequest; |
326 } | 327 } |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 } | 389 } |
389 | 390 |
390 return OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, dwReserved, m_spInterne
tProtocol); | 391 return OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, dwReserved, m_spInterne
tProtocol); |
391 } | 392 } |
392 | 393 |
393 STDMETHODIMP WBPassthru::Read(/* [in, out] */ void *pv,/* [in] */ ULONG cb,/* [o
ut] */ ULONG *pcbRead) | 394 STDMETHODIMP WBPassthru::Read(/* [in, out] */ void *pv,/* [in] */ ULONG cb,/* [o
ut] */ ULONG *pcbRead) |
394 { | 395 { |
395 WBPassthruSink* pSink = GetSink(); | 396 WBPassthruSink* pSink = GetSink(); |
396 return pSink->OnRead(pv, cb, pcbRead); | 397 return pSink->OnRead(pv, cb, pcbRead); |
397 } | 398 } |
OLD | NEW |