| Index: src/plugin/PluginDomTraverserBase.h |
| =================================================================== |
| --- a/src/plugin/PluginDomTraverserBase.h |
| +++ b/src/plugin/PluginDomTraverserBase.h |
| @@ -18,7 +18,7 @@ |
| #ifndef _PLUGIN_DOM_TRAVERSER_BASE_H_ |
| #define _PLUGIN_DOM_TRAVERSER_BASE_H_ |
| -#include "PluginTabBase.h" |
| +#include "PluginFilter.h" |
| #include "PluginUtil.h" |
| class CPluginDomTraverserCacheBase |
| @@ -37,16 +37,12 @@ |
| public: |
| - CPluginDomTraverserBase(CPluginTab* tab); |
| + CPluginDomTraverserBase(CPluginFilter* filterSet); |
| ~CPluginDomTraverserBase(); |
| - void TraverseHeader(bool isHeaderTraversed); |
| - |
| - void TraverseDocument(IWebBrowser2* pBrowser, const std::wstring& domain, const std::wstring& documentUrl); |
| + void TraverseDocumentRoot(IWebBrowser2* pBrowser, const std::wstring& domain, const std::wstring& documentUrl); |
| void TraverseSubdocument(IWebBrowser2* pBrowser, const std::wstring& domain, const std::wstring& documentUrl); |
| - virtual void ClearCache(); |
| - |
| protected: |
| virtual bool OnIFrame(IHTMLElement* pEl, const std::wstring& url, const std::wstring& indent) { return true; } |
| @@ -56,7 +52,7 @@ |
| protected: |
| - void TraverseDocument(IWebBrowser2* pBrowser, bool isMainDoc, const std::wstring& indent); |
| + void TraverseDocument(IWebBrowser2* pBrowser, const std::wstring& indent); |
| void TraverseChild(IHTMLElement* pEl, IWebBrowser2* pBrowser, const std::wstring& indent, bool isCached=true); |
| CComAutoCriticalSection m_criticalSection; |
| @@ -64,11 +60,7 @@ |
| std::wstring m_domain; |
| std::wstring m_documentUrl; |
| - bool m_isHeaderTraversed; |
| - |
| // Caching |
| - long m_cacheDomElementCount; |
| - |
| int m_cacheIndexLast; |
| int m_cacheElementsMax; |
| std::set<std::wstring> m_cacheDocumentHasFrames; |
| @@ -76,13 +68,12 @@ |
| T* m_cacheElements; |
| - CPluginTab* m_tab; |
| - CComPtr<IWebBrowser2> m_pBrowser; |
| + CPluginFilter* filterSet; |
| }; |
| template <class T> |
| -CPluginDomTraverserBase<T>::CPluginDomTraverserBase(CPluginTab* tab) : |
| - m_tab(tab), m_isHeaderTraversed(false), m_cacheDomElementCount(0), m_cacheIndexLast(0), m_cacheElementsMax(5000) |
| +CPluginDomTraverserBase<T>::CPluginDomTraverserBase(CPluginFilter* filterSet) : |
| + filterSet(filterSet), m_cacheIndexLast(0), m_cacheElementsMax(5000) |
| { |
| m_cacheElements = new T[m_cacheElementsMax]; |
| } |
| @@ -95,26 +86,11 @@ |
| } |
| template <class T> |
| -void CPluginDomTraverserBase<T>::TraverseHeader(bool isHeaderTraversed) |
| -{ |
| - m_isHeaderTraversed = isHeaderTraversed; |
| -} |
| - |
| -template <class T> |
| -void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, const std::wstring& domain, const std::wstring& documentUrl) |
| +void CPluginDomTraverserBase<T>::TraverseDocumentRoot(IWebBrowser2* pBrowser, const std::wstring& domain, const std::wstring& documentUrl) |
| { |
| m_domain = domain; |
| m_documentUrl = documentUrl; |
| - TraverseDocument(pBrowser, true, L""); |
| -} |
| - |
| - |
| -template <class T> |
| -void CPluginDomTraverserBase<T>::TraverseSubdocument(IWebBrowser2* pBrowser, const std::wstring& domain, const std::wstring& documentUrl) |
| -{ |
| - m_domain = domain; |
| - m_documentUrl = documentUrl; |
| - TraverseDocument(pBrowser, false, L""); |
| + TraverseDocument(pBrowser, L""); |
| } |
| @@ -126,9 +102,9 @@ |
| template <class T> |
| -void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, bool isMainDoc, const std::wstring& indent) |
| +void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, const std::wstring& indent) |
| { |
| - DWORD res = WaitForSingleObject(m_tab->m_filter.hideFiltersLoadedEvent, ENGINE_STARTUP_TIMEOUT); |
| + DWORD res = WaitForSingleObject(filterSet->hideFiltersLoadedEvent, ENGINE_STARTUP_TIMEOUT); |
| if (!IsEnabled()) return; |
| VARIANT_BOOL isBusy; |
| @@ -161,41 +137,22 @@ |
| } |
| CComPtr<IHTMLElement> pBodyEl; |
| - |
| - if (m_isHeaderTraversed) |
| + CComPtr<IHTMLElementCollection> pBodyCollection; |
| + if (FAILED(pDoc->getElementsByTagName(ATL::CComBSTR(L"body"), &pBodyCollection)) || !pBodyCollection) |
| { |
| - pBodyEl = pBody; |
| - } |
| - else |
| - { |
| - CComPtr<IHTMLElementCollection> pBodyCollection; |
| - if (FAILED(pDoc->getElementsByTagName(ATL::CComBSTR(L"body"), &pBodyCollection)) || !pBodyCollection) |
| - { |
| - return; |
| - } |
| - |
| - CComVariant vIndex(0); |
| - CComPtr<IDispatch> pBodyDispatch; |
| - if (FAILED(pBodyCollection->item(vIndex, vIndex, &pBodyDispatch)) || !pBodyDispatch) |
| - { |
| - return; |
| - } |
| - |
| - if (FAILED(pBodyDispatch->QueryInterface(&pBodyEl)) || !pBodyEl) |
| - { |
| - return; |
| - } |
| + return; |
| } |
| - // Clear cache (if eg. refreshing) ??? |
| - if (isMainDoc) |
| + CComVariant vIndex(0); |
| + CComPtr<IDispatch> pBodyDispatch; |
| + if (FAILED(pBodyCollection->item(vIndex, vIndex, &pBodyDispatch)) || !pBodyDispatch) |
| { |
| - CComVariant vCacheIndex; |
| + return; |
| + } |
| - if (FAILED(pBodyEl->getAttribute(ATL::CComBSTR(L"abp"), 0, &vCacheIndex)) || vCacheIndex.vt == VT_NULL) |
| - { |
| - ClearCache(); |
| - } |
| + if (FAILED(pBodyDispatch->QueryInterface(&pBodyEl)) || !pBodyEl) |
| + { |
| + return; |
| } |
| // Hide elements in body part |
| @@ -243,7 +200,7 @@ |
| } |
| if (!src.empty()) |
| { |
| - TraverseDocument(pFrameBrowser, false, indent); |
| + TraverseDocument(pFrameBrowser, indent); |
| } |
| } |
| } |
| @@ -297,7 +254,7 @@ |
| CComQIPtr<IWebBrowser2> pFrameBrowser = pFrameDispatch; |
| if (pFrameBrowser) |
| { |
| - TraverseDocument(pFrameBrowser, false, indent); |
| + TraverseDocument(pFrameBrowser, indent); |
| } |
| } |
| } |
| @@ -449,17 +406,4 @@ |
| } |
| -template <class T> |
| -void CPluginDomTraverserBase<T>::ClearCache() |
| -{ |
| - m_criticalSection.Lock(); |
| - { |
| - m_cacheIndexLast = 0; |
| - m_cacheDocumentHasFrames.clear(); |
| - m_cacheDocumentHasIframes.clear(); |
| - } |
| - m_criticalSection.Unlock(); |
| -} |
| - |
| - |
| #endif // _PLUGIN_DOM_TRAVERSER_BASE_H_ |