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 1211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1222 | 1222 |
1223 return fRet; | 1223 return fRet; |
1224 } | 1224 } |
1225 | 1225 |
1226 void CPluginClass::DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, U
INT nMenuFlags) | 1226 void CPluginClass::DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, U
INT nMenuFlags) |
1227 { | 1227 { |
1228 CPluginClient* client = CPluginClient::GetInstance(); | 1228 CPluginClient* client = CPluginClient::GetInstance(); |
1229 | 1229 |
1230 CPluginSystem* system = CPluginSystem::GetInstance(); | 1230 CPluginSystem* system = CPluginSystem::GetInstance(); |
1231 | 1231 |
1232 CString url; | |
1233 int navigationErrorId = 0; | |
1234 | |
1235 // Create menu parent window | 1232 // Create menu parent window |
1236 HWND hMenuWnd = ::CreateWindowEx( | 1233 HWND hMenuWnd = ::CreateWindowEx( |
1237 NULL, | 1234 NULL, |
1238 MAKEINTATOM(GetAtomPaneClass()), | 1235 MAKEINTATOM(GetAtomPaneClass()), |
1239 _T(""), | 1236 _T(""), |
1240 0, | 1237 0, |
1241 0,0,0,0, | 1238 0,0,0,0, |
1242 NULL, | 1239 NULL, |
1243 NULL, | 1240 NULL, |
1244 _Module.m_hInst, | 1241 _Module.m_hInst, |
1245 NULL); | 1242 NULL); |
1246 | 1243 |
1247 if (!hMenuWnd) | 1244 if (!hMenuWnd) |
1248 { | 1245 { |
1249 DestroyMenu(hMenu); | 1246 DestroyMenu(hMenu); |
1250 return; | 1247 return; |
1251 } | 1248 } |
1252 | 1249 |
1253 // Display menu | 1250 // Display menu |
1254 nMenuFlags |= TPM_NONOTIFY | TPM_RETURNCMD | TPM_LEFTBUTTON; | 1251 nMenuFlags |= TPM_NONOTIFY | TPM_RETURNCMD | TPM_LEFTBUTTON; |
1255 | 1252 |
1256 int nCommand = ::TrackPopupMenu(hMenu, nMenuFlags, pt.x, pt.y, 0, hMenuWnd, 0)
; | 1253 int nCommand = ::TrackPopupMenu(hMenu, nMenuFlags, pt.x, pt.y, 0, hMenuWnd, 0)
; |
1257 | 1254 |
1258 ::DestroyMenu(hMenu); | 1255 ::DestroyMenu(hMenu); |
1259 ::DestroyWindow(hMenuWnd); | 1256 ::DestroyWindow(hMenuWnd); |
1260 | 1257 |
1261 switch (nCommand) | 1258 switch (nCommand) |
1262 { | 1259 { |
1263 case ID_PLUGIN_ENABLE: | 1260 case ID_MENU_DISABLE: |
1264 { | 1261 { |
1265 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1262 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1266 | 1263 |
1267 settings->TogglePluginEnabled(); | 1264 settings->TogglePluginEnabled(); |
1268 | 1265 |
1269 // Enable / disable mime filter | 1266 // Enable / disable mime filter |
1270 s_criticalSectionLocal.Lock(); | 1267 s_criticalSectionLocal.Lock(); |
1271 { | 1268 { |
1272 if (settings->GetPluginEnabled()) | 1269 if (settings->GetPluginEnabled()) |
1273 { | 1270 { |
1274 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); | 1271 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); |
1275 } | 1272 } |
1276 else | 1273 else |
1277 { | 1274 { |
1278 s_mimeFilter = NULL; | 1275 s_mimeFilter = NULL; |
1279 | 1276 |
1280 CPluginClientFactory::ReleaseMimeFilterClientInstance(); | 1277 CPluginClientFactory::ReleaseMimeFilterClientInstance(); |
1281 } | 1278 } |
1282 } | 1279 } |
1283 s_criticalSectionLocal.Unlock(); | 1280 s_criticalSectionLocal.Unlock(); |
1284 } | 1281 } |
1285 break; | 1282 break; |
| 1283 case ID_MENU_SETTINGS: |
| 1284 { |
| 1285 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); |
| 1286 if (browser) |
| 1287 { |
| 1288 VARIANT vFlags; |
| 1289 vFlags.vt = VT_I4; |
| 1290 vFlags.intVal = navOpenInNewTab; |
| 1291 |
| 1292 BSTR urlToNavigate = BString(UserSettingsFileUrl()); |
| 1293 HRESULT hr = browser->Navigate(urlToNavigate, &vFlags, NULL, NULL, NULL)
; |
| 1294 if (FAILED(hr)) |
| 1295 { |
| 1296 vFlags.intVal = navOpenInNewWindow; |
| 1297 |
| 1298 hr = browser->Navigate(urlToNavigate, &vFlags, NULL, NULL, NULL); |
| 1299 if (FAILED(hr)) |
| 1300 { |
| 1301 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION
_SETTINGS, "Navigation::Failed") |
| 1302 } |
| 1303 } |
| 1304 } |
| 1305 break; |
| 1306 } |
| 1307 case ID_MENU_DISABLE_ON_SITE: |
| 1308 { |
| 1309 CPluginSettings* settings = CPluginSettings::GetInstance(); |
| 1310 CString urlString = GetTab()->GetDocumentUrl(); |
| 1311 if (client->IsWhitelistedUrl(std::wstring(urlString))) |
| 1312 { |
| 1313 settings->RemoveWhiteListedDomain(ExtractDomain(urlString)); |
| 1314 } |
| 1315 else |
| 1316 { |
| 1317 settings->AddWhiteListedDomain(ExtractDomain(urlString)); |
| 1318 } |
| 1319 GetBrowser()->Refresh(); |
| 1320 } |
1286 default: | 1321 default: |
1287 break; | 1322 break; |
1288 } | 1323 } |
1289 | 1324 |
1290 // Invalidate and redraw the control | 1325 // Invalidate and redraw the control |
1291 UpdateStatusBar(); | 1326 UpdateStatusBar(); |
1292 | |
1293 CComQIPtr<IWebBrowser2> browser = GetBrowser(); | |
1294 if (!url.IsEmpty() && browser) | |
1295 { | |
1296 VARIANT vFlags; | |
1297 vFlags.vt = VT_I4; | |
1298 vFlags.intVal = navOpenInNewTab; | |
1299 | |
1300 HRESULT hr = browser->Navigate(CComBSTR(url), &vFlags, NULL, NULL, NULL); | |
1301 if (FAILED(hr)) | |
1302 { | |
1303 vFlags.intVal = navOpenInNewWindow; | |
1304 | |
1305 hr = browser->Navigate(CComBSTR(url), &vFlags, NULL, NULL, NULL); | |
1306 if (FAILED(hr)) | |
1307 { | |
1308 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, navigationErrorId, "Navigat
ion::Failed") | |
1309 } | |
1310 } | |
1311 } | |
1312 } | 1327 } |
1313 | 1328 |
1314 | 1329 |
1315 bool CPluginClass::SetMenuBar(HMENU hMenu, const CString& url) | 1330 bool CPluginClass::SetMenuBar(HMENU hMenu, const CString& url) |
1316 { | 1331 { |
1317 std::wstring ctext; | 1332 std::wstring ctext; |
1318 | 1333 |
1319 s_criticalSectionLocal.Lock(); | 1334 s_criticalSectionLocal.Lock(); |
1320 { | 1335 { |
1321 #ifdef SUPPORT_WHITELIST | 1336 #ifdef SUPPORT_WHITELIST |
(...skipping 19 matching lines...) Expand all Loading... |
1341 miiSep.cbSize = sizeof(MENUITEMINFO); | 1356 miiSep.cbSize = sizeof(MENUITEMINFO); |
1342 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; | 1357 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; |
1343 miiSep.fType = MFT_SEPARATOR; | 1358 miiSep.fType = MFT_SEPARATOR; |
1344 | 1359 |
1345 CPluginClient* client = CPluginClient::GetInstance(); | 1360 CPluginClient* client = CPluginClient::GetInstance(); |
1346 | 1361 |
1347 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1362 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1348 | 1363 |
1349 #ifdef SUPPORT_WHITELIST | 1364 #ifdef SUPPORT_WHITELIST |
1350 { | 1365 { |
1351 // White list domain | 1366 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); |
1352 ctext = dictionary->Lookup("menu", "disable-on-site"); | 1367 // Is domain in white list? |
| 1368 ReplaceString(ctext, L"?1?", ExtractDomain(url).GetString()); |
| 1369 if (client->IsWhitelistedUrl(std::wstring(GetTab()->GetDocumentUrl()))) |
| 1370 { |
| 1371 fmii.fState = MFS_CHECKED | MFS_ENABLED; |
| 1372 } |
| 1373 else |
| 1374 { |
| 1375 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; |
| 1376 } |
1353 fmii.fMask = MIIM_STRING | MIIM_STATE; | 1377 fmii.fMask = MIIM_STRING | MIIM_STATE; |
1354 fmii.fState = MFS_DISABLED; | |
1355 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); | 1378 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); |
1356 fmii.cch = ctext.size(); | 1379 fmii.cch = ctext.size(); |
1357 | 1380 |
1358 UINT index = WM_WHITELIST_DOMAIN; | 1381 ::SetMenuItemInfoW(hMenu, ID_MENU_DISABLE_ON_SITE, FALSE, &fmii); |
1359 | |
1360 ::SetMenuItemInfoW(hMenu, ID_WHITELISTDOMAIN, FALSE, &fmii); | |
1361 } | 1382 } |
1362 #else | 1383 #else |
1363 { | 1384 { |
1364 ::DeleteMenu(hMenu, ID_WHITELISTDOMAIN, FALSE); | 1385 ::DeleteMenu(hMenu, ID_MENU_DISABLE_ON_SITE, FALSE); |
1365 } | 1386 } |
1366 #endif // SUPPORT_WHITELIST | 1387 #endif // SUPPORT_WHITELIST |
1367 | 1388 |
1368 // Plugin enable | 1389 // Plugin enable |
| 1390 ctext = dictionary->Lookup("menu", "menu-disable"); |
1369 if (settings->GetPluginEnabled()) | 1391 if (settings->GetPluginEnabled()) |
1370 { | 1392 { |
1371 ctext = dictionary->Lookup("menu", "disable"); | 1393 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; |
1372 } | 1394 } |
1373 else | 1395 else |
1374 { | 1396 { |
1375 ctext = dictionary->Lookup("menu", "enable"); | 1397 fmii.fState = MFS_CHECKED | MFS_ENABLED; |
1376 } | 1398 } |
1377 fmii.fMask = MIIM_STATE | MIIM_STRING; | 1399 fmii.fMask = MIIM_STATE | MIIM_STRING; |
1378 fmii.fState = client ? MFS_ENABLED : MFS_DISABLED; | |
1379 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); | 1400 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); |
1380 fmii.cch = ctext.size(); | 1401 fmii.cch = ctext.size(); |
1381 ::SetMenuItemInfoW(hMenu, ID_PLUGIN_ENABLE, FALSE, &fmii); | 1402 ::SetMenuItemInfoW(hMenu, ID_MENU_DISABLE, FALSE, &fmii); |
1382 | 1403 |
1383 // Settings | 1404 // Settings |
1384 ctext = dictionary->Lookup("menu", "settings"); | 1405 ctext = dictionary->Lookup("menu", "menu-settings"); |
1385 fmii.fMask = MIIM_STATE | MIIM_STRING; | 1406 fmii.fMask = MIIM_STATE | MIIM_STRING; |
1386 fmii.fState = MFS_ENABLED; | 1407 fmii.fState = MFS_ENABLED; |
1387 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); | 1408 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); |
1388 fmii.cch = ctext.size(); | 1409 fmii.cch = ctext.size(); |
1389 ::SetMenuItemInfoW(hMenu, ID_SETTINGS, FALSE, &fmii); | 1410 ::SetMenuItemInfoW(hMenu, ID_MENU_SETTINGS, FALSE, &fmii); |
1390 | 1411 |
1391 return true; | 1412 return true; |
1392 } | 1413 } |
1393 | 1414 |
1394 | 1415 |
1395 STDMETHODIMP CPluginClass::Exec(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, V
ARIANTARG*) | 1416 STDMETHODIMP CPluginClass::Exec(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, V
ARIANTARG*) |
1396 { | 1417 { |
1397 HWND hBrowserWnd = GetBrowserHWND(); | 1418 HWND hBrowserWnd = GetBrowserHWND(); |
1398 if (!hBrowserWnd) | 1419 if (!hBrowserWnd) |
1399 { | 1420 { |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1571 { | 1592 { |
1572 } | 1593 } |
1573 #ifdef SUPPORT_WHITELIST | 1594 #ifdef SUPPORT_WHITELIST |
1574 else if (client->IsWhitelistedUrl(std::wstring(url))) | 1595 else if (client->IsWhitelistedUrl(std::wstring(url))) |
1575 { | 1596 { |
1576 hIcon = GetIcon(ICON_PLUGIN_DISABLED); | 1597 hIcon = GetIcon(ICON_PLUGIN_DISABLED); |
1577 } | 1598 } |
1578 #endif // SUPPORT_WHITELIST | 1599 #endif // SUPPORT_WHITELIST |
1579 else | 1600 else |
1580 { | 1601 { |
1581 //Deativate adblock icon if adblock limit reached | |
1582 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1602 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1583 if (!settings->GetPluginEnabled()) { | |
1584 hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); | |
1585 return hIcon; | |
1586 } | |
1587 hIcon = GetIcon(ICON_PLUGIN_ENABLED); | 1603 hIcon = GetIcon(ICON_PLUGIN_ENABLED); |
1588 } | 1604 } |
1589 | 1605 |
1590 #endif // PRODUCT_ADBLOCKPLUS | 1606 #endif // PRODUCT_ADBLOCKPLUS |
1591 } | 1607 } |
1592 | 1608 |
1593 return hIcon; | 1609 return hIcon; |
1594 } | 1610 } |
1595 | 1611 |
1596 | 1612 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1698 | 1714 |
1699 case WM_LBUTTONUP: | 1715 case WM_LBUTTONUP: |
1700 case WM_RBUTTONUP: | 1716 case WM_RBUTTONUP: |
1701 { | 1717 { |
1702 CString strURL = pClass->GetBrowserUrl(); | 1718 CString strURL = pClass->GetBrowserUrl(); |
1703 if (strURL != pClass->GetTab()->GetDocumentUrl()) | 1719 if (strURL != pClass->GetTab()->GetDocumentUrl()) |
1704 { | 1720 { |
1705 pClass->GetTab()->SetDocumentUrl(strURL); | 1721 pClass->GetTab()->SetDocumentUrl(strURL); |
1706 } | 1722 } |
1707 | 1723 |
1708 #ifdef SUPPORT_SHOW_PLUGIN_MENU | |
1709 // Create menu | 1724 // Create menu |
1710 HMENU hMenu = pClass->CreatePluginMenu(strURL); | 1725 HMENU hMenu = pClass->CreatePluginMenu(strURL); |
1711 if (!hMenu) | 1726 if (!hMenu) |
1712 { | 1727 { |
1713 return 0; | 1728 return 0; |
1714 } | 1729 } |
1715 | 1730 |
1716 // Display menu | 1731 // Display menu |
1717 POINT pt; | 1732 POINT pt; |
1718 ::GetCursorPos(&pt); | 1733 ::GetCursorPos(&pt); |
1719 | 1734 |
1720 RECT rc; | 1735 RECT rc; |
1721 ::GetWindowRect(hWnd, &rc); | 1736 ::GetWindowRect(hWnd, &rc); |
1722 | 1737 |
1723 if (rc.left >= 0 && rc.top >= 0) | 1738 if (rc.left >= 0 && rc.top >= 0) |
1724 { | 1739 { |
1725 pt.x = rc.left; | 1740 pt.x = rc.left; |
1726 pt.y = rc.top; | 1741 pt.y = rc.top; |
1727 } | 1742 } |
1728 | 1743 |
1729 pClass->DisplayPluginMenu(hMenu, -1, pt, TPM_LEFTALIGN|TPM_BOTTOMALIGN); | 1744 pClass->DisplayPluginMenu(hMenu, -1, pt, TPM_LEFTALIGN|TPM_BOTTOMALIGN); |
1730 #else | |
1731 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); | |
1732 if (browser) | |
1733 { | |
1734 VARIANT vFlags; | |
1735 vFlags.vt = VT_I4; | |
1736 vFlags.intVal = navOpenInNewTab; | |
1737 | |
1738 HRESULT hr = browser->Navigate(BString(UserSettingsFileUrl()), &vFlags,
NULL, NULL, NULL); | |
1739 if (FAILED(hr)) | |
1740 { | |
1741 vFlags.intVal = navOpenInNewWindow; | |
1742 | |
1743 hr = browser->Navigate(BString(UserSettingsFileUrl()), &vFlags, NULL,
NULL, NULL); | |
1744 if (FAILED(hr)) | |
1745 { | |
1746 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION
_SETTINGS, "Navigation::Failed") | |
1747 } | |
1748 } | |
1749 } | |
1750 #endif | |
1751 } | 1745 } |
1752 break; | 1746 break; |
1753 case WM_DESTROY: | 1747 case WM_DESTROY: |
1754 break; | 1748 break; |
1755 case SC_CLOSE: | 1749 case SC_CLOSE: |
1756 break; | 1750 break; |
1757 | 1751 |
1758 case WM_UPDATEUISTATE: | 1752 case WM_UPDATEUISTATE: |
1759 { | 1753 { |
1760 CPluginTab* tab = GetTab(::GetCurrentThreadId()); | 1754 CPluginTab* tab = GetTab(::GetCurrentThreadId()); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1900 } | 1894 } |
1901 } | 1895 } |
1902 } | 1896 } |
1903 | 1897 |
1904 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); | 1898 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); |
1905 } | 1899 } |
1906 | 1900 |
1907 return hTabWnd; | 1901 return hTabWnd; |
1908 | 1902 |
1909 } | 1903 } |
OLD | NEW |