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 #include "PluginFilter.h" | 6 #include "PluginFilter.h" |
7 #include "PluginMimeFilterClient.h" | 7 #include "PluginMimeFilterClient.h" |
8 #include "PluginClient.h" | 8 #include "PluginClient.h" |
9 #include "PluginClientFactory.h" | 9 #include "PluginClientFactory.h" |
10 #include "PluginMutex.h" | 10 #include "PluginMutex.h" |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 | 195 |
196 s_criticalSectionLocal.Lock(); | 196 s_criticalSectionLocal.Lock(); |
197 { | 197 { |
198 browser = s_asyncWebBrowser2; | 198 browser = s_asyncWebBrowser2; |
199 } | 199 } |
200 s_criticalSectionLocal.Unlock(); | 200 s_criticalSectionLocal.Unlock(); |
201 | 201 |
202 return browser; | 202 return browser; |
203 } | 203 } |
204 | 204 |
205 CString CPluginClass::GetBrowserUrl() const | 205 std::wstring CPluginClass::GetBrowserUrl() const |
206 { | 206 { |
207 CString url; | 207 std::wstring url; |
208 | |
209 CComQIPtr<IWebBrowser2> browser = GetBrowser(); | 208 CComQIPtr<IWebBrowser2> browser = GetBrowser(); |
210 if (browser) | 209 if (browser) |
211 { | 210 { |
212 CComBSTR bstrURL; | 211 BSTR bstrURL; |
213 | 212 if (SUCCEEDED(browser->get_LocationURL(&bstrURL)) && bstrURL) |
214 if (SUCCEEDED(browser->get_LocationURL(&bstrURL))) | |
215 { | 213 { |
216 url = bstrURL; | 214 url = std::wstring(bstrURL, SysStringLen(bstrURL)); |
217 CPluginClient::UnescapeUrl(url); | 215 SysFreeString(bstrURL); |
| 216 UnescapeUrl(url); |
218 } | 217 } |
219 } | 218 } |
220 else | 219 else |
221 { | 220 { |
222 url = m_tab->GetDocumentUrl(); | 221 url = m_tab->GetDocumentUrl(); |
223 } | 222 } |
224 | |
225 return url; | 223 return url; |
226 } | 224 } |
227 | 225 |
228 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) | 226 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) |
229 { | 227 { |
230 if (thisPtr == NULL) | 228 if (thisPtr == NULL) |
231 return 0; | 229 return 0; |
232 if (!((CPluginClass*)thisPtr)->InitObject(true)) | 230 if (!((CPluginClass*)thisPtr)->InitObject(true)) |
233 { | 231 { |
234 ((CPluginClass*)thisPtr)->Unadvice(); | 232 ((CPluginClass*)thisPtr)->Unadvice(); |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 { | 540 { |
543 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal; | 541 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal; |
544 } | 542 } |
545 else | 543 else |
546 { | 544 { |
547 // Wrong type, return. | 545 // Wrong type, return. |
548 return; | 546 return; |
549 } | 547 } |
550 | 548 |
551 // Get the URL | 549 // Get the URL |
552 CString url; | 550 std::wstring url; |
553 vt = pDispParams->rgvarg[5].vt; | 551 const auto& arg = pDispParams->rgvarg[5]; |
554 if (vt == VT_BYREF + VT_VARIANT) | 552 vt = arg.vt; |
| 553 if (vt == (VT_BYREF | VT_VARIANT) && arg.pvarVal->vt == VT_BSTR) |
555 { | 554 { |
556 url = pDispParams->rgvarg[5].pvarVal->bstrVal; | 555 BSTR b = arg.pvarVal->bstrVal; |
557 | 556 if (b) { |
558 CPluginClient::UnescapeUrl(url); | 557 url = std::wstring(b, SysStringLen(b)); |
| 558 UnescapeUrl(url); |
| 559 } |
559 } | 560 } |
560 else | 561 else |
561 { | 562 { |
562 // Wrong type, return. | 563 // Wrong type, return. |
563 return; | 564 return; |
564 } | 565 } |
565 | 566 |
566 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na
vigating new page | 567 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na
vigating new page |
567 CPluginClient* client = CPluginClient::GetInstance(); | 568 CPluginClient* client = CPluginClient::GetInstance(); |
568 | 569 CString urlLegacy = ToCString(url); |
569 if (url.Find(L"javascript") == 0) | 570 if (urlLegacy.Find(L"javascript") == 0) |
570 { | 571 { |
571 } | 572 } |
572 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) | 573 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) |
573 { | 574 { |
574 m_tab->OnNavigate(url); | 575 m_tab->OnNavigate(url); |
575 | 576 |
576 DEBUG_GENERAL(L"============================================================
====================\nBegin main navigation url:" + url + "\n===================
=============================================================") | 577 DEBUG_GENERAL(L"============================================================
====================\nBegin main navigation url:" + urlLegacy + "\n=============
===================================================================") |
577 | 578 |
578 #ifdef ENABLE_DEBUG_RESULT | 579 #ifdef ENABLE_DEBUG_RESULT |
579 CPluginDebug::DebugResultDomain(url); | 580 CPluginDebug::DebugResultDomain(urlLegacy); |
580 #endif | 581 #endif |
581 | 582 |
582 UpdateStatusBar(); | 583 UpdateStatusBar(); |
583 } | 584 } |
584 else | 585 else |
585 { | 586 { |
586 DEBUG_NAVI(L"Navi::Begin navigation url:" + url) | 587 DEBUG_NAVI(L"Navi::Begin navigation url:" + urlLegacy) |
587 m_tab->CacheFrame(url); | 588 m_tab->CacheFrame(url); |
588 } | 589 } |
589 } | 590 } |
| 591 |
590 STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags) | 592 STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags) |
591 { | 593 { |
592 DEBUG_GENERAL("Tab changed"); | 594 DEBUG_GENERAL("Tab changed"); |
593 bool newtabshown = pDispParams->rgvarg[1].intVal==3; | 595 bool newtabshown = pDispParams->rgvarg[1].intVal==3; |
594 if (newtabshown) | 596 if (newtabshown) |
595 { | 597 { |
596 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(Ge
tCurrentThreadId()); | 598 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(Ge
tCurrentThreadId()); |
597 if (it == s_threadInstances.end()) | 599 if (it == s_threadInstances.end()) |
598 { | 600 { |
599 s_threadInstances[::GetCurrentThreadId()] = this; | 601 s_threadInstances[::GetCurrentThreadId()] = this; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 { | 714 { |
713 DEBUG_NAVI("Navi::Document Complete") | 715 DEBUG_NAVI("Navi::Document Complete") |
714 | 716 |
715 CComQIPtr<IWebBrowser2> browser = GetBrowser(); | 717 CComQIPtr<IWebBrowser2> browser = GetBrowser(); |
716 | 718 |
717 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == VT_
DISPATCH) | 719 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == VT_
DISPATCH) |
718 { | 720 { |
719 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; | 721 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; |
720 if (pBrowser) | 722 if (pBrowser) |
721 { | 723 { |
722 CString url; | 724 BSTR bstrUrl; |
723 CComBSTR bstrUrl; | |
724 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen(b
strUrl) > 0) | 725 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen(b
strUrl) > 0) |
725 { | 726 { |
726 url = bstrUrl; | 727 std::wstring url(bstrUrl, SysStringLen(bstrUrl)); |
727 | 728 SysFreeString(bstrUrl); |
728 CPluginClient::UnescapeUrl(url); | 729 UnescapeUrl(url); |
729 | |
730 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBrows
er)); | 730 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBrows
er)); |
731 } | 731 } |
732 } | 732 } |
733 } | 733 } |
734 } | 734 } |
735 break; | 735 break; |
736 | 736 |
737 case DISPID_ONQUIT: | 737 case DISPID_ONQUIT: |
738 case DISPID_QUIT: | 738 case DISPID_QUIT: |
739 { | 739 { |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1133 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O
LECMD prgCmds[], OLECMDTEXT* pCmdText) | 1133 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O
LECMD prgCmds[], OLECMDTEXT* pCmdText) |
1134 { | 1134 { |
1135 if (cCmds == 0) return E_INVALIDARG; | 1135 if (cCmds == 0) return E_INVALIDARG; |
1136 if (prgCmds == 0) return E_POINTER; | 1136 if (prgCmds == 0) return E_POINTER; |
1137 | 1137 |
1138 prgCmds[0].cmdf = OLECMDF_ENABLED; | 1138 prgCmds[0].cmdf = OLECMDF_ENABLED; |
1139 | 1139 |
1140 return S_OK; | 1140 return S_OK; |
1141 } | 1141 } |
1142 | 1142 |
1143 HMENU CPluginClass::CreatePluginMenu(const CString& url) | 1143 HMENU CPluginClass::CreatePluginMenu(const std::wstring& url) |
1144 { | 1144 { |
1145 DEBUG_GENERAL("CreatePluginMenu"); | 1145 DEBUG_GENERAL("CreatePluginMenu"); |
1146 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); | 1146 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); |
1147 | 1147 |
1148 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); | 1148 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); |
1149 | 1149 |
1150 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); | 1150 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); |
1151 | 1151 |
1152 SetMenuBar(hMenuTrackPopup, url); | 1152 SetMenuBar(hMenuTrackPopup, url); |
1153 | 1153 |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1350 { | 1350 { |
1351 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION
_SETTINGS, "Navigation::Failed") | 1351 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION
_SETTINGS, "Navigation::Failed") |
1352 } | 1352 } |
1353 } | 1353 } |
1354 } | 1354 } |
1355 break; | 1355 break; |
1356 } | 1356 } |
1357 case ID_MENU_DISABLE_ON_SITE: | 1357 case ID_MENU_DISABLE_ON_SITE: |
1358 { | 1358 { |
1359 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1359 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1360 CString urlString = GetTab()->GetDocumentUrl(); | 1360 std::wstring urlString = GetTab()->GetDocumentUrl(); |
1361 if (client->IsWhitelistedUrl(to_wstring(urlString))) | 1361 if (client->IsWhitelistedUrl(urlString)) |
1362 { | 1362 { |
1363 settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(to_w
string(urlString)))); | 1363 settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(urlS
tring))); |
1364 } | 1364 } |
1365 else | 1365 else |
1366 { | 1366 { |
1367 settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(to_wstr
ing(urlString)))); | 1367 settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(urlStri
ng))); |
1368 } | 1368 } |
1369 GetBrowser()->Refresh(); | 1369 GetBrowser()->Refresh(); |
1370 } | 1370 } |
1371 default: | 1371 default: |
1372 break; | 1372 break; |
1373 } | 1373 } |
1374 | 1374 |
1375 // Invalidate and redraw the control | 1375 // Invalidate and redraw the control |
1376 UpdateStatusBar(); | 1376 UpdateStatusBar(); |
1377 } | 1377 } |
1378 | 1378 |
1379 | 1379 |
1380 bool CPluginClass::SetMenuBar(HMENU hMenu, const CString& url) | 1380 bool CPluginClass::SetMenuBar(HMENU hMenu, const std::wstring& url) |
1381 { | 1381 { |
1382 DEBUG_GENERAL("SetMenuBar"); | 1382 DEBUG_GENERAL("SetMenuBar"); |
1383 | 1383 |
1384 std::wstring ctext; | 1384 std::wstring ctext; |
1385 | 1385 |
1386 s_criticalSectionLocal.Lock(); | 1386 s_criticalSectionLocal.Lock(); |
1387 { | 1387 { |
1388 s_menuDomains.clear(); | 1388 s_menuDomains.clear(); |
1389 } | 1389 } |
1390 s_criticalSectionLocal.Unlock(); | 1390 s_criticalSectionLocal.Unlock(); |
1391 | 1391 |
1392 Dictionary* dictionary = Dictionary::GetInstance(); | 1392 Dictionary* dictionary = Dictionary::GetInstance(); |
1393 | 1393 |
1394 MENUITEMINFOW fmii; | 1394 MENUITEMINFOW fmii; |
1395 memset(&fmii, 0, sizeof(MENUITEMINFO)); | 1395 memset(&fmii, 0, sizeof(MENUITEMINFO)); |
1396 fmii.cbSize = sizeof(MENUITEMINFO); | 1396 fmii.cbSize = sizeof(MENUITEMINFO); |
1397 | 1397 |
1398 MENUITEMINFOW miiSep; | 1398 MENUITEMINFOW miiSep; |
1399 memset(&miiSep, 0, sizeof(MENUITEMINFO)); | 1399 memset(&miiSep, 0, sizeof(MENUITEMINFO)); |
1400 miiSep.cbSize = sizeof(MENUITEMINFO); | 1400 miiSep.cbSize = sizeof(MENUITEMINFO); |
1401 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; | 1401 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; |
1402 miiSep.fType = MFT_SEPARATOR; | 1402 miiSep.fType = MFT_SEPARATOR; |
1403 | 1403 |
1404 CPluginClient* client = CPluginClient::GetInstance(); | 1404 CPluginClient* client = CPluginClient::GetInstance(); |
1405 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1405 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1406 { | 1406 { |
1407 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); | 1407 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); |
1408 // Is domain in white list? | 1408 // Is domain in white list? |
1409 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(to_wstring(url))); | 1409 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(url)); |
1410 if (client->IsWhitelistedUrl(to_wstring(GetTab()->GetDocumentUrl()))) | 1410 if (client->IsWhitelistedUrl(GetTab()->GetDocumentUrl())) |
1411 { | 1411 { |
1412 fmii.fState = MFS_CHECKED | MFS_ENABLED; | 1412 fmii.fState = MFS_CHECKED | MFS_ENABLED; |
1413 } | 1413 } |
1414 else | 1414 else |
1415 { | 1415 { |
1416 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; | 1416 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; |
1417 } | 1417 } |
1418 fmii.fMask = MIIM_STRING | MIIM_STATE; | 1418 fmii.fMask = MIIM_STRING | MIIM_STATE; |
1419 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); | 1419 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); |
1420 fmii.cch = static_cast<UINT>(ctext.size()); | 1420 fmii.cch = static_cast<UINT>(ctext.size()); |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1615 } | 1615 } |
1616 | 1616 |
1617 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara
m, lParam); | 1617 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara
m, lParam); |
1618 | 1618 |
1619 | 1619 |
1620 return result; | 1620 return result; |
1621 | 1621 |
1622 } | 1622 } |
1623 | 1623 |
1624 | 1624 |
1625 HICON CPluginClass::GetStatusBarIcon(const CString& url) | 1625 HICON CPluginClass::GetStatusBarIcon(const std::wstring& url) |
1626 { | 1626 { |
1627 // use the disable icon as defualt, if the client doesn't exists | 1627 // use the disable icon as defualt, if the client doesn't exists |
1628 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); | 1628 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); |
1629 | 1629 |
1630 CPluginTab* tab = GetTab(::GetCurrentThreadId()); | 1630 CPluginTab* tab = GetTab(::GetCurrentThreadId()); |
1631 if (tab) | 1631 if (tab) |
1632 { | 1632 { |
1633 CPluginClient* client = CPluginClient::GetInstance(); | 1633 CPluginClient* client = CPluginClient::GetInstance(); |
1634 if (!CPluginSettings::GetInstance()->IsPluginEnabled()) | 1634 if (!CPluginSettings::GetInstance()->IsPluginEnabled()) |
1635 { | 1635 { |
1636 } | 1636 } |
1637 else if (client->IsWhitelistedUrl(to_wstring(url))) | 1637 else if (client->IsWhitelistedUrl(url)) |
1638 { | 1638 { |
1639 hIcon = GetIcon(ICON_PLUGIN_DISABLED); | 1639 hIcon = GetIcon(ICON_PLUGIN_DISABLED); |
1640 } | 1640 } |
1641 else | 1641 else |
1642 { | 1642 { |
1643 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1643 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1644 hIcon = GetIcon(ICON_PLUGIN_ENABLED); | 1644 hIcon = GetIcon(ICON_PLUGIN_ENABLED); |
1645 } | 1645 } |
1646 } | 1646 } |
1647 return hIcon; | 1647 return hIcon; |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1744 | 1744 |
1745 // Done! | 1745 // Done! |
1746 EndPaint(hWnd, &ps); | 1746 EndPaint(hWnd, &ps); |
1747 | 1747 |
1748 return 0; | 1748 return 0; |
1749 } | 1749 } |
1750 | 1750 |
1751 case WM_LBUTTONUP: | 1751 case WM_LBUTTONUP: |
1752 case WM_RBUTTONUP: | 1752 case WM_RBUTTONUP: |
1753 { | 1753 { |
1754 CString strURL = pClass->GetBrowserUrl(); | 1754 std::wstring url = pClass->GetBrowserUrl(); |
1755 if (strURL != pClass->GetTab()->GetDocumentUrl()) | 1755 if (url != pClass->GetTab()->GetDocumentUrl()) |
1756 { | 1756 { |
1757 pClass->GetTab()->SetDocumentUrl(strURL); | 1757 pClass->GetTab()->SetDocumentUrl(url); |
1758 } | 1758 } |
1759 | 1759 |
1760 // Create menu | 1760 // Create menu |
1761 HMENU hMenu = pClass->CreatePluginMenu(strURL); | 1761 HMENU hMenu = pClass->CreatePluginMenu(url); |
1762 if (!hMenu) | 1762 if (!hMenu) |
1763 { | 1763 { |
1764 return 0; | 1764 return 0; |
1765 } | 1765 } |
1766 | 1766 |
1767 // Display menu | 1767 // Display menu |
1768 POINT pt; | 1768 POINT pt; |
1769 ::GetCursorPos(&pt); | 1769 ::GetCursorPos(&pt); |
1770 | 1770 |
1771 RECT rc; | 1771 RECT rc; |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1975 } | 1975 } |
1976 } | 1976 } |
1977 } | 1977 } |
1978 | 1978 |
1979 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); | 1979 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); |
1980 } | 1980 } |
1981 | 1981 |
1982 return hTabWnd; | 1982 return hTabWnd; |
1983 | 1983 |
1984 } | 1984 } |
OLD | NEW |