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 Oct. 14, 2014, 10:17 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 BSTR bstrURL;
sergei 2014/10/17 10:10:12 Why is ATL::CComBSTR replaced by BSTR? Looks like
Eric 2014/10/20 02:36:01 Because we don't need CComBSTR here. The only reas
sergei 2014/10/21 09:45:17 Sorry, I don't understand about which mystery your
Eric 2014/10/21 17:19:52 That's because there is no mystery. I take it, th
Oleksandr 2015/01/05 11:55:40 Let's move back to this specific code change. As I
Eric 2015/01/05 16:18:26 Done.
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
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 auto arg = pDispParams->rgvarg[5];
sergei 2014/10/17 10:10:12 I would prefer `const auto&` here.
Eric 2014/10/20 02:36:01 OK.
554 if (vt == VT_BYREF + VT_VARIANT) 552 vt = arg.vt;
553 if (vt == VT_BYREF + VT_VARIANT && arg.pvarVal->vt == VT_BSTR)
sergei 2014/10/17 10:10:12 '+' here looks unusual, despite it works, I think
Eric 2014/10/20 02:36:01 It's out of scope, but it's also trivial. Done.
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 SysFreeString(b);
sergei 2014/10/17 10:10:12 It's not allowed to modify arguments, especially b
Eric 2014/10/20 02:36:01 Brain fart. Forgot that this was deriving from IDi
559 UnescapeUrl(url);
560 }
559 } 561 }
560 else 562 else
561 { 563 {
562 // Wrong type, return. 564 // Wrong type, return.
563 return; 565 return;
564 } 566 }
565 567
566 // 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
567 CPluginClient* client = CPluginClient::GetInstance(); 569 CPluginClient* client = CPluginClient::GetInstance();
568 570 CString urlLegacy = ToCString(url);
569 if (url.Find(L"javascript") == 0) 571 if (urlLegacy.Find(L"javascript") == 0)
570 { 572 {
571 } 573 }
572 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) 574 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr))
573 { 575 {
574 m_tab->OnNavigate(url); 576 m_tab->OnNavigate(url);
575 577
576 DEBUG_GENERAL(L"============================================================ ====================\nBegin main navigation url:" + url + "\n=================== =============================================================") 578 DEBUG_GENERAL(L"============================================================ ====================\nBegin main navigation url:" + urlLegacy + "\n============= ===================================================================")
577 579
578 #ifdef ENABLE_DEBUG_RESULT 580 #ifdef ENABLE_DEBUG_RESULT
579 CPluginDebug::DebugResultDomain(url); 581 CPluginDebug::DebugResultDomain(urlLegacy);
580 #endif 582 #endif
581 583
582 UpdateStatusBar(); 584 UpdateStatusBar();
583 } 585 }
584 else 586 else
585 { 587 {
586 DEBUG_NAVI(L"Navi::Begin navigation url:" + url) 588 DEBUG_NAVI(L"Navi::Begin navigation url:" + urlLegacy)
587 m_tab->CacheFrame(url); 589 m_tab->CacheFrame(url);
588 } 590 }
589 } 591 }
592
590 STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags) 593 STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags)
591 { 594 {
592 DEBUG_GENERAL("Tab changed"); 595 DEBUG_GENERAL("Tab changed");
593 bool newtabshown = pDispParams->rgvarg[1].intVal==3; 596 bool newtabshown = pDispParams->rgvarg[1].intVal==3;
594 if (newtabshown) 597 if (newtabshown)
595 { 598 {
596 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());
597 if (it == s_threadInstances.end()) 600 if (it == s_threadInstances.end())
598 { 601 {
599 s_threadInstances[::GetCurrentThreadId()] = this; 602 s_threadInstances[::GetCurrentThreadId()] = this;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 { 715 {
713 DEBUG_NAVI("Navi::Document Complete") 716 DEBUG_NAVI("Navi::Document Complete")
714 717
715 CComQIPtr<IWebBrowser2> browser = GetBrowser(); 718 CComQIPtr<IWebBrowser2> browser = GetBrowser();
716 719
717 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == VT_ DISPATCH) 720 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == VT_ DISPATCH)
718 { 721 {
719 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; 722 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal;
720 if (pBrowser) 723 if (pBrowser)
721 { 724 {
722 CString url; 725 BSTR bstrUrl;
sergei 2014/10/17 10:10:12 Again CComBSTR is replaced by BSTR.
Eric 2014/10/20 02:36:01 And for the same reasons I stated above.
723 CComBSTR bstrUrl;
724 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen(b strUrl) > 0) 726 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen(b strUrl) > 0)
725 { 727 {
726 url = bstrUrl; 728 std::wstring url(bstrUrl, SysStringLen(bstrUrl));
727 729 SysFreeString(bstrUrl);
728 CPluginClient::UnescapeUrl(url); 730 UnescapeUrl(url);
729
730 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBrows er)); 731 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBrows er));
731 } 732 }
732 } 733 }
733 } 734 }
734 } 735 }
735 break; 736 break;
736 737
737 case DISPID_ONQUIT: 738 case DISPID_ONQUIT:
738 case DISPID_QUIT: 739 case DISPID_QUIT:
739 { 740 {
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O LECMD prgCmds[], OLECMDTEXT* pCmdText) 1134 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O LECMD prgCmds[], OLECMDTEXT* pCmdText)
1134 { 1135 {
1135 if (cCmds == 0) return E_INVALIDARG; 1136 if (cCmds == 0) return E_INVALIDARG;
1136 if (prgCmds == 0) return E_POINTER; 1137 if (prgCmds == 0) return E_POINTER;
1137 1138
1138 prgCmds[0].cmdf = OLECMDF_ENABLED; 1139 prgCmds[0].cmdf = OLECMDF_ENABLED;
1139 1140
1140 return S_OK; 1141 return S_OK;
1141 } 1142 }
1142 1143
1143 HMENU CPluginClass::CreatePluginMenu(const CString& url) 1144 HMENU CPluginClass::CreatePluginMenu(const std::wstring& url)
1144 { 1145 {
1145 DEBUG_GENERAL("CreatePluginMenu"); 1146 DEBUG_GENERAL("CreatePluginMenu");
1146 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); 1147 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance();
1147 1148
1148 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); 1149 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1));
1149 1150
1150 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); 1151 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0);
1151 1152
1152 SetMenuBar(hMenuTrackPopup, url); 1153 SetMenuBar(hMenuTrackPopup, url);
1153 1154
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 { 1351 {
1351 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION _SETTINGS, "Navigation::Failed") 1352 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION _SETTINGS, "Navigation::Failed")
1352 } 1353 }
1353 } 1354 }
1354 } 1355 }
1355 break; 1356 break;
1356 } 1357 }
1357 case ID_MENU_DISABLE_ON_SITE: 1358 case ID_MENU_DISABLE_ON_SITE:
1358 { 1359 {
1359 CPluginSettings* settings = CPluginSettings::GetInstance(); 1360 CPluginSettings* settings = CPluginSettings::GetInstance();
1360 CString urlString = GetTab()->GetDocumentUrl(); 1361 std::wstring urlString = GetTab()->GetDocumentUrl();
1361 if (client->IsWhitelistedUrl(to_wstring(urlString))) 1362 if (client->IsWhitelistedUrl(urlString))
1362 { 1363 {
1363 settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(to_w string(urlString)))); 1364 settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(urlS tring)));
1364 } 1365 }
1365 else 1366 else
1366 { 1367 {
1367 settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(to_wstr ing(urlString)))); 1368 settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(urlStri ng)));
1368 } 1369 }
1369 GetBrowser()->Refresh(); 1370 GetBrowser()->Refresh();
1370 } 1371 }
1371 default: 1372 default:
1372 break; 1373 break;
1373 } 1374 }
1374 1375
1375 // Invalidate and redraw the control 1376 // Invalidate and redraw the control
1376 UpdateStatusBar(); 1377 UpdateStatusBar();
1377 } 1378 }
1378 1379
1379 1380
1380 bool CPluginClass::SetMenuBar(HMENU hMenu, const CString& url) 1381 bool CPluginClass::SetMenuBar(HMENU hMenu, const std::wstring& url)
1381 { 1382 {
1382 DEBUG_GENERAL("SetMenuBar"); 1383 DEBUG_GENERAL("SetMenuBar");
1383 1384
1384 std::wstring ctext; 1385 std::wstring ctext;
1385 1386
1386 s_criticalSectionLocal.Lock(); 1387 s_criticalSectionLocal.Lock();
1387 { 1388 {
1388 s_menuDomains.clear(); 1389 s_menuDomains.clear();
1389 } 1390 }
1390 s_criticalSectionLocal.Unlock(); 1391 s_criticalSectionLocal.Unlock();
1391 1392
1392 Dictionary* dictionary = Dictionary::GetInstance(); 1393 Dictionary* dictionary = Dictionary::GetInstance();
1393 1394
1394 MENUITEMINFOW fmii; 1395 MENUITEMINFOW fmii;
1395 memset(&fmii, 0, sizeof(MENUITEMINFO)); 1396 memset(&fmii, 0, sizeof(MENUITEMINFO));
1396 fmii.cbSize = sizeof(MENUITEMINFO); 1397 fmii.cbSize = sizeof(MENUITEMINFO);
1397 1398
1398 MENUITEMINFOW miiSep; 1399 MENUITEMINFOW miiSep;
1399 memset(&miiSep, 0, sizeof(MENUITEMINFO)); 1400 memset(&miiSep, 0, sizeof(MENUITEMINFO));
1400 miiSep.cbSize = sizeof(MENUITEMINFO); 1401 miiSep.cbSize = sizeof(MENUITEMINFO);
1401 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE; 1402 miiSep.fMask = MIIM_TYPE | MIIM_FTYPE;
1402 miiSep.fType = MFT_SEPARATOR; 1403 miiSep.fType = MFT_SEPARATOR;
1403 1404
1404 CPluginClient* client = CPluginClient::GetInstance(); 1405 CPluginClient* client = CPluginClient::GetInstance();
1405 CPluginSettings* settings = CPluginSettings::GetInstance(); 1406 CPluginSettings* settings = CPluginSettings::GetInstance();
1406 { 1407 {
1407 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); 1408 ctext = dictionary->Lookup("menu", "menu-disable-on-site");
1408 // Is domain in white list? 1409 // Is domain in white list?
1409 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(to_wstring(url))); 1410 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(url));
1410 if (client->IsWhitelistedUrl(to_wstring(GetTab()->GetDocumentUrl()))) 1411 if (client->IsWhitelistedUrl(GetTab()->GetDocumentUrl()))
1411 { 1412 {
1412 fmii.fState = MFS_CHECKED | MFS_ENABLED; 1413 fmii.fState = MFS_CHECKED | MFS_ENABLED;
1413 } 1414 }
1414 else 1415 else
1415 { 1416 {
1416 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; 1417 fmii.fState = MFS_UNCHECKED | MFS_ENABLED;
1417 } 1418 }
1418 fmii.fMask = MIIM_STRING | MIIM_STATE; 1419 fmii.fMask = MIIM_STRING | MIIM_STATE;
1419 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); 1420 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str());
1420 fmii.cch = static_cast<UINT>(ctext.size()); 1421 fmii.cch = static_cast<UINT>(ctext.size());
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1615 } 1616 }
1616 1617
1617 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara m, lParam); 1618 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara m, lParam);
1618 1619
1619 1620
1620 return result; 1621 return result;
1621 1622
1622 } 1623 }
1623 1624
1624 1625
1625 HICON CPluginClass::GetStatusBarIcon(const CString& url) 1626 HICON CPluginClass::GetStatusBarIcon(const std::wstring& url)
1626 { 1627 {
1627 // use the disable icon as defualt, if the client doesn't exists 1628 // use the disable icon as defualt, if the client doesn't exists
1628 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); 1629 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED);
1629 1630
1630 CPluginTab* tab = GetTab(::GetCurrentThreadId()); 1631 CPluginTab* tab = GetTab(::GetCurrentThreadId());
1631 if (tab) 1632 if (tab)
1632 { 1633 {
1633 CPluginClient* client = CPluginClient::GetInstance(); 1634 CPluginClient* client = CPluginClient::GetInstance();
1634 if (!CPluginSettings::GetInstance()->IsPluginEnabled()) 1635 if (!CPluginSettings::GetInstance()->IsPluginEnabled())
1635 { 1636 {
1636 } 1637 }
1637 else if (client->IsWhitelistedUrl(to_wstring(url))) 1638 else if (client->IsWhitelistedUrl(url))
1638 { 1639 {
1639 hIcon = GetIcon(ICON_PLUGIN_DISABLED); 1640 hIcon = GetIcon(ICON_PLUGIN_DISABLED);
1640 } 1641 }
1641 else 1642 else
1642 { 1643 {
1643 CPluginSettings* settings = CPluginSettings::GetInstance(); 1644 CPluginSettings* settings = CPluginSettings::GetInstance();
1644 hIcon = GetIcon(ICON_PLUGIN_ENABLED); 1645 hIcon = GetIcon(ICON_PLUGIN_ENABLED);
1645 } 1646 }
1646 } 1647 }
1647 return hIcon; 1648 return hIcon;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1744 1745
1745 // Done! 1746 // Done!
1746 EndPaint(hWnd, &ps); 1747 EndPaint(hWnd, &ps);
1747 1748
1748 return 0; 1749 return 0;
1749 } 1750 }
1750 1751
1751 case WM_LBUTTONUP: 1752 case WM_LBUTTONUP:
1752 case WM_RBUTTONUP: 1753 case WM_RBUTTONUP:
1753 { 1754 {
1754 CString strURL = pClass->GetBrowserUrl(); 1755 std::wstring url = pClass->GetBrowserUrl();
1755 if (strURL != pClass->GetTab()->GetDocumentUrl()) 1756 if (url != pClass->GetTab()->GetDocumentUrl())
1756 { 1757 {
1757 pClass->GetTab()->SetDocumentUrl(strURL); 1758 pClass->GetTab()->SetDocumentUrl(url);
1758 } 1759 }
1759 1760
1760 // Create menu 1761 // Create menu
1761 HMENU hMenu = pClass->CreatePluginMenu(strURL); 1762 HMENU hMenu = pClass->CreatePluginMenu(url);
1762 if (!hMenu) 1763 if (!hMenu)
1763 { 1764 {
1764 return 0; 1765 return 0;
1765 } 1766 }
1766 1767
1767 // Display menu 1768 // Display menu
1768 POINT pt; 1769 POINT pt;
1769 ::GetCursorPos(&pt); 1770 ::GetCursorPos(&pt);
1770 1771
1771 RECT rc; 1772 RECT rc;
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1975 } 1976 }
1976 } 1977 }
1977 } 1978 }
1978 1979
1979 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 1980 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
1980 } 1981 }
1981 1982
1982 return hTabWnd; 1983 return hTabWnd;
1983 1984
1984 } 1985 }
OLDNEW

Powered by Google App Engine
This is Rietveld