| 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 |