Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/plugin/PluginWbPassThrough.cpp

Issue 5750789393874944: [IE] First round of ATL removal (Closed)
Patch Set: Created June 20, 2014, 9:22 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/plugin/PluginWbPassThrough.cpp
===================================================================
--- a/src/plugin/PluginWbPassThrough.cpp
+++ b/src/plugin/PluginWbPassThrough.cpp
@@ -9,6 +9,8 @@
#include "PluginSettings.h"
#include "PluginClass.h"
#include "PluginSystem.h"
+#include "Wrapper.h"
+#include "PluginUtil.h"
#include "wtypes.h"
@@ -19,75 +21,80 @@
{
m_pTargetProtocol = NULL;
}
-int WBPassthruSink::GetContentTypeFromMimeType(CString mimeType)
+int WBPassthruSink::GetContentTypeFromMimeType( std::wstring mime_type )
{
- if (mimeType.Find(L"image/") >= 0)
+ if ( mime_type.find( L"image/" ) != std::wstring::npos )
{
return CFilter::contentTypeImage;
}
- if (mimeType.Find(L"text/css") >= 0)
+ if ( mime_type.find( L"text/css" ) != std::wstring::npos )
{
return CFilter::contentTypeStyleSheet;
}
- if ((mimeType.Find(L"application/javascript") >= 0) || (mimeType.Find(L"application/json") >= 0))
+ if ( mime_type.find( L"application/javascript" ) != std::wstring::npos
+ || mime_type.find( L"application/json" ) != std::wstring::npos )
{
return CFilter::contentTypeScript;
}
- if (mimeType.Find(L"application/x-shockwave-flash") >= 0)
+ if ( mime_type.find( L"application/x-shockwave-flash" ) != std::wstring::npos )
{
return CFilter::contentTypeObject;
}
- if (mimeType.Find(L"text/html") >= 0)
+ if ( mime_type.find( L"text/html" ) != std::wstring::npos )
{
return CFilter::contentTypeSubdocument;
}
// It is important to have this check last, since it is rather generic, and might overlay text/html, for example
- if (mimeType.Find(L"xml") >= 0)
+ if ( mime_type.find( L"xml" ) != std::wstring::npos )
{
return CFilter::contentTypeXmlHttpRequest;
}
-
return CFilter::contentTypeAny;
}
-int WBPassthruSink::GetContentTypeFromURL(CString src)
+int WBPassthruSink::GetContentTypeFromURL( std::wstring src )
{
- CString srcExt = src;
+ // Start search for extension at beginning of query, if any
+ size_t ext_end = src.find( L'?' );
+ // Assert ext_end <= src.length --> src[ ext_end ] == '?'
+ // Assert ext_end == npos --> there's no '?' character and ext_end == npos, which represents "end of string" in wstring::substr()
- int pos = 0;
- if ((pos = src.Find('?')) > 0)
+ // Locate punctuation for extension, if any
+ size_t ext_begin = src.rfind( L'.', ext_end );
+ if ( ext_begin == std::wstring::npos )
{
- srcExt = src.Left(pos);
+ // No punctuation
+ return CFilter::contentTypeAny;
}
+ // Adding 1 to ext_begin excludes punctuation
+ std::wstring ext = src.substr( ext_begin + 1, ext_end );
+ // Assert ext contains all text after last period character to beginning of query, or if no query, to end of string
- int lastDotIndex = srcExt.ReverseFind('.');
- if (lastDotIndex < 0)
- return CFilter::contentTypeAny;
- CString ext = srcExt.Mid(lastDotIndex);
- if (ext == L".jpg" || ext == L".gif" || ext == L".png" || ext == L".jpeg")
+ if (ext == L"jpg" || ext == L"gif" || ext == L"png" || ext == L"jpeg")
{
return CFilter::contentTypeImage;
}
- else if (ext == L".css")
+ else if (ext == L"css")
{
return CFilter::contentTypeStyleSheet;
}
- else if (ext.Right(3) == L".js")
+ // Test for "jsp" before "js*" below
+ else if ( ext == L"jsp" || ext == L"php" || ABP::util::begins_with( ext, L"htm" ) )
+ {
+ return CFilter::contentTypeSubdocument;
+ }
+ else if ( ABP::util::begins_with( ext, L"js" ) )
{
return CFilter::contentTypeScript;
}
- else if (ext == L".xml")
+ else if (ext == L"xml")
{
return CFilter::contentTypeXmlHttpRequest;
}
- else if (ext == L".swf")
+ else if (ext == L"swf")
{
return CFilter::contentTypeObject;
}
- else if (ext == L".jsp" || ext == L".php" || ext == L".html")
- {
- return CFilter::contentTypeSubdocument;
- }
else
{
return CFilter::contentTypeAny & ~CFilter::contentTypeSubdocument;
@@ -95,11 +102,11 @@
}
-int WBPassthruSink::GetContentType(CString mimeType, CString domain, CString src)
+int WBPassthruSink::GetContentType(std::wstring mimeType, std::wstring domain, std::wstring src)
{
// No referer or mime type
// BINDSTRING_XDR_ORIGIN works only for IE v8+
- if (mimeType.IsEmpty() && domain.IsEmpty() && CPluginClient::GetInstance()->GetIEVersion() >= 8)
+ if (mimeType.empty() && domain.empty() && CPluginClient::GetInstance()->GetIEVersion() >= 8)
{
return CFilter::contentTypeXmlHttpRequest;
}
@@ -125,40 +132,24 @@
bool isBlocked = false;
m_shouldBlock = false;
m_lastDataReported = false;
- CString src;
- src.Append(szUrl);
+ std::wstring src( szUrl );
DEBUG_GENERAL(src);
- CPluginClient::UnescapeUrl(src);
+ Wrapper::Unescape_URL( src );
- CString boundDomain;
- CString mimeType;
- LPOLESTR mime[10];
+ std::wstring boundDomain;
+ std::wstring mime_type;
if (pOIBindInfo)
{
- ULONG resLen = 0;
- pOIBindInfo->GetBindString(BINDSTRING_ACCEPT_MIMES, mime, 10, &resLen);
- if (mime && resLen > 0)
+ Wrapper::Internet_Bind_Info bi( pOIBindInfo );
+ mime_type = bi.bind_string_single( BINDSTRING_ACCEPT_MIMES );
+ std::wstring bind_to_object = bi.bind_string_single( BINDSTRING_FLAG_BIND_TO_OBJECT );
+ ABP::util::to_lower( bind_to_object );
+ if ( bind_to_object == L"" || bind_to_object == L"false" )
{
- mimeType.SetString(mime[0]);
- }
- LPOLESTR bindToObject = 0;
- pOIBindInfo->GetBindString(BINDSTRING_FLAG_BIND_TO_OBJECT, &bindToObject, 1, &resLen);
- LPOLESTR domainRetrieved = 0;
- if (resLen == 0 || wcscmp(bindToObject, L"FALSE") == 0)
- {
- HRESULT hr = pOIBindInfo->GetBindString(BINDSTRING_XDR_ORIGIN, &domainRetrieved, 1, &resLen);
-
- if ((hr == S_OK) && domainRetrieved && (resLen > 0))
- {
- boundDomain.SetString(domainRetrieved);
- }
+ boundDomain = bi.bind_string_single( BINDSTRING_XDR_ORIGIN );
}
}
- CString cookie;
- ULONG len1 = 2048;
- ULONG len2 = 2048;
-
#ifdef SUPPORT_FILTER
int contentType = CFilter::contentTypeAny;
@@ -168,13 +159,13 @@
if (tab && client)
{
- CString documentUrl = tab->GetDocumentUrl();
+ std::wstring documentUrl = tab->GetDocumentUrl();
// Page is identical to document => don't block
if (documentUrl == src)
{
// fall through
}
- else if (CPluginSettings::GetInstance()->IsPluginEnabled() && !client->IsWhitelistedUrl(std::wstring(documentUrl)))
+ else if (CPluginSettings::GetInstance()->IsPluginEnabled() && !client->IsWhitelistedUrl( documentUrl ))
{
boundDomain = tab->GetDocumentUrl();
@@ -187,7 +178,7 @@
}
else
#endif // SUPPORT_FRAME_CACHING
- contentType = GetContentType(mimeType, boundDomain, src);
+ contentType = GetContentType( mime_type, boundDomain, src );
if (client->ShouldBlock(src, contentType, boundDomain, true))
{
isBlocked = true;
@@ -204,7 +195,7 @@
if (tab == NULL)
{
- contentType = GetContentType(mimeType, boundDomain, src);
+ contentType = GetContentType( mime_type, boundDomain, src);
if (client->ShouldBlock(src, contentType, boundDomain, true))
{
isBlocked = true;
@@ -212,17 +203,17 @@
}
#ifdef _DEBUG
- CString type;
+ std::wstring type;
- if (contentType == CFilter::contentTypeDocument) type = "DOCUMENT";
- else if (contentType == CFilter::contentTypeObject) type = "OBJECT";
- else if (contentType == CFilter::contentTypeImage) type = "IMAGE";
- else if (contentType == CFilter::contentTypeScript) type = "SCRIPT";
- else if (contentType == CFilter::contentTypeOther) type = "OTHER";
- else if (contentType == CFilter::contentTypeUnknown) type = "OTHER";
- else if (contentType == CFilter::contentTypeSubdocument) type = "SUBDOCUMENT";
- else if (contentType == CFilter::contentTypeStyleSheet) type = "STYLESHEET";
- else type = "OTHER";
+ if (contentType == CFilter::contentTypeDocument) type = L"DOCUMENT";
+ else if (contentType == CFilter::contentTypeObject) type = L"OBJECT";
+ else if (contentType == CFilter::contentTypeImage) type = L"IMAGE";
+ else if (contentType == CFilter::contentTypeScript) type = L"SCRIPT";
+ else if (contentType == CFilter::contentTypeOther) type = L"OTHER";
+ else if (contentType == CFilter::contentTypeUnknown) type = L"OTHER";
+ else if (contentType == CFilter::contentTypeSubdocument) type = L"SUBDOCUMENT";
+ else if (contentType == CFilter::contentTypeStyleSheet) type = L"STYLESHEET";
+ else type = L"OTHER";
if (isBlocked)
{

Powered by Google App Engine
This is Rietveld