LEFT | RIGHT |
1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
2 | 2 |
3 #include "PluginClient.h" | 3 #include "PluginClient.h" |
4 #include "PluginSettings.h" | 4 #include "PluginSettings.h" |
5 #ifdef SUPPORT_CONFIG | |
6 #include "PluginConfig.h" | |
7 #endif | |
8 #include "PluginTab.h" | 5 #include "PluginTab.h" |
9 #include "PluginDomTraverser.h" | 6 #include "AdblockPlusDomTraverser.h" |
10 #include "PluginClass.h" | 7 #include "PluginClass.h" |
11 | |
12 #include "PluginTabBase.h" | 8 #include "PluginTabBase.h" |
13 #include "PluginUtil.h" | 9 #include "PluginUtil.h" |
14 #include "../shared/Utils.h" | 10 #include "../shared/IE_version.h" |
15 #include <dispex.h> | 11 #include <dispex.h> |
| 12 #include <Mshtmhst.h> |
16 | 13 |
17 int CPluginTabBase::s_dictionaryVersion = 0; | 14 int CPluginTabBase::s_dictionaryVersion = 0; |
18 int CPluginTabBase::s_settingsVersion = 1; | 15 int CPluginTabBase::s_settingsVersion = 1; |
19 #ifdef SUPPORT_FILTER | |
20 int CPluginTabBase::s_filterVersion = 0; | 16 int CPluginTabBase::s_filterVersion = 0; |
21 #endif | |
22 #ifdef SUPPORT_WHITELIST | |
23 int CPluginTabBase::s_whitelistVersion = 0; | 17 int CPluginTabBase::s_whitelistVersion = 0; |
24 #endif | |
25 #ifdef SUPPORT_CONFIG | |
26 int CPluginTabBase::s_configVersion = 0; | |
27 #endif | |
28 | |
29 | 18 |
30 CPluginTabBase::CPluginTabBase(CPluginClass* plugin) | 19 CPluginTabBase::CPluginTabBase(CPluginClass* plugin) |
31 : m_plugin(plugin) | 20 : m_plugin(plugin) |
32 , m_isActivated(false) | 21 , m_isActivated(false) |
33 , m_continueThreadRunning(true) | 22 , m_continueThreadRunning(true) |
34 { | 23 { |
35 m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); | 24 m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); |
36 m_filter->hideFiltersLoadedEvent = CreateEvent(NULL, true, false, NULL); | 25 m_filter->hideFiltersLoadedEvent = CreateEvent(NULL, true, false, NULL); |
37 | 26 |
38 CPluginClient* client = CPluginClient::GetInstance(); | 27 CPluginClient* client = CPluginClient::GetInstance(); |
39 if ( ABP::IE::installed_major_version() < 10 ) | 28 if (AdblockPlus::IE::InstalledMajorVersion() < 10) |
40 { | 29 { |
41 m_isActivated = true; | 30 m_isActivated = true; |
42 } | 31 } |
43 | 32 |
44 try | 33 try |
45 { | 34 { |
46 m_thread = std::thread(&CPluginTabBase::ThreadProc, this); | 35 m_thread = std::thread(&CPluginTabBase::ThreadProc, this); |
47 } | 36 } |
48 catch (const std::system_error& ex) | 37 catch (const std::system_error& ex) |
49 { | 38 { |
50 std::wstring errDescription( L"Tab::Thread - Failed to create tab thread" ); | 39 auto errDescription = std::string("Tab::Thread - Failed to create tab thread
") + |
51 errDescription += ABP::debug::widen( ex.code().message() + ex.what() ); | 40 ex.code().message() + ex.what(); |
52 DEBUG_ERROR_LOG( ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_TAB_TH
READ_CREATE_PROCESS, errDescription ); | 41 DEBUG_ERROR_LOG(ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_TAB_THR
EAD_CREATE_PROCESS, errDescription.c_str()); |
53 } | 42 } |
54 | |
55 #ifdef SUPPORT_DOM_TRAVERSER | |
56 m_traverser = new CPluginDomTraverser(static_cast<CPluginTab*>(this)); | 43 m_traverser = new CPluginDomTraverser(static_cast<CPluginTab*>(this)); |
57 #endif // SUPPORT_DOM_TRAVERSER | |
58 } | 44 } |
59 | 45 |
60 | 46 |
61 CPluginTabBase::~CPluginTabBase() | 47 CPluginTabBase::~CPluginTabBase() |
62 { | 48 { |
63 #ifdef SUPPORT_DOM_TRAVERSER | |
64 delete m_traverser; | 49 delete m_traverser; |
65 m_traverser = NULL; | 50 m_traverser = NULL; |
66 #endif // SUPPORT_DOM_TRAVERSER | |
67 | |
68 m_continueThreadRunning = false; | 51 m_continueThreadRunning = false; |
69 if (m_thread.joinable()) { | 52 if (m_thread.joinable()) { |
70 m_thread.join(); | 53 m_thread.join(); |
71 } | 54 } |
72 } | 55 } |
73 | 56 |
74 void CPluginTabBase::OnActivate() | 57 void CPluginTabBase::OnActivate() |
75 { | 58 { |
76 m_isActivated = true; | 59 m_isActivated = true; |
77 } | 60 } |
78 | 61 |
79 | 62 |
80 void CPluginTabBase::OnUpdate() | 63 void CPluginTabBase::OnUpdate() |
81 { | 64 { |
82 m_isActivated = true; | 65 m_isActivated = true; |
83 } | 66 } |
84 | 67 |
85 namespace | 68 namespace |
86 { | 69 { |
87 void FilterLoader(CPluginTabBase* tabBase) | 70 void FilterLoader(CPluginTabBase* tabBase) |
88 { | 71 { |
89 tabBase->m_filter->LoadHideFilters(CPluginClient::GetInstance()->GetElementHid
ingSelectors(tabBase->GetDocumentDomain())); | 72 tabBase->m_filter->LoadHideFilters(CPluginClient::GetInstance()->GetElementH
idingSelectors(tabBase->GetDocumentDomain())); |
90 SetEvent(tabBase->m_filter->hideFiltersLoadedEvent); | 73 SetEvent(tabBase->m_filter->hideFiltersLoadedEvent); |
91 } | 74 } |
92 } | 75 } |
93 | 76 |
94 void CPluginTabBase::OnNavigate(const std::wstring & url) | 77 void CPluginTabBase::OnNavigate(const CString& url) |
95 { | 78 { |
96 SetDocumentUrl(url); | 79 SetDocumentUrl(url); |
97 | |
98 #ifdef SUPPORT_FRAME_CACHING | |
99 ClearFrameCache(GetDocumentDomain()); | 80 ClearFrameCache(GetDocumentDomain()); |
100 #endif | |
101 | |
102 std::wstring domainString = GetDocumentDomain(); | 81 std::wstring domainString = GetDocumentDomain(); |
103 ResetEvent(m_filter->hideFiltersLoadedEvent); | 82 ResetEvent(m_filter->hideFiltersLoadedEvent); |
104 try | 83 try |
105 { | 84 { |
106 std::thread filterLoaderThread(&FilterLoader, this); | 85 std::thread filterLoaderThread(&FilterLoader, this); |
107 filterLoaderThread.detach(); // TODO: but actually we should wait for the th
read in the dtr. | 86 filterLoaderThread.detach(); // TODO: but actually we should wait for the th
read in the dtr. |
108 } | 87 } |
109 catch (const std::system_error& ex) | 88 catch (const std::system_error& ex) |
110 { | 89 { |
111 std::wstring errDescription( L"Class::Thread - Failed to start filter loader
thread, "); | 90 auto errDescription = std::string("Class::Thread - Failed to start filter lo
ader thread, ") + |
112 errDescription += ABP::debug::widen( ex.code().message() + ex.what() ); | 91 ex.code().message() + ex.what(); |
113 DEBUG_ERROR_LOG( ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_MAIN_T
HREAD_CREATE_PROCESS, errDescription ); | 92 DEBUG_ERROR_LOG(ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_MAIN_TH
READ_CREATE_PROCESS, errDescription.c_str()); |
114 } | 93 } |
115 | |
116 #ifdef SUPPORT_DOM_TRAVERSER | |
117 m_traverser->ClearCache(); | 94 m_traverser->ClearCache(); |
118 #endif | |
119 } | |
120 | |
121 namespace { | |
122 } | 95 } |
123 | 96 |
124 void CPluginTabBase::InjectABP(IWebBrowser2* browser) | 97 void CPluginTabBase::InjectABP(IWebBrowser2* browser) |
125 { | 98 { |
126 CriticalSection::Lock lock(m_csInject); | 99 CriticalSection::Lock lock(m_csInject); |
127 std::wstring url = GetDocumentUrl(); | 100 CString url = GetDocumentUrl(); |
128 | 101 CString log; |
129 std::wostringstream log; | 102 log.Format(L"InjectABP. Current URL: %s, settings URL: %s", url, UserSettingsF
ileUrl().c_str()); |
130 log << L"InjectABP. Current URL: " << url << L", settings URL: " << UserSettin
gsFileUrl(); | 103 DEBUG_GENERAL(log); |
131 DEBUG_GENERAL( log.str() ); | 104 if (!(0 == url.CompareNoCase(CString(UserSettingsFileUrl().c_str())) || |
132 | 105 0 == url.CompareNoCase(CString(FirstRunPageFileUrl().c_str())))) |
133 if( !ABP::util::wstring_equal_ci( url, UserSettingsFileUrl() ) | |
134 && !ABP::util::wstring_equal_ci( url, FirstRunPageFileUrl() ) ) | |
135 { | 106 { |
136 DEBUG_GENERAL(L"Not injecting"); | 107 DEBUG_GENERAL(L"Not injecting"); |
137 return; | 108 return; |
138 } | 109 } |
139 DEBUG_GENERAL(L"Going to inject"); | 110 DEBUG_GENERAL(L"Going to inject"); |
140 CComPtr<IDispatch> pDocDispatch; | 111 CComPtr<IDispatch> pDocDispatch; |
141 browser->get_Document(&pDocDispatch); | 112 browser->get_Document(&pDocDispatch); |
142 CComQIPtr<IHTMLDocument2> pDoc2 = pDocDispatch; | 113 CComQIPtr<IHTMLDocument2> pDoc2 = pDocDispatch; |
143 if (!pDoc2) | 114 if (!pDoc2) |
144 { | 115 { |
145 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CRE
ATE_SETTINGS_JAVASCRIPT_INVOKE, L"CPluginTabBase::InjectABP - Failed to QI docum
ent"); | 116 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CRE
ATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to QI docume
nt"); |
146 return; | 117 return; |
147 } | 118 } |
148 CComPtr<IHTMLWindow2> pWnd2; | 119 CComPtr<IHTMLWindow2> pWnd2; |
149 pDoc2->get_parentWindow(&pWnd2); | 120 pDoc2->get_parentWindow(&pWnd2); |
150 if (!pWnd2) | 121 if (!pWnd2) |
151 { | 122 { |
152 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CRE
ATE_SETTINGS_JAVASCRIPT_INVOKE, L"CPluginTabBase::InjectABP - Failed to get pare
nt window"); | 123 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CRE
ATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to get paren
t window"); |
153 return; | 124 return; |
154 } | 125 } |
155 CComQIPtr<IDispatchEx> pWndEx = pWnd2; | 126 CComQIPtr<IDispatchEx> pWndEx = pWnd2; |
156 if (!pWndEx) | 127 if (!pWndEx) |
157 { | 128 { |
158 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CRE
ATE_SETTINGS_JAVASCRIPT_INVOKE, L"CPluginTabBase::InjectABP - Failed to QI dispa
tch"); | 129 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CRE
ATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to QI dispat
ch"); |
159 return; | 130 return; |
160 } | 131 } |
161 // Create "Settings" object in JavaScript. | 132 // Create "Settings" object in JavaScript. |
162 // A method call of "Settings" in JavaScript, transfered to "Invoke" of m_plug
inUserSettings | 133 // A method call of "Settings" in JavaScript, transfered to "Invoke" of m_plug
inUserSettings |
163 DISPID dispid; | 134 DISPID dispid; |
164 HRESULT hr = pWndEx->GetDispID(L"Settings", fdexNameEnsure, &dispid); | 135 HRESULT hr = pWndEx->GetDispID(L"Settings", fdexNameEnsure, &dispid); |
165 if (FAILED(hr)) | 136 if (FAILED(hr)) |
166 { | 137 { |
167 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CR
EATE_SETTINGS_JAVASCRIPT_INVOKE, L"CPluginTabBase::InjectABP - Failed to get dis
patch"); | 138 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CR
EATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to get disp
atch"); |
168 return; | 139 return; |
169 } | 140 } |
170 | 141 CComVariant var((IDispatch*)&m_pluginUserSettings); |
171 DEBUG_GENERAL(L"Injecting"); | 142 |
172 | 143 DEBUG_GENERAL("Injecting"); |
173 VARIANT var; | |
174 var.vt = VT_DISPATCH; | |
175 var.pdispVal = &m_pluginUserSettings; | |
176 | 144 |
177 DISPPARAMS params; | 145 DISPPARAMS params; |
178 params.cArgs = 1; | 146 params.cArgs = 1; |
179 params.cNamedArgs = 0; | 147 params.cNamedArgs = 0; |
180 params.rgvarg = &var; | 148 params.rgvarg = &var; |
181 params.rgdispidNamedArgs = 0; | 149 params.rgdispidNamedArgs = 0; |
182 hr = pWndEx->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPU
T | DISPATCH_PROPERTYPUTREF, ¶ms, 0, 0, 0); | 150 hr = pWndEx->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPU
T | DISPATCH_PROPERTYPUTREF, ¶ms, 0, 0, 0); |
183 DEBUG_GENERAL(L"Invoke"); | 151 DEBUG_GENERAL("Invoke"); |
184 if (FAILED(hr)) | 152 if (FAILED(hr)) |
185 { | 153 { |
186 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CR
EATE_SETTINGS_JAVASCRIPT_INVOKE, L"CPluginTabBase::InjectABP - Failed to create
Settings in JavaScript"); | 154 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CR
EATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to create S
ettings in JavaScript"); |
187 } | 155 } |
188 } | 156 } |
189 | 157 |
190 void CPluginTabBase::OnDownloadComplete(IWebBrowser2* browser) | 158 void CPluginTabBase::OnDownloadComplete(IWebBrowser2* browser) |
191 { | 159 { |
192 #ifdef SUPPORT_DOM_TRAVERSER | 160 CPluginClient* client = CPluginClient::GetInstance(); |
193 if (!CPluginClient::GetInstance()->IsWhitelistedUrl(GetDocumentUrl())) | 161 std::wstring url = to_wstring(GetDocumentUrl()); |
194 { | 162 if (!client->IsWhitelistedUrl(url) && !client->IsElemhideWhitelistedOnDomain(u
rl)) |
195 m_traverser->TraverseDocument(browser, GetDocumentDomain(), GetDocumentUrl()
.c_str()); | 163 { |
196 } | 164 m_traverser->TraverseDocument(browser, GetDocumentDomain(), GetDocumentUrl()
); |
197 #endif // SUPPORT_DOM_TRAVERSER | 165 } |
198 | |
199 InjectABP(browser); | 166 InjectABP(browser); |
200 } | 167 } |
201 | 168 |
202 void CPluginTabBase::OnDocumentComplete(IWebBrowser2* browser, const std::wstrin
g url, bool isDocumentBrowser) | 169 void CPluginTabBase::OnDocumentComplete(IWebBrowser2* browser, const CString& ur
l, bool isDocumentBrowser) |
203 { | 170 { |
204 std::wstring documentUrl = GetDocumentUrl(); | 171 CString documentUrl = GetDocumentUrl(); |
205 | 172 |
206 if (isDocumentBrowser) | 173 if (isDocumentBrowser) |
207 { | 174 { |
208 if (url != documentUrl) | 175 if (url != documentUrl) |
209 { | 176 { |
210 SetDocumentUrl( url ); | 177 SetDocumentUrl(url); |
211 } | 178 } |
212 InjectABP(browser); | 179 InjectABP(browser); |
213 } | 180 } |
214 | 181 if (url.Left(6) != "res://") |
215 #ifdef SUPPORT_DOM_TRAVERSER | |
216 if ( !ABP::util::begins_with( url, L"res://" ) ) | |
217 { | 182 { |
218 // Get document | 183 // Get document |
219 CComPtr<IDispatch> pDocDispatch; | 184 CComPtr<IDispatch> pDocDispatch; |
220 HRESULT hr = browser->get_Document(&pDocDispatch); | 185 HRESULT hr = browser->get_Document(&pDocDispatch); |
221 if (FAILED(hr) || !pDocDispatch) | 186 if (FAILED(hr) || !pDocDispatch) |
222 { | 187 { |
223 return; | 188 return; |
224 } | 189 } |
225 | 190 |
226 CComQIPtr<IHTMLDocument2> pDoc = pDocDispatch; | 191 CComQIPtr<IHTMLDocument2> pDoc = pDocDispatch; |
(...skipping 10 matching lines...) Expand all Loading... |
237 pOleObj->GetClientSite(&pClientSite); | 202 pOleObj->GetClientSite(&pClientSite); |
238 if (pClientSite != NULL) | 203 if (pClientSite != NULL) |
239 { | 204 { |
240 CComPtr<IDocHostUIHandler> docHostUIHandler; | 205 CComPtr<IDocHostUIHandler> docHostUIHandler; |
241 pClientSite->QueryInterface(IID_IDocHostUIHandler, (void**)&docHostUIHandl
er); | 206 pClientSite->QueryInterface(IID_IDocHostUIHandler, (void**)&docHostUIHandl
er); |
242 if (docHostUIHandler != NULL) | 207 if (docHostUIHandler != NULL) |
243 { | 208 { |
244 docHostUIHandler->UpdateUI(); | 209 docHostUIHandler->UpdateUI(); |
245 } | 210 } |
246 } | 211 } |
247 | 212 } |
248 pDoc.Release(); | |
249 pDocDispatch.Release(); | |
250 } | |
251 #endif | |
252 } | 213 } |
253 | 214 |
254 std::wstring CPluginTabBase::GetDocumentDomain() | 215 std::wstring CPluginTabBase::GetDocumentDomain() |
255 { | 216 { |
256 std::wstring domain; | 217 std::wstring domain; |
257 | 218 |
258 m_criticalSection.Lock(); | 219 m_criticalSection.Lock(); |
259 { | 220 { |
260 domain = m_documentDomain; | 221 domain = m_documentDomain; |
261 } | 222 } |
262 m_criticalSection.Unlock(); | 223 m_criticalSection.Unlock(); |
263 | 224 |
264 return domain; | 225 return domain; |
265 } | 226 } |
266 | 227 |
267 void CPluginTabBase::SetDocumentUrl(const std::wstring & url) | 228 void CPluginTabBase::SetDocumentUrl(const CString& url) |
268 { | 229 { |
269 m_criticalSection.Lock(); | 230 m_criticalSection.Lock(); |
270 { | 231 { |
271 m_documentUrl = url; | 232 m_documentUrl = url; |
272 m_documentDomain = CAdblockPlusClient::GetInstance()->GetHostFromUrl(url); | 233 m_documentDomain = CAdblockPlusClient::GetInstance()->GetHostFromUrl(to_wstr
ing(url)); |
273 } | 234 } |
274 m_criticalSection.Unlock(); | 235 m_criticalSection.Unlock(); |
275 } | 236 } |
276 | 237 |
277 std::wstring CPluginTabBase::GetDocumentUrl() | 238 CString CPluginTabBase::GetDocumentUrl() |
278 { | 239 { |
279 std::wstring url; | 240 CString url; |
280 | 241 |
281 m_criticalSection.Lock(); | 242 m_criticalSection.Lock(); |
282 { | 243 { |
283 url = m_documentUrl; | 244 url = m_documentUrl; |
284 } | 245 } |
285 m_criticalSection.Unlock(); | 246 m_criticalSection.Unlock(); |
286 | 247 |
287 return url; | 248 return url; |
288 } | 249 } |
289 | 250 |
290 | 251 |
291 // ============================================================================ | 252 // ============================================================================ |
292 // Frame caching | 253 // Frame caching |
293 // ============================================================================ | 254 // ============================================================================ |
294 | 255 bool CPluginTabBase::IsFrameCached(const CString& url) |
295 #ifdef SUPPORT_FRAME_CACHING | |
296 | |
297 bool CPluginTabBase::IsFrameCached(const std::wstring & url) | |
298 { | 256 { |
299 bool isFrame; | 257 bool isFrame; |
300 | 258 |
301 m_criticalSectionCache.Lock(); | 259 m_criticalSectionCache.Lock(); |
302 { | 260 { |
303 isFrame = m_cacheFrames.find(url) != m_cacheFrames.end(); | 261 isFrame = m_cacheFrames.find(url) != m_cacheFrames.end(); |
304 } | 262 } |
305 m_criticalSectionCache.Unlock(); | 263 m_criticalSectionCache.Unlock(); |
306 | 264 |
307 return isFrame; | 265 return isFrame; |
308 } | 266 } |
309 | 267 |
310 void CPluginTabBase::CacheFrame(const std::wstring & url) | 268 void CPluginTabBase::CacheFrame(const CString& url) |
311 { | 269 { |
312 m_criticalSectionCache.Lock(); | 270 m_criticalSectionCache.Lock(); |
313 { | 271 { |
314 m_cacheFrames.insert(url); | 272 m_cacheFrames.insert(url); |
315 } | 273 } |
316 m_criticalSectionCache.Unlock(); | 274 m_criticalSectionCache.Unlock(); |
317 } | 275 } |
318 | 276 |
319 void CPluginTabBase::ClearFrameCache(const std::wstring & domain) | 277 void CPluginTabBase::ClearFrameCache(const std::wstring& domain) |
320 { | 278 { |
321 m_criticalSectionCache.Lock(); | 279 m_criticalSectionCache.Lock(); |
322 { | 280 { |
323 if (domain.empty() || domain != m_cacheDomain) | 281 if (domain.empty() || domain != m_cacheDomain) |
324 { | 282 { |
325 m_cacheFrames.clear(); | 283 m_cacheFrames.clear(); |
326 m_cacheDomain = domain; | 284 m_cacheDomain = domain; |
327 } | 285 } |
328 } | 286 } |
329 m_criticalSectionCache.Unlock(); | 287 m_criticalSectionCache.Unlock(); |
330 } | 288 } |
331 | 289 |
332 #endif // SUPPORT_FRAME_CACHING | |
333 | |
334 | |
335 void CPluginTabBase::ThreadProc() | 290 void CPluginTabBase::ThreadProc() |
336 { | 291 { |
337 // Force loading/creation of settings | 292 // Force loading/creation of settings |
338 CPluginSettings* settings = CPluginSettings::GetInstance(); | 293 CPluginSettings* settings = CPluginSettings::GetInstance(); |
339 | 294 |
340 settings->SetWorkingThreadId(); | 295 settings->SetWorkingThreadId(); |
341 | 296 |
342 std::wostringstream thread_info; | 297 CString threadInfo; |
343 thread_info << ::GetCurrentProcessId() << L"." << ::GetCurrentThreadId(); | 298 threadInfo.Format(L"%d.%d", ::GetCurrentProcessId(), ::GetCurrentThreadId()); |
344 | 299 |
345 std::wstring t[] = { | 300 CString debugText; |
346 L"==========================================================================
======", | 301 |
347 L"TAB THREAD " + thread_info.str(), | 302 debugText += L"===============================================================
================="; |
348 L"==========================================================================
======", | 303 debugText += L"\nTAB THREAD " + threadInfo; |
349 }; | 304 debugText += L"\n=============================================================
==================="; |
350 DEBUG_GENERAL(t); | 305 |
| 306 DEBUG_GENERAL(debugText) |
351 | 307 |
352 // -------------------------------------------------------------------- | 308 // -------------------------------------------------------------------- |
353 // Tab loop | 309 // Tab loop |
354 // -------------------------------------------------------------------- | 310 // -------------------------------------------------------------------- |
355 | 311 |
356 DWORD loopCount = 0; | 312 DWORD loopCount = 0; |
357 DWORD tabLoopIteration = 1; | 313 DWORD tabLoopIteration = 1; |
358 | 314 |
359 while (this->m_continueThreadRunning) | 315 while (this->m_continueThreadRunning) |
360 { | 316 { |
361 #ifdef ENABLE_DEBUG_THREAD | 317 #ifdef ENABLE_DEBUG_THREAD |
362 std::wostringstream message; | 318 CStringA sTabLoopIteration; |
363 message << L"Loop iteration " << tabLoopIteration; | 319 sTabLoopIteration.Format("%u", tabLoopIteration); |
364 DEBUG_THREAD( L"------------------------------------------------------------
--------------------" ); | 320 |
365 DEBUG_THREAD( message.str() ); | 321 DEBUG_THREAD("--------------------------------------------------------------
------------------") |
366 DEBUG_THREAD( L"------------------------------------------------------------
--------------------" ); | 322 DEBUG_THREAD("Loop iteration " + sTabLoopIteration); |
| 323 DEBUG_THREAD("--------------------------------------------------------------
------------------") |
367 #endif | 324 #endif |
368 if (this->m_isActivated) | 325 if (this->m_isActivated) |
369 { | 326 { |
370 bool isChanged = false; | 327 bool isChanged = false; |
371 | 328 |
372 if (isChanged) | 329 if (isChanged) |
373 { | 330 { |
374 this->m_plugin->UpdateStatusBar(); | 331 this->m_plugin->UpdateStatusBar(); |
375 } | 332 } |
376 | 333 |
(...skipping 14 matching lines...) Expand all Loading... |
391 CPluginClient::LogPluginError(pluginError.GetErrorCode(), pluginError.
GetErrorId(), pluginError.GetErrorSubid(), pluginError.GetErrorDescription(), tr
ue, pluginError.GetProcessId(), pluginError.GetThreadId()); | 348 CPluginClient::LogPluginError(pluginError.GetErrorCode(), pluginError.
GetErrorId(), pluginError.GetErrorSubid(), pluginError.GetErrorDescription(), tr
ue, pluginError.GetProcessId(), pluginError.GetThreadId()); |
392 } | 349 } |
393 | 350 |
394 // Non-hanging sleep | 351 // Non-hanging sleep |
395 Sleep(50); | 352 Sleep(50); |
396 } | 353 } |
397 | 354 |
398 tabLoopIteration++; | 355 tabLoopIteration++; |
399 } | 356 } |
400 } | 357 } |
LEFT | RIGHT |