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 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 | 196 |
197 s_criticalSectionLocal.Lock(); | 197 s_criticalSectionLocal.Lock(); |
198 { | 198 { |
199 browser = s_asyncWebBrowser2; | 199 browser = s_asyncWebBrowser2; |
200 } | 200 } |
201 s_criticalSectionLocal.Unlock(); | 201 s_criticalSectionLocal.Unlock(); |
202 | 202 |
203 return browser; | 203 return browser; |
204 } | 204 } |
205 | 205 |
206 CString CPluginClass::GetBrowserUrl() const | 206 std::wstring CPluginClass::GetBrowserUrl() const |
207 { | 207 { |
208 CString url; | 208 std::wstring url; |
209 | |
210 CComQIPtr<IWebBrowser2> browser = GetBrowser(); | 209 CComQIPtr<IWebBrowser2> browser = GetBrowser(); |
211 if (browser) | 210 if (browser) |
212 { | 211 { |
213 CComBSTR bstrURL; | 212 BSTR bstrURL; |
214 | 213 if (SUCCEEDED(browser->get_LocationURL(&bstrURL)) && bstrURL) |
215 if (SUCCEEDED(browser->get_LocationURL(&bstrURL))) | |
216 { | 214 { |
217 url = bstrURL; | 215 url = std::wstring(bstrURL, SysStringLen(bstrURL)); |
218 CPluginClient::UnescapeUrl(url); | 216 SysFreeString(bstrURL); |
| 217 UnescapeUrl(url); |
219 } | 218 } |
220 } | 219 } |
221 else | 220 else |
222 { | 221 { |
223 url = m_tab->GetDocumentUrl(); | 222 url = m_tab->GetDocumentUrl(); |
224 } | 223 } |
225 | |
226 return url; | 224 return url; |
227 } | 225 } |
228 | 226 |
229 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) | 227 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) |
230 { | 228 { |
231 if (thisPtr == NULL) | 229 if (thisPtr == NULL) |
232 return 0; | 230 return 0; |
233 if (!((CPluginClass*)thisPtr)->InitObject(true)) | 231 if (!((CPluginClass*)thisPtr)->InitObject(true)) |
234 { | 232 { |
235 ((CPluginClass*)thisPtr)->Unadvice(); | 233 ((CPluginClass*)thisPtr)->Unadvice(); |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
543 { | 541 { |
544 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal; | 542 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal; |
545 } | 543 } |
546 else | 544 else |
547 { | 545 { |
548 // Wrong type, return. | 546 // Wrong type, return. |
549 return; | 547 return; |
550 } | 548 } |
551 | 549 |
552 // Get the URL | 550 // Get the URL |
553 CString url; | 551 std::wstring url; |
554 vt = pDispParams->rgvarg[5].vt; | 552 const auto& arg = pDispParams->rgvarg[5]; |
555 if (vt == VT_BYREF + VT_VARIANT) | 553 vt = arg.vt; |
| 554 if (vt == (VT_BYREF | VT_VARIANT) && arg.pvarVal->vt == VT_BSTR) |
556 { | 555 { |
557 url = pDispParams->rgvarg[5].pvarVal->bstrVal; | 556 BSTR b = arg.pvarVal->bstrVal; |
558 | 557 if (b) { |
559 CPluginClient::UnescapeUrl(url); | 558 url = std::wstring(b, SysStringLen(b)); |
| 559 UnescapeUrl(url); |
| 560 } |
560 } | 561 } |
561 else | 562 else |
562 { | 563 { |
563 // Wrong type, return. | 564 // Wrong type, return. |
564 return; | 565 return; |
565 } | 566 } |
566 | 567 |
567 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na
vigating new page | 568 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na
vigating new page |
568 CPluginClient* client = CPluginClient::GetInstance(); | 569 CPluginClient* client = CPluginClient::GetInstance(); |
569 | 570 CString urlLegacy = ToCString(url); |
570 if (url.Find(L"javascript") == 0) | 571 if (urlLegacy.Find(L"javascript") == 0) |
571 { | 572 { |
572 } | 573 } |
573 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) | 574 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) |
574 { | 575 { |
575 m_tab->OnNavigate(url); | 576 m_tab->OnNavigate(url); |
576 | 577 |
577 DEBUG_GENERAL(L"============================================================
====================\nBegin main navigation url:" + url + "\n===================
=============================================================") | 578 DEBUG_GENERAL(L"============================================================
====================\nBegin main navigation url:" + urlLegacy + "\n=============
===================================================================") |
578 | 579 |
579 #ifdef ENABLE_DEBUG_RESULT | 580 #ifdef ENABLE_DEBUG_RESULT |
580 CPluginDebug::DebugResultDomain(url); | 581 CPluginDebug::DebugResultDomain(urlLegacy); |
581 #endif | 582 #endif |
582 | 583 |
583 UpdateStatusBar(); | 584 UpdateStatusBar(); |
584 } | 585 } |
585 else | 586 else |
586 { | 587 { |
587 DEBUG_NAVI(L"Navi::Begin navigation url:" + url) | 588 DEBUG_NAVI(L"Navi::Begin navigation url:" + urlLegacy) |
588 m_tab->CacheFrame(url); | 589 m_tab->CacheFrame(url); |
589 } | 590 } |
590 } | 591 } |
| 592 |
591 STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags) | 593 STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags) |
592 { | 594 { |
593 DEBUG_GENERAL("Tab changed"); | 595 DEBUG_GENERAL("Tab changed"); |
594 bool newtabshown = pDispParams->rgvarg[1].intVal==3; | 596 bool newtabshown = pDispParams->rgvarg[1].intVal==3; |
595 if (newtabshown) | 597 if (newtabshown) |
596 { | 598 { |
597 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(Ge
tCurrentThreadId()); | 599 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(Ge
tCurrentThreadId()); |
598 if (it == s_threadInstances.end()) | 600 if (it == s_threadInstances.end()) |
599 { | 601 { |
600 s_threadInstances[::GetCurrentThreadId()] = this; | 602 s_threadInstances[::GetCurrentThreadId()] = this; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 { | 715 { |
714 DEBUG_NAVI("Navi::Document Complete") | 716 DEBUG_NAVI("Navi::Document Complete") |
715 | 717 |
716 CComQIPtr<IWebBrowser2> browser = GetBrowser(); | 718 CComQIPtr<IWebBrowser2> browser = GetBrowser(); |
717 | 719 |
718 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == VT_
DISPATCH) | 720 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == VT_
DISPATCH) |
719 { | 721 { |
720 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; | 722 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; |
721 if (pBrowser) | 723 if (pBrowser) |
722 { | 724 { |
723 CString url; | 725 BSTR bstrUrl; |
724 CComBSTR bstrUrl; | |
725 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen(b
strUrl) > 0) | 726 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen(b
strUrl) > 0) |
726 { | 727 { |
727 url = bstrUrl; | 728 std::wstring url(bstrUrl, SysStringLen(bstrUrl)); |
728 | 729 SysFreeString(bstrUrl); |
729 CPluginClient::UnescapeUrl(url); | 730 UnescapeUrl(url); |
730 | |
731 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBrows
er)); | 731 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBrows
er)); |
732 } | 732 } |
733 } | 733 } |
734 } | 734 } |
735 } | 735 } |
736 break; | 736 break; |
737 | 737 |
738 case DISPID_ONQUIT: | 738 case DISPID_ONQUIT: |
739 case DISPID_QUIT: | 739 case DISPID_QUIT: |
740 { | 740 { |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1135 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O
LECMD prgCmds[], OLECMDTEXT* pCmdText) | 1135 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O
LECMD prgCmds[], OLECMDTEXT* pCmdText) |
1136 { | 1136 { |
1137 if (cCmds == 0) return E_INVALIDARG; | 1137 if (cCmds == 0) return E_INVALIDARG; |
1138 if (prgCmds == 0) return E_POINTER; | 1138 if (prgCmds == 0) return E_POINTER; |
1139 | 1139 |
1140 prgCmds[0].cmdf = OLECMDF_ENABLED; | 1140 prgCmds[0].cmdf = OLECMDF_ENABLED; |
1141 | 1141 |
1142 return S_OK; | 1142 return S_OK; |
1143 } | 1143 } |
1144 | 1144 |
1145 HMENU CPluginClass::CreatePluginMenu(const CString& url) | 1145 HMENU CPluginClass::CreatePluginMenu(const std::wstring& url) |
1146 { | 1146 { |
1147 DEBUG_GENERAL("CreatePluginMenu"); | 1147 DEBUG_GENERAL("CreatePluginMenu"); |
1148 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); | 1148 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); |
1149 | 1149 |
1150 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); | 1150 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); |
1151 | 1151 |
1152 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); | 1152 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); |
1153 | 1153 |
1154 SetMenuBar(hMenuTrackPopup, url); | 1154 SetMenuBar(hMenuTrackPopup, url); |
1155 | 1155 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1242 { | 1242 { |
1243 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION
_SETTINGS, "Navigation::Failed") | 1243 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION
_SETTINGS, "Navigation::Failed") |
1244 } | 1244 } |
1245 } | 1245 } |
1246 } | 1246 } |
1247 break; | 1247 break; |
1248 } | 1248 } |
1249 case ID_MENU_DISABLE_ON_SITE: | 1249 case ID_MENU_DISABLE_ON_SITE: |
1250 { | 1250 { |
1251 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1251 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1252 CString urlString = GetTab()->GetDocumentUrl(); | 1252 std::wstring urlString = GetTab()->GetDocumentUrl(); |
1253 if (client->IsWhitelistedUrl(to_wstring(urlString))) | 1253 if (client->IsWhitelistedUrl(urlString)) |
1254 { | 1254 { |
1255 settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(to_w
string(urlString)))); | 1255 settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(urlS
tring))); |
1256 } | 1256 } |
1257 else | 1257 else |
1258 { | 1258 { |
1259 settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(to_wstr
ing(urlString)))); | 1259 settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(urlStri
ng))); |
1260 } | 1260 } |
1261 GetBrowser()->Refresh(); | 1261 GetBrowser()->Refresh(); |
1262 } | 1262 } |
1263 default: | 1263 default: |
1264 break; | 1264 break; |
1265 } | 1265 } |
1266 | 1266 |
1267 // Invalidate and redraw the control | 1267 // Invalidate and redraw the control |
1268 UpdateStatusBar(); | 1268 UpdateStatusBar(); |
1269 } | 1269 } |
1270 | 1270 |
1271 | 1271 |
1272 bool CPluginClass::SetMenuBar(HMENU hMenu, const CString& url) | 1272 bool CPluginClass::SetMenuBar(HMENU hMenu, const std::wstring& url) |
1273 { | 1273 { |
1274 DEBUG_GENERAL("SetMenuBar"); | 1274 DEBUG_GENERAL("SetMenuBar"); |
1275 | 1275 |
1276 std::wstring ctext; | 1276 std::wstring ctext; |
1277 | 1277 |
1278 s_criticalSectionLocal.Lock(); | 1278 s_criticalSectionLocal.Lock(); |
1279 { | 1279 { |
1280 s_menuDomains.clear(); | 1280 s_menuDomains.clear(); |
1281 } | 1281 } |
1282 s_criticalSectionLocal.Unlock(); | 1282 s_criticalSectionLocal.Unlock(); |
1283 | 1283 |
1284 Dictionary* dictionary = Dictionary::GetInstance(); | 1284 Dictionary* dictionary = Dictionary::GetInstance(); |
1285 | 1285 |
1286 MENUITEMINFOW fmii = {}; | 1286 MENUITEMINFOW fmii = {}; |
1287 fmii.cbSize = sizeof(fmii); | 1287 fmii.cbSize = sizeof(fmii); |
1288 | 1288 |
1289 MENUITEMINFOW miiSep = {}; | 1289 MENUITEMINFOW miiSep = {}; |
1290 miiSep.cbSize = sizeof(miiSep); | 1290 miiSep.cbSize = sizeof(miiSep); |
1291 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; | 1291 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; |
1292 miiSep.fType = MFT_SEPARATOR; | 1292 miiSep.fType = MFT_SEPARATOR; |
1293 | 1293 |
1294 CPluginClient* client = CPluginClient::GetInstance(); | 1294 CPluginClient* client = CPluginClient::GetInstance(); |
1295 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1295 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1296 { | 1296 { |
1297 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); | 1297 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); |
1298 // Is domain in white list? | 1298 // Is domain in white list? |
1299 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(to_wstring(url))); | 1299 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(url)); |
1300 if (client->IsWhitelistedUrl(to_wstring(GetTab()->GetDocumentUrl()))) | 1300 if (client->IsWhitelistedUrl(GetTab()->GetDocumentUrl())) |
1301 { | 1301 { |
1302 fmii.fState = MFS_CHECKED | MFS_ENABLED; | 1302 fmii.fState = MFS_CHECKED | MFS_ENABLED; |
1303 } | 1303 } |
1304 else | 1304 else |
1305 { | 1305 { |
1306 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; | 1306 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; |
1307 } | 1307 } |
1308 fmii.fMask = MIIM_STRING | MIIM_STATE; | 1308 fmii.fMask = MIIM_STRING | MIIM_STATE; |
1309 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); | 1309 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); |
1310 fmii.cch = static_cast<UINT>(ctext.size()); | 1310 fmii.cch = static_cast<UINT>(ctext.size()); |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1504 } | 1504 } |
1505 | 1505 |
1506 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara
m, lParam); | 1506 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara
m, lParam); |
1507 | 1507 |
1508 | 1508 |
1509 return result; | 1509 return result; |
1510 | 1510 |
1511 } | 1511 } |
1512 | 1512 |
1513 | 1513 |
1514 HICON CPluginClass::GetStatusBarIcon(const CString& url) | 1514 HICON CPluginClass::GetStatusBarIcon(const std::wstring& url) |
1515 { | 1515 { |
1516 // use the disable icon as defualt, if the client doesn't exists | 1516 // use the disable icon as defualt, if the client doesn't exists |
1517 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); | 1517 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); |
1518 | 1518 |
1519 CPluginTab* tab = GetTab(::GetCurrentThreadId()); | 1519 CPluginTab* tab = GetTab(::GetCurrentThreadId()); |
1520 if (tab) | 1520 if (tab) |
1521 { | 1521 { |
1522 CPluginClient* client = CPluginClient::GetInstance(); | 1522 CPluginClient* client = CPluginClient::GetInstance(); |
1523 if (!CPluginSettings::GetInstance()->IsPluginEnabled()) | 1523 if (!CPluginSettings::GetInstance()->IsPluginEnabled()) |
1524 { | 1524 { |
1525 } | 1525 } |
1526 else if (client->IsWhitelistedUrl(to_wstring(url))) | 1526 else if (client->IsWhitelistedUrl(url)) |
1527 { | 1527 { |
1528 hIcon = GetIcon(ICON_PLUGIN_DISABLED); | 1528 hIcon = GetIcon(ICON_PLUGIN_DISABLED); |
1529 } | 1529 } |
1530 else | 1530 else |
1531 { | 1531 { |
1532 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1532 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1533 hIcon = GetIcon(ICON_PLUGIN_ENABLED); | 1533 hIcon = GetIcon(ICON_PLUGIN_ENABLED); |
1534 } | 1534 } |
1535 } | 1535 } |
1536 return hIcon; | 1536 return hIcon; |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1633 | 1633 |
1634 // Done! | 1634 // Done! |
1635 EndPaint(hWnd, &ps); | 1635 EndPaint(hWnd, &ps); |
1636 | 1636 |
1637 return 0; | 1637 return 0; |
1638 } | 1638 } |
1639 | 1639 |
1640 case WM_LBUTTONUP: | 1640 case WM_LBUTTONUP: |
1641 case WM_RBUTTONUP: | 1641 case WM_RBUTTONUP: |
1642 { | 1642 { |
1643 CString strURL = pClass->GetBrowserUrl(); | 1643 std::wstring url = pClass->GetBrowserUrl(); |
1644 if (strURL != pClass->GetTab()->GetDocumentUrl()) | 1644 if (url != pClass->GetTab()->GetDocumentUrl()) |
1645 { | 1645 { |
1646 pClass->GetTab()->SetDocumentUrl(strURL); | 1646 pClass->GetTab()->SetDocumentUrl(url); |
1647 } | 1647 } |
1648 | 1648 |
1649 // Create menu | 1649 // Create menu |
1650 HMENU hMenu = pClass->CreatePluginMenu(strURL); | 1650 HMENU hMenu = pClass->CreatePluginMenu(url); |
1651 if (!hMenu) | 1651 if (!hMenu) |
1652 { | 1652 { |
1653 return 0; | 1653 return 0; |
1654 } | 1654 } |
1655 | 1655 |
1656 // Display menu | 1656 // Display menu |
1657 POINT pt; | 1657 POINT pt; |
1658 ::GetCursorPos(&pt); | 1658 ::GetCursorPos(&pt); |
1659 | 1659 |
1660 RECT rc; | 1660 RECT rc; |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1864 } | 1864 } |
1865 } | 1865 } |
1866 } | 1866 } |
1867 | 1867 |
1868 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); | 1868 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); |
1869 } | 1869 } |
1870 | 1870 |
1871 return hTabWnd; | 1871 return hTabWnd; |
1872 | 1872 |
1873 } | 1873 } |
OLD | NEW |