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

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

Issue 4912420225024000: Issue #1234 - Convert strings associated with URL's (Closed)
Patch Set: Created Jan. 5, 2015, 4:15 p.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 #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
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 CComBSTR 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 UnescapeUrl(url);
218 } 216 }
219 } 217 }
220 else 218 else
221 { 219 {
222 url = m_tab->GetDocumentUrl(); 220 url = m_tab->GetDocumentUrl();
223 } 221 }
224
225 return url; 222 return url;
226 } 223 }
227 224
228 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) 225 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr)
229 { 226 {
230 if (thisPtr == NULL) 227 if (thisPtr == NULL)
231 return 0; 228 return 0;
232 if (!((CPluginClass*)thisPtr)->InitObject(true)) 229 if (!((CPluginClass*)thisPtr)->InitObject(true))
233 { 230 {
234 ((CPluginClass*)thisPtr)->Unadvice(); 231 ((CPluginClass*)thisPtr)->Unadvice();
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 { 545 {
549 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal; 546 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal;
550 } 547 }
551 else 548 else
552 { 549 {
553 // Wrong type, return. 550 // Wrong type, return.
554 return; 551 return;
555 } 552 }
556 553
557 // Get the URL 554 // Get the URL
558 CString url; 555 std::wstring url;
559 vt = pDispParams->rgvarg[5].vt; 556 const auto& arg = pDispParams->rgvarg[5];
560 if (vt == VT_BYREF + VT_VARIANT) 557 vt = arg.vt;
558 if (vt == (VT_BYREF | VT_VARIANT) && arg.pvarVal->vt == VT_BSTR)
561 { 559 {
562 url = pDispParams->rgvarg[5].pvarVal->bstrVal; 560 BSTR b = arg.pvarVal->bstrVal;
563 561 if (b) {
564 CPluginClient::UnescapeUrl(url); 562 url = std::wstring(b, SysStringLen(b));
563 UnescapeUrl(url);
564 }
565 } 565 }
566 else 566 else
567 { 567 {
568 // Wrong type, return. 568 // Wrong type, return.
569 return; 569 return;
570 } 570 }
571 571
572 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na vigating new page 572 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na vigating new page
573 CPluginClient* client = CPluginClient::GetInstance(); 573 CPluginClient* client = CPluginClient::GetInstance();
574 574 CString urlLegacy = ToCString(url);
575 if (url.Find(L"javascript") == 0) 575 if (urlLegacy.Find(L"javascript") == 0)
576 { 576 {
577 } 577 }
578 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) 578 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr))
579 { 579 {
580 m_tab->OnNavigate(url); 580 m_tab->OnNavigate(url);
581 581
582 DEBUG_GENERAL(L"============================================================ ====================\nBegin main navigation url:" + url + "\n=================== =============================================================") 582 DEBUG_GENERAL(L"============================================================ ====================\nBegin main navigation url:" + urlLegacy + "\n============= ===================================================================")
583 583
584 #ifdef ENABLE_DEBUG_RESULT 584 #ifdef ENABLE_DEBUG_RESULT
585 CPluginDebug::DebugResultDomain(url); 585 CPluginDebug::DebugResultDomain(urlLegacy);
586 #endif 586 #endif
587 587
588 UpdateStatusBar(); 588 UpdateStatusBar();
589 } 589 }
590 else 590 else
591 { 591 {
592 DEBUG_NAVI(L"Navi::Begin navigation url:" + url) 592 DEBUG_NAVI(L"Navi::Begin navigation url:" + urlLegacy)
593 m_tab->CacheFrame(url); 593 m_tab->CacheFrame(url);
594 } 594 }
595 } 595 }
596 596
597 /* 597 /*
598 * #1163 implements behavior for method DISPID_WINDOWSTATECHANGED in CPluginClas s::Invoke 598 * #1163 implements behavior for method DISPID_WINDOWSTATECHANGED in CPluginClas s::Invoke
599 * - should validate and convert arguments in Invoke, not here 599 * - should validate and convert arguments in Invoke, not here
600 * - does not validate number of arguments before indexing into 'rgvarg' 600 * - does not validate number of arguments before indexing into 'rgvarg'
601 * - does not validate type of argument before using its value 601 * - does not validate type of argument before using its value
602 */ 602 */
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 724
725 case DISPID_DOCUMENTCOMPLETE: 725 case DISPID_DOCUMENTCOMPLETE:
726 { 726 {
727 DEBUG_NAVI("Navi::Document Complete"); 727 DEBUG_NAVI("Navi::Document Complete");
728 CComQIPtr<IWebBrowser2> browser = GetBrowser(); 728 CComQIPtr<IWebBrowser2> browser = GetBrowser();
729 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == V T_DISPATCH) 729 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == V T_DISPATCH)
730 { 730 {
731 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; 731 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal;
732 if (pBrowser) 732 if (pBrowser)
733 { 733 {
734 CString url;
735 CComBSTR bstrUrl; 734 CComBSTR bstrUrl;
736 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen (bstrUrl) > 0) 735 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && bstrUrl && ::S ysStringLen(bstrUrl) > 0)
737 { 736 {
738 url = bstrUrl; 737 std::wstring url = std::wstring(bstrUrl, SysStringLen(bstrUrl));
739 CPluginClient::UnescapeUrl(url); 738 UnescapeUrl(url);
740 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBro wser)); 739 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBro wser));
741 } 740 }
742 } 741 }
743 } 742 }
744 } 743 }
745 break; 744 break;
746 745
747 case DISPID_ONQUIT: 746 case DISPID_ONQUIT:
748 case DISPID_QUIT: 747 case DISPID_QUIT:
749 { 748 {
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
1153 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O LECMD prgCmds[], OLECMDTEXT* pCmdText) 1152 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O LECMD prgCmds[], OLECMDTEXT* pCmdText)
1154 { 1153 {
1155 if (cCmds == 0) return E_INVALIDARG; 1154 if (cCmds == 0) return E_INVALIDARG;
1156 if (prgCmds == 0) return E_POINTER; 1155 if (prgCmds == 0) return E_POINTER;
1157 1156
1158 prgCmds[0].cmdf = OLECMDF_ENABLED; 1157 prgCmds[0].cmdf = OLECMDF_ENABLED;
1159 1158
1160 return S_OK; 1159 return S_OK;
1161 } 1160 }
1162 1161
1163 HMENU CPluginClass::CreatePluginMenu(const CString& url) 1162 HMENU CPluginClass::CreatePluginMenu(const std::wstring& url)
1164 { 1163 {
1165 DEBUG_GENERAL("CreatePluginMenu"); 1164 DEBUG_GENERAL("CreatePluginMenu");
1166 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); 1165 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance();
1167 1166
1168 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); 1167 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1));
1169 1168
1170 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); 1169 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0);
1171 1170
1172 SetMenuBar(hMenuTrackPopup, url); 1171 SetMenuBar(hMenuTrackPopup, url);
1173 1172
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 { 1259 {
1261 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION _SETTINGS, "Navigation::Failed") 1260 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION _SETTINGS, "Navigation::Failed")
1262 } 1261 }
1263 } 1262 }
1264 } 1263 }
1265 break; 1264 break;
1266 } 1265 }
1267 case ID_MENU_DISABLE_ON_SITE: 1266 case ID_MENU_DISABLE_ON_SITE:
1268 { 1267 {
1269 CPluginSettings* settings = CPluginSettings::GetInstance(); 1268 CPluginSettings* settings = CPluginSettings::GetInstance();
1270 CString urlString = GetTab()->GetDocumentUrl(); 1269 std::wstring urlString = GetTab()->GetDocumentUrl();
1271 if (client->IsWhitelistedUrl(to_wstring(urlString))) 1270 if (client->IsWhitelistedUrl(urlString))
1272 { 1271 {
1273 settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(to_w string(urlString)))); 1272 settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(urlS tring)));
1274 } 1273 }
1275 else 1274 else
1276 { 1275 {
1277 settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(to_wstr ing(urlString)))); 1276 settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(urlStri ng)));
1278 } 1277 }
1279 GetBrowser()->Refresh(); 1278 GetBrowser()->Refresh();
1280 } 1279 }
1281 default: 1280 default:
1282 break; 1281 break;
1283 } 1282 }
1284 1283
1285 // Invalidate and redraw the control 1284 // Invalidate and redraw the control
1286 UpdateStatusBar(); 1285 UpdateStatusBar();
1287 } 1286 }
1288 1287
1289 1288
1290 bool CPluginClass::SetMenuBar(HMENU hMenu, const CString& url) 1289 bool CPluginClass::SetMenuBar(HMENU hMenu, const std::wstring& url)
1291 { 1290 {
1292 DEBUG_GENERAL("SetMenuBar"); 1291 DEBUG_GENERAL("SetMenuBar");
1293 1292
1294 std::wstring ctext; 1293 std::wstring ctext;
1295 Dictionary* dictionary = Dictionary::GetInstance(); 1294 Dictionary* dictionary = Dictionary::GetInstance();
1296 1295
1297 MENUITEMINFOW fmii = {}; 1296 MENUITEMINFOW fmii = {};
1298 fmii.cbSize = sizeof(fmii); 1297 fmii.cbSize = sizeof(fmii);
1299 1298
1300 MENUITEMINFOW miiSep = {}; 1299 MENUITEMINFOW miiSep = {};
1301 miiSep.cbSize = sizeof(miiSep); 1300 miiSep.cbSize = sizeof(miiSep);
1302 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; 1301 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE;
1303 miiSep.fType = MFT_SEPARATOR; 1302 miiSep.fType = MFT_SEPARATOR;
1304 1303
1305 CPluginClient* client = CPluginClient::GetInstance(); 1304 CPluginClient* client = CPluginClient::GetInstance();
1306 CPluginSettings* settings = CPluginSettings::GetInstance(); 1305 CPluginSettings* settings = CPluginSettings::GetInstance();
1307 { 1306 {
1308 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); 1307 ctext = dictionary->Lookup("menu", "menu-disable-on-site");
1309 // Is domain in white list? 1308 // Is domain in white list?
1310 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(to_wstring(url))); 1309 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(url));
1311 if (client->IsWhitelistedUrl(to_wstring(GetTab()->GetDocumentUrl()))) 1310 if (client->IsWhitelistedUrl(GetTab()->GetDocumentUrl()))
1312 { 1311 {
1313 fmii.fState = MFS_CHECKED | MFS_ENABLED; 1312 fmii.fState = MFS_CHECKED | MFS_ENABLED;
1314 } 1313 }
1315 else 1314 else
1316 { 1315 {
1317 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; 1316 fmii.fState = MFS_UNCHECKED | MFS_ENABLED;
1318 } 1317 }
1319 fmii.fMask = MIIM_STRING | MIIM_STATE; 1318 fmii.fMask = MIIM_STRING | MIIM_STATE;
1320 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); 1319 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str());
1321 fmii.cch = static_cast<UINT>(ctext.size()); 1320 fmii.cch = static_cast<UINT>(ctext.size());
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1515 } 1514 }
1516 1515
1517 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara m, lParam); 1516 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara m, lParam);
1518 1517
1519 1518
1520 return result; 1519 return result;
1521 1520
1522 } 1521 }
1523 1522
1524 1523
1525 HICON CPluginClass::GetStatusBarIcon(const CString& url) 1524 HICON CPluginClass::GetStatusBarIcon(const std::wstring& url)
1526 { 1525 {
1527 // use the disable icon as defualt, if the client doesn't exists 1526 // use the disable icon as defualt, if the client doesn't exists
1528 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); 1527 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED);
1529 1528
1530 CPluginTab* tab = GetTab(::GetCurrentThreadId()); 1529 CPluginTab* tab = GetTab(::GetCurrentThreadId());
1531 if (tab) 1530 if (tab)
1532 { 1531 {
1533 CPluginClient* client = CPluginClient::GetInstance(); 1532 CPluginClient* client = CPluginClient::GetInstance();
1534 if (CPluginSettings::GetInstance()->IsPluginEnabled()) 1533 if (CPluginSettings::GetInstance()->IsPluginEnabled())
1535 { 1534 {
1536 if (client->IsWhitelistedUrl(ToWstring(url))) 1535 if (client->IsWhitelistedUrl(url))
1537 { 1536 {
1538 hIcon = GetIcon(ICON_PLUGIN_DISABLED); 1537 hIcon = GetIcon(ICON_PLUGIN_DISABLED);
1539 } 1538 }
1540 else 1539 else
1541 { 1540 {
1542 CPluginSettings* settings = CPluginSettings::GetInstance(); 1541 CPluginSettings* settings = CPluginSettings::GetInstance();
1543 hIcon = GetIcon(ICON_PLUGIN_ENABLED); 1542 hIcon = GetIcon(ICON_PLUGIN_ENABLED);
1544 } 1543 }
1545 } 1544 }
1546 } 1545 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 1643
1645 // Done! 1644 // Done!
1646 EndPaint(hWnd, &ps); 1645 EndPaint(hWnd, &ps);
1647 1646
1648 return 0; 1647 return 0;
1649 } 1648 }
1650 1649
1651 case WM_LBUTTONUP: 1650 case WM_LBUTTONUP:
1652 case WM_RBUTTONUP: 1651 case WM_RBUTTONUP:
1653 { 1652 {
1654 CString strURL = pClass->GetBrowserUrl(); 1653 std::wstring url = pClass->GetBrowserUrl();
1655 if (strURL != pClass->GetTab()->GetDocumentUrl()) 1654 if (url != pClass->GetTab()->GetDocumentUrl())
1656 { 1655 {
1657 pClass->GetTab()->SetDocumentUrl(strURL); 1656 pClass->GetTab()->SetDocumentUrl(url);
1658 } 1657 }
1659 1658
1660 // Create menu 1659 // Create menu
1661 HMENU hMenu = pClass->CreatePluginMenu(strURL); 1660 HMENU hMenu = pClass->CreatePluginMenu(url);
1662 if (!hMenu) 1661 if (!hMenu)
1663 { 1662 {
1664 return 0; 1663 return 0;
1665 } 1664 }
1666 1665
1667 // Display menu 1666 // Display menu
1668 POINT pt; 1667 POINT pt;
1669 ::GetCursorPos(&pt); 1668 ::GetCursorPos(&pt);
1670 1669
1671 RECT rc; 1670 RECT rc;
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1875 } 1874 }
1876 } 1875 }
1877 } 1876 }
1878 1877
1879 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 1878 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
1880 } 1879 }
1881 1880
1882 return hTabWnd; 1881 return hTabWnd;
1883 1882
1884 } 1883 }
OLDNEW

Powered by Google App Engine
This is Rietveld