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

Side by Side Diff: src/plugin/PluginDomTraverserBase.h

Issue 4912420225024000: Issue #1234 - Convert strings associated with URL's (Closed)
Patch Set: Created Jan. 5, 2015, 4:15 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 #ifndef _PLUGIN_DOM_TRAVERSER_BASE_H_ 1 #ifndef _PLUGIN_DOM_TRAVERSER_BASE_H_
2 #define _PLUGIN_DOM_TRAVERSER_BASE_H_ 2 #define _PLUGIN_DOM_TRAVERSER_BASE_H_
3 3
4 4
5 #include "PluginTypedef.h" 5 #include "PluginTypedef.h"
6 #include "PluginTab.h" 6 #include "PluginTab.h"
7 7
8 8
9 class CPluginDomTraverserCacheBase 9 class CPluginDomTraverserCacheBase
10 { 10 {
11 public: 11 public:
12 12
13 long m_elements; 13 long m_elements;
14 14
15 CPluginDomTraverserCacheBase() : m_elements(0) {}; 15 CPluginDomTraverserCacheBase() : m_elements(0) {};
16 void Init() { m_elements=0; } 16 void Init() { m_elements=0; }
17 }; 17 };
18 18
19 template <class T> 19 template <class T>
20 class CPluginDomTraverserBase 20 class CPluginDomTraverserBase
21 { 21 {
22 22
23 public: 23 public:
24 24
25 CPluginDomTraverserBase(CPluginTab* tab); 25 CPluginDomTraverserBase(CPluginTab* tab);
26 ~CPluginDomTraverserBase(); 26 ~CPluginDomTraverserBase();
27 27
28 void TraverseHeader(bool isHeaderTraversed); 28 void TraverseHeader(bool isHeaderTraversed);
29 29
30 void TraverseDocument(IWebBrowser2* pBrowser, const std::wstring& domain, cons t CString& documentName); 30 void TraverseDocument(IWebBrowser2* pBrowser, const std::wstring& domain, cons t std::wstring& documentName);
31 void TraverseSubdocument(IWebBrowser2* pBrowser, const std::wstring& domain, c onst CString& documentName); 31 void TraverseSubdocument(IWebBrowser2* pBrowser, const std::wstring& domain, c onst CString& documentName);
32 32
33 virtual void ClearCache(); 33 virtual void ClearCache();
34 34
35 protected: 35 protected:
36 36
37 virtual bool OnIFrame(IHTMLElement* pEl, const CString& url, CString& indent) { return true; } 37 virtual bool OnIFrame(IHTMLElement* pEl, const std::wstring& url, CString& ind ent) { return true; }
38 virtual bool OnElement(IHTMLElement* pEl, const CString& tag, T* cache, bool i sDebug, CString& indent) { return true; } 38 virtual bool OnElement(IHTMLElement* pEl, const CString& tag, T* cache, bool i sDebug, CString& indent) { return true; }
39 39
40 virtual bool IsEnabled(); 40 virtual bool IsEnabled();
41 41
42 protected: 42 protected:
43 43
44 void TraverseDocument(IWebBrowser2* pBrowser, bool isMainDoc, CString indent); 44 void TraverseDocument(IWebBrowser2* pBrowser, bool isMainDoc, CString indent);
45 void TraverseChild(IHTMLElement* pEl, IWebBrowser2* pBrowser, CString& indent, bool isCached=true); 45 void TraverseChild(IHTMLElement* pEl, IWebBrowser2* pBrowser, CString& indent, bool isCached=true);
46 46
47 CComAutoCriticalSection m_criticalSection; 47 CComAutoCriticalSection m_criticalSection;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 delete [] m_cacheElements; 79 delete [] m_cacheElements;
80 } 80 }
81 81
82 template <class T> 82 template <class T>
83 void CPluginDomTraverserBase<T>::TraverseHeader(bool isHeaderTraversed) 83 void CPluginDomTraverserBase<T>::TraverseHeader(bool isHeaderTraversed)
84 { 84 {
85 m_isHeaderTraversed = isHeaderTraversed; 85 m_isHeaderTraversed = isHeaderTraversed;
86 } 86 }
87 87
88 template <class T> 88 template <class T>
89 void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, const std::wstring& domain, const CString& documentName) 89 void CPluginDomTraverserBase<T>::TraverseDocument(IWebBrowser2* pBrowser, const std::wstring& domain, const std::wstring& documentName)
90 { 90 {
91 m_domain = domain; 91 m_domain = domain;
92 92
93 TraverseDocument(pBrowser, true, ""); 93 TraverseDocument(pBrowser, true, "");
94 } 94 }
95 95
96 96
97 template <class T> 97 template <class T>
98 void CPluginDomTraverserBase<T>::TraverseSubdocument(IWebBrowser2* pBrowser, con st std::wstring& domain, const CString& documentName) 98 void CPluginDomTraverserBase<T>::TraverseSubdocument(IWebBrowser2* pBrowser, con st std::wstring& domain, const CString& documentName)
99 { 99 {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 { 213 {
214 CComVariant vIndex(i); 214 CComVariant vIndex(i);
215 CComVariant vRetIndex; 215 CComVariant vRetIndex;
216 CComPtr<IDispatch> pFrameDispatch; 216 CComPtr<IDispatch> pFrameDispatch;
217 217
218 if (SUCCEEDED(pFrameCollection->item(vIndex, vRetIndex, &pFrameDispatch)) && pFrameDispatch) 218 if (SUCCEEDED(pFrameCollection->item(vIndex, vRetIndex, &pFrameDispatch)) && pFrameDispatch)
219 { 219 {
220 CComQIPtr<IWebBrowser2> pFrameBrowser = pFrameDispatch; 220 CComQIPtr<IWebBrowser2> pFrameBrowser = pFrameDispatch;
221 if (pFrameBrowser) 221 if (pFrameBrowser)
222 { 222 {
223 std::wstring src;
223 CComBSTR bstrSrc; 224 CComBSTR bstrSrc;
224 CString src; 225 if (SUCCEEDED(pFrameBrowser->get_LocationURL(&bstrSrc)) && bstrSrc)
225
226 if (SUCCEEDED(pFrameBrowser->get_LocationURL(&bstrSrc)))
227 { 226 {
228 src = bstrSrc; 227 src = std::wstring(bstrSrc,SysStringLen(bstrSrc));
229 CPluginClient::UnescapeUrl(src); 228 UnescapeUrl(src);
230 } 229 }
231 230 if (!src.empty())
232 if (!src.IsEmpty())
233 { 231 {
234 TraverseDocument(pFrameBrowser, false, indent); 232 TraverseDocument(pFrameBrowser, false, indent);
235 } 233 }
236 } 234 }
237 } 235 }
238 } 236 }
239 } 237 }
240 238
241 // Iframes 239 // Iframes
242 if (hasIframes) 240 if (hasIframes)
(...skipping 14 matching lines...) Expand all
257 255
258 if (SUCCEEDED(pFrameCollection->item(vIndex, vRetIndex, &pFrameDispatch)) && pFrameDispatch) 256 if (SUCCEEDED(pFrameCollection->item(vIndex, vRetIndex, &pFrameDispatch)) && pFrameDispatch)
259 { 257 {
260 CComQIPtr<IHTMLElement> pFrameEl = pFrameDispatch; 258 CComQIPtr<IHTMLElement> pFrameEl = pFrameDispatch;
261 if (pFrameEl) 259 if (pFrameEl)
262 { 260 {
263 CComVariant vAttr; 261 CComVariant vAttr;
264 262
265 if (SUCCEEDED(pFrameEl->getAttribute(L"src", 0, &vAttr)) && vAttr.vt = = VT_BSTR && ::SysStringLen(vAttr.bstrVal) > 0) 263 if (SUCCEEDED(pFrameEl->getAttribute(L"src", 0, &vAttr)) && vAttr.vt = = VT_BSTR && ::SysStringLen(vAttr.bstrVal) > 0)
266 { 264 {
267 CString src = vAttr.bstrVal; 265 CString srcLegacy = vAttr.bstrVal;
268 266
269 // Some times, domain is missing. Should this be added on image src' s as well?'' 267 // Some times, domain is missing. Should this be added on image src' s as well?''
270 268
271 // eg. gadgetzone.com.au 269 // eg. gadgetzone.com.au
272 if (src.Left(2) == L"//") 270 if (srcLegacy.Left(2) == L"//")
273 { 271 {
274 src = L"http:" + src; 272 srcLegacy = L"http:" + srcLegacy;
275 } 273 }
276 // eg. http://w3schools.com/html/html_examples.asp 274 // eg. http://w3schools.com/html/html_examples.asp
277 else if (src.Left(4) != L"http" && src.Left(6) != L"res://") 275 else if (srcLegacy.Left(4) != L"http" && srcLegacy.Left(6) != L"res: //")
278 { 276 {
279 src = L"http://" + to_CString(m_domain) + src; 277 srcLegacy = L"http://" + to_CString(m_domain) + srcLegacy;
sergei 2015/01/06 13:18:18 should ToCString be instead of to_CString here?
Eric 2015/01/06 19:38:59 It's time to do a wholesale replacement, which was
Oleksandr 2015/01/13 10:08:06 Would be great to not commit to_CString anyway tho
280 } 278 }
281 279 std::wstring src(ToWstring(srcLegacy));
282 CPluginClient::UnescapeUrl(src); 280 UnescapeUrl(src);
283 281
284 // Check if Iframe should be traversed 282 // Check if Iframe should be traversed
285 if (OnIFrame(pFrameEl, src, indent)) 283 if (OnIFrame(pFrameEl, src, indent))
286 { 284 {
287 CComQIPtr<IWebBrowser2> pFrameBrowser = pFrameDispatch; 285 CComQIPtr<IWebBrowser2> pFrameBrowser = pFrameDispatch;
288 if (pFrameBrowser) 286 if (pFrameBrowser)
289 { 287 {
290 TraverseDocument(pFrameBrowser, false, indent); 288 TraverseDocument(pFrameBrowser, false, indent);
291 } 289 }
292 } 290 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 { 446 {
449 m_cacheIndexLast = 0; 447 m_cacheIndexLast = 0;
450 m_cacheDocumentHasFrames.clear(); 448 m_cacheDocumentHasFrames.clear();
451 m_cacheDocumentHasIframes.clear(); 449 m_cacheDocumentHasIframes.clear();
452 } 450 }
453 m_criticalSection.Unlock(); 451 m_criticalSection.Unlock();
454 } 452 }
455 453
456 454
457 #endif // _PLUGIN_DOM_TRAVERSER_BASE_H_ 455 #endif // _PLUGIN_DOM_TRAVERSER_BASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld