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

Side by Side Diff: src/plugin/PluginClass.cpp

Issue 6237450183639040: Issue 1283 - wrong usage of memset, fix sizeof, make proper initializing (Closed)
Patch Set: Created Sept. 1, 2014, 11:52 a.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 #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"
11 #include "PluginClientFactory.h" 11 #include "PluginClientFactory.h"
12 #include "PluginMutex.h" 12 #include "PluginMutex.h"
13 #include "sddl.h" 13 #include "sddl.h"
14 #include "PluginUtil.h" 14 #include "PluginUtil.h"
15 #include "PluginUserSettings.h" 15 #include "PluginUserSettings.h"
16 #include "../shared/Utils.h" 16 #include "../shared/Utils.h"
17 #include "../shared/Dictionary.h" 17 #include "../shared/Dictionary.h"
18 #include <thread> 18 #include <thread>
19 #include <array>
19 20
20 #ifdef DEBUG_HIDE_EL 21 #ifdef DEBUG_HIDE_EL
21 DWORD profileTime = 0; 22 DWORD profileTime = 0;
22 #endif 23 #endif
23 24
24 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR); 25 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR);
25 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR ECT); 26 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR ECT);
26 typedef HRESULT (WINAPI *CLOSETHEMEDATA)(HANDLE); 27 typedef HRESULT (WINAPI *CLOSETHEMEDATA)(HANDLE);
27 28
28 HICON CPluginClass::s_hIcons[ICON_MAX] = { NULL, NULL, NULL }; 29 HICON CPluginClass::s_hIcons[ICON_MAX] = { NULL, NULL, NULL };
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 414
414 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); 415 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite);
415 } 416 }
416 417
417 bool CPluginClass::IsStatusBarEnabled() 418 bool CPluginClass::IsStatusBarEnabled()
418 { 419 {
419 DEBUG_GENERAL("IsStatusBarEnabled start"); 420 DEBUG_GENERAL("IsStatusBarEnabled start");
420 HKEY pHkey; 421 HKEY pHkey;
421 HKEY pHkeySub; 422 HKEY pHkeySub;
422 RegOpenCurrentUser(KEY_QUERY_VALUE, &pHkey); 423 RegOpenCurrentUser(KEY_QUERY_VALUE, &pHkey);
423 DWORD trueth = 1; 424 DWORD trueth = 1;
Oleksandr 2014/10/06 20:19:32 That typo really jumps at me with this change. Min
424 DWORD truethSize = sizeof(DWORD); 425 DWORD truethSize = sizeof(trueth);
425 RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\Main", &pHkeySub); 426 RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\Main", &pHkeySub);
426 LONG res = RegQueryValueEx(pHkeySub, L"StatusBarWeb", NULL, NULL, (BYTE*)&true th, &truethSize); 427 LONG res = RegQueryValueEx(pHkeySub, L"StatusBarWeb", NULL, NULL, (BYTE*)&true th, &truethSize);
427 RegCloseKey(pHkey); 428 RegCloseKey(pHkey);
428 if (res != ERROR_SUCCESS) 429 if (res != ERROR_SUCCESS)
429 { 430 {
430 res = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\MINIE", &p HkeySub); 431 res = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\MINIE", &p HkeySub);
431 if (res == ERROR_SUCCESS) 432 if (res == ERROR_SUCCESS)
432 { 433 {
433 LONG res = RegQueryValueEx(pHkeySub, L"ShowStatusBar", NULL, NULL, (BYTE*) &trueth, &truethSize); 434 LONG res = RegQueryValueEx(pHkeySub, L"ShowStatusBar", NULL, NULL, (BYTE*) &trueth, &truethSize);
434 if (res == ERROR_SUCCESS) 435 if (res == ERROR_SUCCESS)
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 } 479 }
479 // Ask if a user wants to enable a status bar automatically 480 // Ask if a user wants to enable a status bar automatically
480 LRESULT res = MessageBox((HWND)m_hTabWnd, 481 LRESULT res = MessageBox((HWND)m_hTabWnd,
481 dictionary->Lookup("status-bar", "question").c_str(), 482 dictionary->Lookup("status-bar", "question").c_str(),
482 dictionary->Lookup("status-bar", "title").c_str(), 483 dictionary->Lookup("status-bar", "title").c_str(),
483 MB_YESNO); 484 MB_YESNO);
484 if (res == IDYES) 485 if (res == IDYES)
485 { 486 {
486 DWORD trueth = 1; 487 DWORD trueth = 1;
487 regRes = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\M INIE", &pHkeySub); 488 regRes = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\M INIE", &pHkeySub);
488 regRes = RegSetValueEx(pHkeySub, L"ShowStatusBar", 0, REG_DWORD, (BYTE *)&trueth, sizeof(DWORD)); 489 regRes = RegSetValueEx(pHkeySub, L"ShowStatusBar", 0, REG_DWORD, (BYTE *)&trueth, sizeof(trueth));
489 regRes = RegCloseKey(pHkeySub); 490 regRes = RegCloseKey(pHkeySub);
490 regRes = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\M ain", &pHkeySub); 491 regRes = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\M ain", &pHkeySub);
491 regRes = RegSetValueEx(pHkeySub, L"StatusBarWeb", 0, REG_DWORD, (BYTE* )&trueth, sizeof(DWORD)); 492 regRes = RegSetValueEx(pHkeySub, L"StatusBarWeb", 0, REG_DWORD, (BYTE* )&trueth, sizeof(trueth));
492 regRes = RegCloseKey(pHkeySub); 493 regRes = RegCloseKey(pHkeySub);
493 hr = browser->put_StatusBar(TRUE); 494 hr = browser->put_StatusBar(TRUE);
494 if (FAILED(hr)) 495 if (FAILED(hr))
495 { 496 {
496 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_PUT_STATUSBAR, "Class::Enable statusbar"); 497 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_PUT_STATUSBAR, "Class::Enable statusbar");
497 } 498 }
498 CreateStatusBarPane(); 499 CreateStatusBarPane();
499 500
500 // We need to restart the tab now, to enable the status bar properly 501 // We need to restart the tab now, to enable the status bar properly
501 VARIANT vFlags; 502 VARIANT vFlags;
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 } 807 }
807 } 808 }
808 } 809 }
809 s_criticalSectionLocal.Unlock(); 810 s_criticalSectionLocal.Unlock();
810 811
811 // Register pane class 812 // Register pane class
812 if (!GetAtomPaneClass()) 813 if (!GetAtomPaneClass())
813 { 814 {
814 WNDCLASSEX wcex; 815 WNDCLASSEX wcex;
815 816
816 wcex.cbSize = sizeof(WNDCLASSEX); 817 wcex.cbSize = sizeof(wcex);
817 wcex.style = 0; 818 wcex.style = 0;
818 wcex.lpfnWndProc = (WNDPROC)PaneWindowProc; 819 wcex.lpfnWndProc = (WNDPROC)PaneWindowProc;
819 wcex.cbClsExtra = 0; 820 wcex.cbClsExtra = 0;
820 wcex.cbWndExtra = 0; 821 wcex.cbWndExtra = 0;
821 wcex.hInstance = _Module.m_hInst; 822 wcex.hInstance = _Module.m_hInst;
822 wcex.hIcon = NULL; 823 wcex.hIcon = NULL;
823 wcex.hCursor = NULL; 824 wcex.hCursor = NULL;
824 wcex.hbrBackground = NULL; 825 wcex.hbrBackground = NULL;
825 wcex.lpszMenuName = NULL; 826 wcex.lpszMenuName = NULL;
826 wcex.lpszClassName = STATUSBAR_PANE_NAME; 827 wcex.lpszClassName = STATUSBAR_PANE_NAME;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 s_criticalSectionLocal.Unlock(); 883 s_criticalSectionLocal.Unlock();
883 return true; 884 return true;
884 } 885 }
885 886
886 bool CPluginClass::CreateStatusBarPane() 887 bool CPluginClass::CreateStatusBarPane()
887 { 888 {
888 CriticalSection::Lock lock(m_csStatusBar); 889 CriticalSection::Lock lock(m_csStatusBar);
889 890
890 CPluginClient* client = CPluginClient::GetInstance(); 891 CPluginClient* client = CPluginClient::GetInstance();
891 892
892 wchar_t szClassName[MAX_PATH]; 893 std::array<wchar_t, MAX_PATH> className;
893 // Get browser window and url 894 // Get browser window and url
894 HWND hBrowserWnd = GetBrowserHWND(); 895 HWND hBrowserWnd = GetBrowserHWND();
895 if (!hBrowserWnd) 896 if (!hBrowserWnd)
896 { 897 {
897 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_BROWSER, "C lass::CreateStatusBarPane - No status bar") 898 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_BROWSER, "C lass::CreateStatusBarPane - No status bar")
898 return false; 899 return false;
899 } 900 }
900 901
901 // Looking for a TabWindowClass window in IE7 902 // Looking for a TabWindowClass window in IE7
902 // the last one should be parent for statusbar 903 // the last one should be parent for statusbar
903 HWND hWndStatusBar = NULL; 904 HWND hWndStatusBar = NULL;
904 905
905 HWND hTabWnd = ::GetWindow(hBrowserWnd, GW_CHILD); 906 HWND hTabWnd = ::GetWindow(hBrowserWnd, GW_CHILD);
906 UINT amoundOfNewTabs = 0; 907 UINT amoundOfNewTabs = 0;
907 HWND uniqueNewTab = NULL; 908 HWND uniqueNewTab = NULL;
908 while (hTabWnd) 909 while (hTabWnd)
909 { 910 {
910 memset(szClassName, 0, MAX_PATH); 911 className.fill(L'\0');
Eric 2014/09/26 18:07:23 The title of the review says "wrong usage of memse
Eric 2014/09/26 18:07:23 Are these calls to 'fill' really necessary? The o
911 GetClassName(hTabWnd, szClassName, MAX_PATH); 912 GetClassName(hTabWnd, className.data(), className.size());
Eric 2014/09/26 18:07:23 As long as we're making a modification, we might a
Oleksandr 2014/10/06 20:19:32 +1 On 2014/09/26 18:07:23, Eric wrote:
sergei 2014/10/08 15:06:52 Despite it's not a real performance trouble, I've
912 913
913 if (wcscmp(szClassName, L"TabWindowClass") == 0 || wcscmp(szClassName,L"Fram e Tab") == 0) 914 if (wcscmp(className.data(), L"TabWindowClass") == 0 || wcscmp(className.dat a(), L"Frame Tab") == 0)
914 { 915 {
915 // IE8 support 916 // IE8 support
916 HWND hTabWnd2 = hTabWnd; 917 HWND hTabWnd2 = hTabWnd;
917 if (wcscmp(szClassName,L"Frame Tab") == 0) 918 if (wcscmp(className.data(), L"Frame Tab") == 0)
918 { 919 {
919 hTabWnd2 = ::FindWindowEx(hTabWnd2, NULL, L"TabWindowClass", NULL); 920 hTabWnd2 = ::FindWindowEx(hTabWnd2, NULL, L"TabWindowClass", NULL);
920 } 921 }
921 922
922 if (hTabWnd2) 923 if (hTabWnd2)
923 { 924 {
924 DWORD nProcessId; 925 DWORD nProcessId;
925 ::GetWindowThreadProcessId(hTabWnd2, &nProcessId); 926 ::GetWindowThreadProcessId(hTabWnd2, &nProcessId);
926 if (::GetCurrentProcessId() == nProcessId) 927 if (::GetCurrentProcessId() == nProcessId)
927 { 928 {
(...skipping 26 matching lines...) Expand all
954 } 955 }
955 } 956 }
956 } 957 }
957 958
958 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 959 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
959 } 960 }
960 961
961 HWND hWnd = ::GetWindow(hBrowserWnd, GW_CHILD); 962 HWND hWnd = ::GetWindow(hBrowserWnd, GW_CHILD);
962 while (hWnd) 963 while (hWnd)
963 { 964 {
964 memset(szClassName, 0, MAX_PATH); 965 className.fill(L'\0');
965 ::GetClassName(hWnd, szClassName, MAX_PATH); 966 ::GetClassName(hWnd, className.data(), className.size());
966 967
967 if (wcscmp(szClassName,L"msctls_statusbar32") == 0) 968 if (wcscmp(className.data(), L"msctls_statusbar32") == 0)
968 { 969 {
969 hWndStatusBar = hWnd; 970 hWndStatusBar = hWnd;
970 break; 971 break;
971 } 972 }
972 973
973 hWnd = ::GetWindow(hWnd, GW_HWNDNEXT); 974 hWnd = ::GetWindow(hWnd, GW_HWNDNEXT);
974 } 975 }
975 976
976 if (!hWndStatusBar) 977 if (!hWndStatusBar)
977 { 978 {
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); 1155 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance();
1155 1156
1156 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); 1157 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1));
1157 1158
1158 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); 1159 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0);
1159 1160
1160 SetMenuBar(hMenuTrackPopup, url); 1161 SetMenuBar(hMenuTrackPopup, url);
1161 1162
1162 return hMenuTrackPopup; 1163 return hMenuTrackPopup;
1163 } 1164 }
1164 BOOL CreateLowProcess(WCHAR* wszProcessName, WCHAR* cmdLine)
1165 {
1166
1167 BOOL fRet;
1168 HANDLE hToken = NULL;
1169 HANDLE hNewToken = NULL;
1170 PSID pIntegritySid = NULL;
1171 TOKEN_MANDATORY_LABEL TIL = {0};
1172 PROCESS_INFORMATION ProcInfo = {0};
1173 STARTUPINFO StartupInfo = {0};
1174
1175
1176
1177 // Low integrity SID
1178 WCHAR wszIntegritySid[20] = L"S-1-16-4096";
1179
1180
1181 fRet = OpenProcessToken(GetCurrentProcess(),
1182 TOKEN_DUPLICATE |
1183 TOKEN_ADJUST_DEFAULT |
1184 TOKEN_QUERY |
1185 TOKEN_ASSIGN_PRIMARY,
1186 &hToken);
1187
1188 if (!fRet)
1189 {
1190 goto CleanExit;
1191 }
1192
1193 fRet = DuplicateTokenEx(hToken,
1194 0,
1195 NULL,
1196 SecurityImpersonation,
1197 TokenPrimary,
1198 &hNewToken);
1199
1200 if (!fRet)
1201 {
1202 goto CleanExit;
1203 }
1204
1205 fRet = ConvertStringSidToSid(wszIntegritySid, &pIntegritySid);
1206
1207 if (!fRet)
1208 {
1209 goto CleanExit;
1210 }
1211
1212
1213 TIL.Label.Attributes = SE_GROUP_INTEGRITY;
1214 TIL.Label.Sid = pIntegritySid;
1215
1216
1217 //
1218 // Set the process integrity level
1219 //
1220
1221 fRet = SetTokenInformation(hNewToken,
1222 TokenIntegrityLevel,
1223 &TIL,
1224 sizeof(TOKEN_MANDATORY_LABEL) + GetLengthSid(pIntegritySid));
1225
1226 if (!fRet)
1227 {
1228 goto CleanExit;
1229 }
1230
1231 //
1232 // Create the new process at Low integrity
1233 //
1234
1235 fRet = CreateProcessAsUser(hNewToken,
1236 wszProcessName,
1237 cmdLine,
1238 NULL,
1239 NULL,
1240 FALSE,
1241 0,
1242 NULL,
1243 NULL,
1244 &StartupInfo,
1245 &ProcInfo);
1246
1247
1248 CleanExit:
1249
1250 if (ProcInfo.hProcess != NULL)
1251 {
1252 CloseHandle(ProcInfo.hProcess);
1253 }
1254
1255 if (ProcInfo.hThread != NULL)
1256 {
1257 CloseHandle(ProcInfo.hThread);
1258 }
1259
1260 LocalFree(pIntegritySid);
1261
1262 if (hNewToken != NULL)
1263 {
1264 CloseHandle(hNewToken);
1265 }
1266
1267 if (hToken != NULL)
1268 {
1269 CloseHandle(hToken);
1270 }
1271
1272 return fRet;
1273 }
1274 1165
1275 void CPluginClass::DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, U INT nMenuFlags) 1166 void CPluginClass::DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, U INT nMenuFlags)
1276 { 1167 {
1277 CPluginClient* client = CPluginClient::GetInstance(); 1168 CPluginClient* client = CPluginClient::GetInstance();
1278 1169
1279 // Create menu parent window 1170 // Create menu parent window
1280 HWND hMenuWnd = ::CreateWindowEx( 1171 HWND hMenuWnd = ::CreateWindowEx(
1281 NULL, 1172 NULL,
1282 MAKEINTATOM(GetAtomPaneClass()), 1173 MAKEINTATOM(GetAtomPaneClass()),
1283 L"", 1174 L"",
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 { 1286 {
1396 #ifdef SUPPORT_WHITELIST 1287 #ifdef SUPPORT_WHITELIST
1397 s_menuDomains.clear(); 1288 s_menuDomains.clear();
1398 #endif 1289 #endif
1399 } 1290 }
1400 s_criticalSectionLocal.Unlock(); 1291 s_criticalSectionLocal.Unlock();
1401 1292
1402 1293
1403 Dictionary* dictionary = Dictionary::GetInstance(); 1294 Dictionary* dictionary = Dictionary::GetInstance();
1404 1295
1405 MENUITEMINFOW fmii; 1296 MENUITEMINFOW fmii = {};
1406 memset(&fmii, 0, sizeof(MENUITEMINFO)); 1297 fmii.cbSize = sizeof(fmii);
1407 fmii.cbSize = sizeof(MENUITEMINFO);
1408 1298
1409 MENUITEMINFOW miiSep; 1299 MENUITEMINFOW miiSep = {};
1410 memset(&miiSep, 0, sizeof(MENUITEMINFO)); 1300 miiSep.cbSize = sizeof(miiSep);
1411 miiSep.cbSize = sizeof(MENUITEMINFO);
1412 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; 1301 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE;
1413 miiSep.fType = MFT_SEPARATOR; 1302 miiSep.fType = MFT_SEPARATOR;
1414 1303
1415 CPluginClient* client = CPluginClient::GetInstance(); 1304 CPluginClient* client = CPluginClient::GetInstance();
1416 1305
1417 CPluginSettings* settings = CPluginSettings::GetInstance(); 1306 CPluginSettings* settings = CPluginSettings::GetInstance();
1418 1307
1419 #ifdef SUPPORT_WHITELIST 1308 #ifdef SUPPORT_WHITELIST
1420 { 1309 {
1421 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); 1310 ctext = dictionary->Lookup("menu", "menu-disable-on-site");
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1504 DWORD nProcessId; 1393 DWORD nProcessId;
1505 ::GetWindowThreadProcessId(hWndToolBar, &nProcessId); 1394 ::GetWindowThreadProcessId(hWndToolBar, &nProcessId);
1506 1395
1507 if (hWndToolBar && ::GetCurrentProcessId() == nProcessId) 1396 if (hWndToolBar && ::GetCurrentProcessId() == nProcessId)
1508 { 1397 {
1509 ::ScreenToClient(hWndToolBar, &pt); 1398 ::ScreenToClient(hWndToolBar, &pt);
1510 int nButton = (int)::SendMessage(hWndToolBar, TB_HITTEST, 0, (LPARAM)&pt); 1399 int nButton = (int)::SendMessage(hWndToolBar, TB_HITTEST, 0, (LPARAM)&pt);
1511 1400
1512 if (nButton > 0) 1401 if (nButton > 0)
1513 { 1402 {
1514 TBBUTTON pTBBtn; 1403 TBBUTTON pTBBtn = {};
1515 memset(&pTBBtn, 0, sizeof(TBBUTTON));
1516 1404
1517 if (SendMessage(hWndToolBar, TB_GETBUTTON, nButton, (LPARAM)&pTBBtn)) 1405 if (SendMessage(hWndToolBar, TB_GETBUTTON, nButton, (LPARAM)&pTBBtn))
1518 { 1406 {
1519 RECT rcButton; 1407 RECT rcButton;
1520 nIDCommand = pTBBtn.idCommand; 1408 nIDCommand = pTBBtn.idCommand;
1521 1409
1522 if (SendMessage(hWndToolBar, TB_GETRECT, nIDCommand, (LPARAM)&rcButton)) 1410 if (SendMessage(hWndToolBar, TB_GETRECT, nIDCommand, (LPARAM)&rcButton))
1523 { 1411 {
1524 pt.x = rcButton.left; 1412 pt.x = rcButton.left;
1525 pt.y = rcButton.bottom; 1413 pt.y = rcButton.bottom;
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 return icon; 1822 return icon;
1935 } 1823 }
1936 1824
1937 ATOM CPluginClass::GetAtomPaneClass() 1825 ATOM CPluginClass::GetAtomPaneClass()
1938 { 1826 {
1939 return s_atomPaneClass; 1827 return s_atomPaneClass;
1940 } 1828 }
1941 1829
1942 HWND CPluginClass::GetTabHWND() const 1830 HWND CPluginClass::GetTabHWND() const
1943 { 1831 {
1944 wchar_t szClassName[MAX_PATH]; 1832 std::array<wchar_t, MAX_PATH> className;
1945 // Get browser window and url 1833 // Get browser window and url
1946 HWND hBrowserWnd = GetBrowserHWND(); 1834 HWND hBrowserWnd = GetBrowserHWND();
1947 if (!hBrowserWnd) 1835 if (!hBrowserWnd)
1948 { 1836 {
1949 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_BROWSER, "C lass::GetTabWindow - No tab window") 1837 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_BROWSER, "C lass::GetTabWindow - No tab window")
1950 s_criticalSectionWindow.Unlock(); 1838 s_criticalSectionWindow.Unlock();
1951 1839
1952 return false; 1840 return false;
1953 } 1841 }
1954 1842
1955 // Looking for a TabWindowClass window in IE7 1843 // Looking for a TabWindowClass window in IE7
1956 1844
1957 HWND hTabWnd = ::GetWindow(hBrowserWnd, GW_CHILD); 1845 HWND hTabWnd = ::GetWindow(hBrowserWnd, GW_CHILD);
1958 while (hTabWnd) 1846 while (hTabWnd)
1959 { 1847 {
1960 memset(szClassName, 0, MAX_PATH); 1848 className.fill(L'\0');
1961 GetClassName(hTabWnd, szClassName, MAX_PATH); 1849 GetClassName(hTabWnd, className.data(), className.size());
1962 1850
1963 if (wcscmp(szClassName, L"TabWindowClass") == 0 || wcscmp(szClassName, L"Fra me Tab") == 0) 1851 if (wcscmp(className.data(), L"TabWindowClass") == 0 || wcscmp(className.dat a(), L"Frame Tab") == 0)
1964 { 1852 {
1965 // IE8 support 1853 // IE8 support
1966 HWND hTabWnd2 = hTabWnd; 1854 HWND hTabWnd2 = hTabWnd;
1967 if (wcscmp(szClassName, L"Frame Tab") == 0) 1855 if (wcscmp(className.data(), L"Frame Tab") == 0)
1968 { 1856 {
1969 hTabWnd2 = ::FindWindowEx(hTabWnd2, NULL, L"TabWindowClass", NULL); 1857 hTabWnd2 = ::FindWindowEx(hTabWnd2, NULL, L"TabWindowClass", NULL);
1970 } 1858 }
1971 1859
1972 if (hTabWnd2) 1860 if (hTabWnd2)
1973 { 1861 {
1974 DWORD nProcessId; 1862 DWORD nProcessId;
1975 ::GetWindowThreadProcessId(hTabWnd2, &nProcessId); 1863 ::GetWindowThreadProcessId(hTabWnd2, &nProcessId);
1976 if (::GetCurrentProcessId() == nProcessId) 1864 if (::GetCurrentProcessId() == nProcessId)
1977 { 1865 {
(...skipping 23 matching lines...) Expand all
2001 } 1889 }
2002 } 1890 }
2003 } 1891 }
2004 1892
2005 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 1893 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
2006 } 1894 }
2007 1895
2008 return hTabWnd; 1896 return hTabWnd;
2009 1897
2010 } 1898 }
OLDNEW

Powered by Google App Engine
This is Rietveld