OLD | NEW |
1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
2 | 2 |
3 #include "PluginClass.h" | 3 #include "PluginClass.h" |
4 #include "PluginSettings.h" | 4 #include "PluginSettings.h" |
5 #include "PluginSystem.h" | 5 #include "PluginSystem.h" |
6 #ifdef SUPPORT_FILTER | 6 #ifdef SUPPORT_FILTER |
7 #include "PluginFilter.h" | 7 #include "PluginFilter.h" |
8 #endif | 8 #endif |
9 #include "PluginMimeFilterClient.h" | 9 #include "PluginMimeFilterClient.h" |
10 #include "PluginClient.h" | 10 #include "PluginClient.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 m_hStatusBarWnd = NULL; | 63 m_hStatusBarWnd = NULL; |
64 m_hPaneWnd = NULL; | 64 m_hPaneWnd = NULL; |
65 m_nPaneWidth = 0; | 65 m_nPaneWidth = 0; |
66 m_pWndProcStatus = NULL; | 66 m_pWndProcStatus = NULL; |
67 m_hTheme = NULL; | 67 m_hTheme = NULL; |
68 m_isInitializedOk = false; | 68 m_isInitializedOk = false; |
69 | 69 |
70 | 70 |
71 m_tab = new CPluginTab(this); | 71 m_tab = new CPluginTab(this); |
72 | 72 |
73 // Load / create settings | 73 // Load settings (fetch the available subscriptions, if still not fetched) |
74 CPluginSettings* settings = CPluginSettings::GetInstance(); | 74 CPluginSettings* settings = CPluginSettings::GetInstance(); |
75 | 75 |
76 CPluginSystem* system = CPluginSystem::GetInstance(); | 76 CPluginSystem* system = CPluginSystem::GetInstance(); |
77 | 77 |
78 std::wstring locale((LPCWSTR)system->GetBrowserLanguage()); | 78 std::wstring locale((LPCWSTR)system->GetBrowserLanguage()); |
79 Dictionary::Create(locale); | 79 Dictionary::Create(locale); |
80 | |
81 bool isMainTab = settings->IncrementTabCount(); | |
82 | |
83 if (isMainTab) | |
84 { | |
85 // Prepare settings | |
86 settings->SetMainProcessId(); | |
87 settings->SetMainUiThreadId(); | |
88 #ifdef ENABLE_DEBUG_RESULT | |
89 CPluginDebug::DebugResultClear(); | |
90 #endif | |
91 } | |
92 } | 80 } |
93 | 81 |
94 CPluginClass::~CPluginClass() | 82 CPluginClass::~CPluginClass() |
95 { | 83 { |
96 delete m_tab; | 84 delete m_tab; |
97 | |
98 CPluginSettings* settings = CPluginSettings::GetInstance(); | |
99 | |
100 settings->DecrementTabCount(); | |
101 } | 85 } |
102 | 86 |
103 | 87 |
104 ///////////////////////////////////////////////////////////////////////////// | 88 ///////////////////////////////////////////////////////////////////////////// |
105 // Initialization | 89 // Initialization |
106 | 90 |
107 HRESULT CPluginClass::FinalConstruct() | 91 HRESULT CPluginClass::FinalConstruct() |
108 { | 92 { |
109 return S_OK; | 93 return S_OK; |
110 } | 94 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 } | 207 } |
224 } | 208 } |
225 else | 209 else |
226 { | 210 { |
227 url = m_tab->GetDocumentUrl(); | 211 url = m_tab->GetDocumentUrl(); |
228 } | 212 } |
229 | 213 |
230 return url; | 214 return url; |
231 } | 215 } |
232 | 216 |
233 void CPluginClass::LaunchUpdater(const CString& strPath) | |
234 { | |
235 PROCESS_INFORMATION pi; | |
236 ::ZeroMemory(&pi, sizeof(pi)); | |
237 | |
238 STARTUPINFO si; | |
239 ::ZeroMemory(&si, sizeof(si)); | |
240 si.cb = sizeof(si); | |
241 si.wShowWindow = FALSE; | |
242 CString cpath; | |
243 if (strPath.Find(L".exe") == strPath.GetLength() - 4) | |
244 { | |
245 cpath = strPath; | |
246 } | |
247 else | |
248 { | |
249 cpath = _T("\"msiexec.exe\" /i \"") + strPath + _T("\" UPDATEPLUGIN=\"True\"
"); | |
250 } | |
251 | |
252 if (!::CreateProcess(NULL, cpath.GetBuffer(), NULL, NULL, FALSE, CREATE_BREAKA
WAY_FROM_JOB, NULL, NULL, &si, &pi)) | |
253 { | |
254 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UPDATER, PLUGIN_ERROR_UPDATER
_CREATE_PROCESS, "Class::Updater - Failed to start process"); | |
255 return; | |
256 } | |
257 #ifndef AUTOMATIC_SHUTDOWN | |
258 else | |
259 { | |
260 ::WaitForSingleObject(pi.hProcess, INFINITE); | |
261 } | |
262 #endif // not AUTOMATIC_SHUTDOWN | |
263 | |
264 ::CloseHandle(pi.hProcess); | |
265 ::CloseHandle(pi.hThread); | |
266 } | |
267 | |
268 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) | 217 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) |
269 { | 218 { |
270 if (thisPtr == NULL) | 219 if (thisPtr == NULL) |
271 return 0; | 220 return 0; |
272 if (!((CPluginClass*)thisPtr)->InitObject(true)) | 221 if (!((CPluginClass*)thisPtr)->InitObject(true)) |
273 { | 222 { |
274 ((CPluginClass*)thisPtr)->Unadvice(); | 223 ((CPluginClass*)thisPtr)->Unadvice(); |
275 } | 224 } |
276 | 225 |
277 if ((((CPluginClass*)thisPtr)->m_hPaneWnd == NULL) || (!((CPluginClass*)thisPt
r)->IsStatusBarEnabled())) | 226 if ((((CPluginClass*)thisPtr)->m_hPaneWnd == NULL) || (!((CPluginClass*)thisPt
r)->IsStatusBarEnabled())) |
(...skipping 12 matching lines...) Expand all Loading... |
290 // so we should handle that it is called this way several times during a session | 239 // so we should handle that it is called this way several times during a session |
291 STDMETHODIMP CPluginClass::SetSite(IUnknown* unknownSite) | 240 STDMETHODIMP CPluginClass::SetSite(IUnknown* unknownSite) |
292 { | 241 { |
293 CPluginSettings* settings = CPluginSettings::GetInstance(); | 242 CPluginSettings* settings = CPluginSettings::GetInstance(); |
294 CPluginSystem* system = CPluginSystem::GetInstance(); | 243 CPluginSystem* system = CPluginSystem::GetInstance(); |
295 | 244 |
296 MULTIPLE_VERSIONS_CHECK(); | 245 MULTIPLE_VERSIONS_CHECK(); |
297 | 246 |
298 if (unknownSite) | 247 if (unknownSite) |
299 { | 248 { |
300 if (settings->IsMainProcess() && settings->IsMainUiThread()) | 249 DEBUG_GENERAL(L"============================================================
====================\nNEW TAB UI\n==============================================
==================================") |
301 { | |
302 DEBUG_GENERAL(L"==========================================================
======================\nMAIN TAB UI\n===========================================
=====================================") | |
303 } | |
304 else | |
305 { | |
306 DEBUG_GENERAL(L"==========================================================
======================\nNEW TAB UI\n============================================
====================================") | |
307 } | |
308 | 250 |
309 HRESULT hr = ::CoInitialize(NULL); | 251 HRESULT hr = ::CoInitialize(NULL); |
310 if (FAILED(hr)) | 252 if (FAILED(hr)) |
311 { | 253 { |
312 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, "
Class::SetSite - CoInitialize"); | 254 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, "
Class::SetSite - CoInitialize"); |
313 } | 255 } |
314 | 256 |
315 s_criticalSectionBrowser.Lock(); | 257 s_criticalSectionBrowser.Lock(); |
316 { | 258 { |
317 m_webBrowser2 = unknownSite; | 259 m_webBrowser2 = unknownSite; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
422 m_hStatusBarWnd = NULL; | 364 m_hStatusBarWnd = NULL; |
423 | 365 |
424 // Remove instance from the list, shutdown threads | 366 // Remove instance from the list, shutdown threads |
425 HANDLE hMainThread = NULL; | 367 HANDLE hMainThread = NULL; |
426 HANDLE hTabThread = NULL; | 368 HANDLE hTabThread = NULL; |
427 | 369 |
428 s_criticalSectionLocal.Lock(); | 370 s_criticalSectionLocal.Lock(); |
429 { | 371 { |
430 s_instances.Remove(this); | 372 s_instances.Remove(this); |
431 | 373 |
432 if (s_instances.GetSize() == 0) | |
433 { | |
434 if (settings->IsMainProcess() && settings->IsMainUiThread()) | |
435 { | |
436 hMainThread = s_hMainThread; | |
437 s_hMainThread = NULL; | |
438 } | |
439 } | |
440 | |
441 std::map<DWORD,CPluginClass*>::iterator it = s_threadInstances.find(::GetC
urrentThreadId()); | 374 std::map<DWORD,CPluginClass*>::iterator it = s_threadInstances.find(::GetC
urrentThreadId()); |
442 if (it != s_threadInstances.end()) | 375 if (it != s_threadInstances.end()) |
443 { | 376 { |
444 s_threadInstances.erase(it); | 377 s_threadInstances.erase(it); |
445 } | 378 } |
446 if (s_instances.GetSize() == 0) | 379 if (s_instances.GetSize() == 0) |
447 { | 380 { |
448 CPluginClientFactory::ReleaseMimeFilterClientInstance(); | 381 CPluginClientFactory::ReleaseMimeFilterClientInstance(); |
449 } | 382 } |
450 } | 383 } |
451 s_criticalSectionLocal.Unlock(); | 384 s_criticalSectionLocal.Unlock(); |
452 | 385 |
453 if (hMainThread != NULL) | |
454 { | |
455 s_isMainThreadDone = true; | |
456 | |
457 ::WaitForSingleObject(hMainThread, INFINITE); | |
458 ::CloseHandle(hMainThread); | |
459 } | |
460 | |
461 // Release browser interface | 386 // Release browser interface |
462 s_criticalSectionBrowser.Lock(); | 387 s_criticalSectionBrowser.Lock(); |
463 { | 388 { |
464 m_webBrowser2.Release(); | 389 m_webBrowser2.Release(); |
465 } | 390 } |
466 s_criticalSectionBrowser.Unlock(); | 391 s_criticalSectionBrowser.Unlock(); |
467 | 392 |
468 if (settings->IsMainProcess() && settings->IsMainUiThread()) | 393 DEBUG_GENERAL("=============================================================
===================\nNEW TAB UI - END\n=========================================
=======================================") |
469 { | |
470 DEBUG_GENERAL("===========================================================
=====================\nMAIN TAB UI - END\n======================================
==========================================") | |
471 } | |
472 else | |
473 { | |
474 DEBUG_GENERAL("===========================================================
=====================\nNEW TAB UI - END\n=======================================
=========================================") | |
475 } | |
476 | 394 |
477 ::CoUninitialize(); | 395 ::CoUninitialize(); |
478 } | 396 } |
479 | 397 |
480 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); | 398 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); |
481 } | 399 } |
482 | 400 |
483 bool CPluginClass::IsStatusBarEnabled() | 401 bool CPluginClass::IsStatusBarEnabled() |
484 { | 402 { |
485 HKEY pHkey; | 403 HKEY pHkey; |
(...skipping 18 matching lines...) Expand all Loading... |
504 } | 422 } |
505 return trueth == 1; | 423 return trueth == 1; |
506 } | 424 } |
507 | 425 |
508 void CPluginClass::ShowStatusBar() | 426 void CPluginClass::ShowStatusBar() |
509 { | 427 { |
510 VARIANT_BOOL isVisible; | 428 VARIANT_BOOL isVisible; |
511 | 429 |
512 CPluginSettings* settings = CPluginSettings::GetInstance(); | 430 CPluginSettings* settings = CPluginSettings::GetInstance(); |
513 | 431 |
| 432 //TODO: Remove the message box |
| 433 MessageBox(NULL, L"", L"", MB_OK); |
| 434 |
514 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); | 435 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); |
515 if (browser) | 436 if (browser) |
516 { | 437 { |
517 HRESULT hr = S_OK; | 438 HRESULT hr = S_OK; |
518 hr = browser->get_StatusBar(&isVisible); | 439 hr = browser->get_StatusBar(&isVisible); |
519 if (SUCCEEDED(hr)) | 440 if (SUCCEEDED(hr)) |
520 { | 441 { |
521 if (!isVisible) | 442 if (!isVisible) |
522 { | 443 { |
523 if (!settings->GetStatusBarAsked()) | 444 if (!settings->GetStatusBarAsked()) |
524 { | 445 { |
525 SHANDLE_PTR pBrowserHWnd; | 446 SHANDLE_PTR pBrowserHWnd; |
526 browser->get_HWND((SHANDLE_PTR*)&pBrowserHWnd); | 447 browser->get_HWND((SHANDLE_PTR*)&pBrowserHWnd); |
527 Dictionary* dictionary = Dictionary::GetInstance(); | 448 Dictionary* dictionary = Dictionary::GetInstance(); |
528 settings->SetStatusBarAsked(true); | 449 settings->SetStatusBarAsked(); |
529 | 450 |
530 HKEY pHkey; | 451 HKEY pHkey; |
531 HKEY pHkeySub; | 452 HKEY pHkeySub; |
532 LSTATUS regRes = 0; | 453 LSTATUS regRes = 0; |
533 regRes = RegOpenCurrentUser(KEY_WRITE, &pHkey); | 454 regRes = RegOpenCurrentUser(KEY_WRITE, &pHkey); |
534 | 455 |
535 // Do we have enough rights to enable a status bar? | 456 // Do we have enough rights to enable a status bar? |
536 if (regRes != 0) | 457 if (regRes != 0) |
537 { | 458 { |
538 // We use the tab window here and in the next few calls, since the b
rowser window may still not be available | 459 // We use the tab window here and in the next few calls, since the b
rowser window may still not be available |
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 // Create status pane | 819 // Create status pane |
899 if (bBHO) | 820 if (bBHO) |
900 { | 821 { |
901 if (!CreateStatusBarPane()) | 822 if (!CreateStatusBarPane()) |
902 { | 823 { |
903 return false; | 824 return false; |
904 } | 825 } |
905 } | 826 } |
906 | 827 |
907 CPluginSettings* settings = CPluginSettings::GetInstance(); | 828 CPluginSettings* settings = CPluginSettings::GetInstance(); |
908 | |
909 // Create main thread | |
910 if (GetMainThreadHandle() == NULL && settings->IsMainProcess() && settings->Is
MainUiThread()) | |
911 { | |
912 DWORD id; | |
913 HANDLE handle = ::CreateThread(NULL, 0, MainThreadProc, (LPVOID)m_tab, CREAT
E_SUSPENDED, &id); | |
914 if (handle == NULL) | |
915 { | |
916 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_MAIN_T
HREAD_CREATE_PROCESS, "Class::Thread - Failed to create main thread"); | |
917 } | |
918 | |
919 s_hMainThread = handle; | |
920 | |
921 ::ResumeThread(handle); | |
922 } | |
923 | |
924 return true; | 829 return true; |
925 } | 830 } |
926 | 831 |
927 bool CPluginClass::CreateStatusBarPane() | 832 bool CPluginClass::CreateStatusBarPane() |
928 { | 833 { |
929 DEBUG_GENERAL(L"Getting client"); | 834 DEBUG_GENERAL(L"Getting client"); |
930 | 835 |
931 CPluginClient* client = CPluginClient::GetInstance(); | 836 CPluginClient* client = CPluginClient::GetInstance(); |
932 | 837 |
933 DEBUG_GENERAL(L"Getting ieversion"); | 838 DEBUG_GENERAL(L"Getting ieversion"); |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 | 995 |
1091 ::SendMessage(m_hStatusBarWnd, SB_GETPARTS, nPartCount, (LPARAM)pData); | 996 ::SendMessage(m_hStatusBarWnd, SB_GETPARTS, nPartCount, (LPARAM)pData); |
1092 ::SendMessage(m_hStatusBarWnd, SB_SETPARTS, nPartCount, (LPARAM)pData); | 997 ::SendMessage(m_hStatusBarWnd, SB_SETPARTS, nPartCount, (LPARAM)pData); |
1093 | 998 |
1094 delete[] pData; | 999 delete[] pData; |
1095 } | 1000 } |
1096 HDC hdc = GetWindowDC(m_hStatusBarWnd); | 1001 HDC hdc = GetWindowDC(m_hStatusBarWnd); |
1097 SendMessage(m_hStatusBarWnd, WM_PAINT, (WPARAM)hdc, 0); | 1002 SendMessage(m_hStatusBarWnd, WM_PAINT, (WPARAM)hdc, 0); |
1098 ReleaseDC(m_hStatusBarWnd, hdc); | 1003 ReleaseDC(m_hStatusBarWnd, hdc); |
1099 return true; | 1004 return true; |
1100 }///////////////////////////////////////////////////////////////////////////// | 1005 } |
1101 // Implementation | |
1102 | 1006 |
1103 void CPluginClass::CloseTheme() | 1007 void CPluginClass::CloseTheme() |
1104 { | 1008 { |
1105 if (m_hTheme) | 1009 if (m_hTheme) |
1106 { | 1010 { |
1107 if (pfnClose) | 1011 if (pfnClose) |
1108 { | 1012 { |
1109 pfnClose(m_hTheme); | 1013 pfnClose(m_hTheme); |
1110 } | 1014 } |
1111 | 1015 |
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2062 } | 1966 } |
2063 } | 1967 } |
2064 } | 1968 } |
2065 | 1969 |
2066 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); | 1970 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); |
2067 } | 1971 } |
2068 | 1972 |
2069 return hTabWnd; | 1973 return hTabWnd; |
2070 | 1974 |
2071 } | 1975 } |
OLD | NEW |