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