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

Unified Diff: src/plugin/PluginDomTraverserBase.h

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/PluginDomTraverserBase.h
===================================================================
--- a/src/plugin/PluginDomTraverserBase.h
+++ b/src/plugin/PluginDomTraverserBase.h
@@ -1,10 +1,10 @@
#ifndef _PLUGIN_DOM_TRAVERSER_BASE_H_
#define _PLUGIN_DOM_TRAVERSER_BASE_H_
-
#include "PluginTypedef.h"
#include "PluginTab.h"
-
+#include "COM_Client.h"
+#include "Wrapper.h"
class CPluginDomTraverserCacheBase
{
@@ -27,8 +27,8 @@
void TraverseHeader(bool isHeaderTraversed);
- void TraverseDocument(IWebBrowser2* pBrowser, const CString& domain, const CString& documentName);
- void TraverseSubdocument(IWebBrowser2* pBrowser, const CString& domain, const CString& documentName);
+ void TraverseDocument(IWebBrowser2* pBrowser, const std::wstring & domain, const std::wstring & documentName);
+ void TraverseSubdocument(IWebBrowser2* pBrowser, const std::wstring & domain, const std::wstring & documentName);
virtual void ClearCache();
@@ -36,20 +36,20 @@
protected:
- virtual bool OnIFrame(IHTMLElement* pEl, const CString& url, CString& indent) { return true; }
- virtual bool OnElement(IHTMLElement* pEl, const CString& tag, T* cache, bool isDebug, CString& indent) { return true; }
+ virtual bool OnIFrame(IHTMLElement* pEl, const std::wstring & url, std::wstring & indent) { return true; }
+ virtual bool OnElement(IHTMLElement* pEl, const std::wstring & tag, T* cache, bool isDebug, std::wstring & indent) { return true; }
virtual bool IsEnabled();
protected:
- void TraverseDocument(IWebBrowser2* pBrowser, bool isMainDoc, CString indent);
- void TraverseChild(IHTMLElement* pEl, IWebBrowser2* pBrowser, CString& indent, bool isCached=true);
+ void TraverseDocument(IWebBrowser2* pBrowser, bool isMainDoc, std::wstring indent);
+ void TraverseChild(IHTMLElement* pEl, IWebBrowser2* pBrowser, std::wstring & indent, bool isCached=true);
CComAutoCriticalSection m_criticalSection;
- CString m_domain;
- CString m_documentName;
+ std::wstring m_domain;
+ std::wstring m_documentName;
bool m_isHeaderTraversed;
@@ -58,8 +58,8 @@
int m_cacheIndexLast;
int m_cacheElementsMax;
- std::set<CString> m_cacheDocumentHasFrames;
- std::set<CString> m_cacheDocumentHasIframes;
+ std::set< std::wstring > m_cacheDocumentHasFrames;
+ std::set< std::wstring > m_cacheDocumentHasIframes;
T* m_cacheElements;
@@ -88,20 +88,20 @@
}
template <class T>
-void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, const CString& domain, const CString& documentName)
+void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, const std::wstring & domain, const std::wstring & documentName)
{
m_domain = domain;
- TraverseDocument(pBrowser, true, "");
+ TraverseDocument(pBrowser, true, L"");
}
template <class T>
-void CPluginDomTraverserBase<T>::TraverseSubdocument(IWebBrowser2* pBrowser, const CString& domain, const CString& documentName)
+void CPluginDomTraverserBase<T>::TraverseSubdocument(IWebBrowser2* pBrowser, const std::wstring & domain, const std::wstring & documentName)
{
m_domain = domain;
- TraverseDocument(pBrowser, false, "");
+ TraverseDocument(pBrowser, false, L"");
}
@@ -113,7 +113,7 @@
template <class T>
-void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, bool isMainDoc, CString indent)
+void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, bool isMainDoc, std::wstring indent)
{
DWORD res = WaitForSingleObject(m_tab->m_filter->hideFiltersLoadedEvent, ENGINE_STARTUP_TIMEOUT);
if (!IsEnabled()) return;
@@ -160,10 +160,9 @@
{
return;
}
-
- CComVariant vIndex(0);
- CComPtr<IDispatch> pBodyDispatch;
- if (FAILED(pBodyCollection->item(vIndex, vIndex, &pBodyDispatch)) || !pBodyDispatch)
+ Wrapper::HTML_Element_Collection body_elements( pBodyCollection );
+ CComPtr<IDispatch> pBodyDispatch = body_elements.at( 0 );
+ if ( !pBodyDispatch )
{
return;
}
@@ -177,9 +176,9 @@
// Clear cache (if eg. refreshing) ???
if (isMainDoc)
{
- CComVariant vCacheIndex;
-
- if (FAILED(pBodyEl->getAttribute(L"abp", 0, &vCacheIndex)) || vCacheIndex.vt == VT_NULL)
+ Wrapper::HTML_Element body_element( pBodyEl );
+ std::wstring cache_attr;
+ if ( !body_element.attribute( L"abp", cache_attr ) || cache_attr.empty() )
{
ClearCache();
}
@@ -209,29 +208,25 @@
{
pFrameCollection->get_length(&frameCount);
}
+ Wrapper::HTML_Element_Collection frames( pFrameCollection );
// Iterate through all frames
for (long i = 0; i < frameCount; i++)
{
- CComVariant vIndex(i);
- CComVariant vRetIndex;
- CComPtr<IDispatch> pFrameDispatch;
-
- if (SUCCEEDED(pFrameCollection->item(vIndex, vRetIndex, &pFrameDispatch)) && pFrameDispatch)
+ CComPtr<IDispatch> pFrameDispatch = frames.at( i );
+ if ( pFrameDispatch )
{
CComQIPtr<IWebBrowser2> pFrameBrowser = pFrameDispatch;
if (pFrameBrowser)
{
- CComBSTR bstrSrc;
- CString src;
-
- if (SUCCEEDED(pFrameBrowser->get_LocationURL(&bstrSrc)))
+ Wrapper::Browser frame_browser( pFrameBrowser );
+ std::wstring src;
+ if ( frame_browser.Location_URL( src ) )
{
- src = bstrSrc;
- CPluginClient::UnescapeUrl(src);
+ Wrapper::Unescape_URL( src );
}
- if (!src.IsEmpty())
+ if (!src.empty())
{
TraverseDocument(pFrameBrowser, false, indent);
}
@@ -251,37 +246,32 @@
}
// Iterate through all iframes
+ Wrapper::HTML_Element_Collection frames( pFrameCollection );
for (long i = 0; i < frameCount; i++)
{
- CComVariant vIndex(i);
- CComVariant vRetIndex;
- CComPtr<IDispatch> pFrameDispatch;
-
- if (SUCCEEDED(pFrameCollection->item(vIndex, vRetIndex, &pFrameDispatch)) && pFrameDispatch)
+ CComPtr<IDispatch> pFrameDispatch = frames.at( i );
+ if ( pFrameDispatch )
{
CComQIPtr<IHTMLElement> pFrameEl = pFrameDispatch;
if (pFrameEl)
{
- CComVariant vAttr;
+ Wrapper::HTML_Element element( pFrameEl );
+ std::wstring src;
+ if ( element.attribute( L"src", src ) && !src.empty() )
+ {
+ // Some times, domain is missing. Should this be added on image src's as well?''
+ // eg. gadgetzone.com.au
- if (SUCCEEDED(pFrameEl->getAttribute(L"src", 0, &vAttr)) && vAttr.vt == VT_BSTR && ::SysStringLen(vAttr.bstrVal) > 0)
- {
- CString src = vAttr.bstrVal;
-
- // Some times, domain is missing. Should this be added on image src's as well?''
-
- // eg. gadgetzone.com.au
- if (src.Left(2) == L"//")
+ if ( ABP::util::begins_with( src, L"//" ) )
{
src = L"http:" + src;
}
// eg. http://w3schools.com/html/html_examples.asp
- else if (src.Left(4) != L"http" && src.Left(6) != L"res://")
+ else if ( !ABP::util::begins_with( src, L"http" ) && !ABP::util::begins_with( src, L"res://" ) )
{
src = L"http://" + m_domain + src;
}
-
- CPluginClient::UnescapeUrl(src);
+ Wrapper::Unescape_URL( src );
// Check if Iframe should be traversed
if (OnIFrame(pFrameEl, src, indent))
@@ -301,18 +291,16 @@
template <class T>
-void CPluginDomTraverserBase<T>::TraverseChild(IHTMLElement* pEl, IWebBrowser2* pBrowser, CString& indent, bool isCached)
+void CPluginDomTraverserBase<T>::TraverseChild(IHTMLElement* pEl, IWebBrowser2* pBrowser, std::wstring & indent, bool isCached)
{
int cacheIndex = -1;
long cacheAllElementsCount = -1;
+ Wrapper::HTML_Element element( pEl );
m_criticalSection.Lock();
{
- CComVariant vCacheIndex;
- if (isCached && SUCCEEDED(pEl->getAttribute(L"abp", 0, &vCacheIndex)) && vCacheIndex.vt == VT_I4)
+ if ( isCached && element.attribute( L"abp", cacheIndex ) )
{
- cacheIndex = vCacheIndex.intVal;
-
cacheAllElementsCount = m_cacheElements[cacheIndex].m_elements;
}
else
@@ -337,6 +325,7 @@
m_cacheElements[cacheIndex].Init();
+ VARIANT vCacheIndex;
vCacheIndex.vt = VT_I4;
vCacheIndex.intVal = cacheIndex;
@@ -372,14 +361,12 @@
m_criticalSection.Unlock();
// Get tag
- CComBSTR bstrTag;
- if (FAILED(pEl->get_tagName(&bstrTag)) || !bstrTag)
+ std::wstring tag;
+ if ( ! element.tag_name( tag ) || tag.empty() )
{
return;
}
-
- CString tag = bstrTag;
- tag.MakeLower();
+ ABP::util::to_lower( tag );
// Custom OnElement
if (!OnElement(pEl, tag, &m_cacheElements[cacheIndex], false, indent))
@@ -388,7 +375,7 @@
}
// Update frame/iframe cache
- if (tag == "iframe")
+ if (tag == L"iframe")
{
m_criticalSection.Lock();
{
@@ -396,7 +383,7 @@
}
m_criticalSection.Unlock();
}
- else if (tag == "frame")
+ else if (tag == L"frame")
{
m_criticalSection.Lock();
{
@@ -416,24 +403,20 @@
CComPtr<IHTMLElementCollection> pChildCollection;
if (SUCCEEDED(pChildCollectionDisp->QueryInterface(IID_IHTMLElementCollection, (LPVOID*)&pChildCollection)) && pChildCollection)
{
+ Wrapper::HTML_Element_Collection child_elements( pChildCollection );
pChildCollection->get_length(&childElementsCount);
- CComVariant vIndex(0);
-
// Iterate through all children
for (long i = 0; i < childElementsCount; i++)
{
CComPtr<IDispatch> pChildElDispatch;
- CComVariant vRetIndex;
-
- vIndex.intVal = i;
-
- if (SUCCEEDED(pChildCollection->item(vIndex, vRetIndex, &pChildElDispatch)) && pChildElDispatch)
+ pChildElDispatch = child_elements.at( i );
+ if ( pChildElDispatch )
{
CComPtr<IHTMLElement> pChildEl;
if (SUCCEEDED(pChildElDispatch->QueryInterface(IID_IHTMLElement, (LPVOID*)&pChildEl)) && pChildEl)
{
- TraverseChild(pChildEl, pBrowser, indent + " ", isCached);
+ TraverseChild(pChildEl, pBrowser, indent + L" ", isCached);
}
}
}

Powered by Google App Engine
This is Rietveld