| Index: src/plugin/PluginClass.cpp | 
| =================================================================== | 
| --- a/src/plugin/PluginClass.cpp | 
| +++ b/src/plugin/PluginClass.cpp | 
| @@ -202,26 +202,24 @@ | 
| return browser; | 
| } | 
|  | 
| -CString CPluginClass::GetBrowserUrl() const | 
| +std::wstring CPluginClass::GetBrowserUrl() const | 
| { | 
| -  CString url; | 
| - | 
| +  std::wstring url; | 
| CComQIPtr<IWebBrowser2> browser = GetBrowser(); | 
| if (browser) | 
| { | 
| -    CComBSTR bstrURL; | 
| - | 
| -    if (SUCCEEDED(browser->get_LocationURL(&bstrURL))) | 
| +    BSTR bstrURL; | 
| +    if (SUCCEEDED(browser->get_LocationURL(&bstrURL)) && bstrURL) | 
| { | 
| -      url = bstrURL; | 
| -      CPluginClient::UnescapeUrl(url); | 
| +      url = std::wstring(bstrURL, SysStringLen(bstrURL)); | 
| +      SysFreeString(bstrURL); | 
| +      UnescapeUrl(url); | 
| } | 
| } | 
| else | 
| { | 
| url = m_tab->GetDocumentUrl(); | 
| } | 
| - | 
| return url; | 
| } | 
|  | 
| @@ -549,13 +547,16 @@ | 
| } | 
|  | 
| // Get the URL | 
| -  CString url; | 
| -  vt = pDispParams->rgvarg[5].vt; | 
| -  if (vt == VT_BYREF + VT_VARIANT) | 
| +  std::wstring url; | 
| +  const auto& arg = pDispParams->rgvarg[5]; | 
| +  vt = arg.vt; | 
| +  if (vt == (VT_BYREF | VT_VARIANT) && arg.pvarVal->vt == VT_BSTR) | 
| { | 
| -    url = pDispParams->rgvarg[5].pvarVal->bstrVal; | 
| - | 
| -    CPluginClient::UnescapeUrl(url); | 
| +    BSTR b = arg.pvarVal->bstrVal; | 
| +    if (b) { | 
| +      url = std::wstring(b, SysStringLen(b)); | 
| +      UnescapeUrl(url); | 
| +    } | 
| } | 
| else | 
| { | 
| @@ -565,28 +566,29 @@ | 
|  | 
| // If webbrowser2 is equal to top level browser (as set in SetSite), we are navigating new page | 
| CPluginClient* client = CPluginClient::GetInstance(); | 
| - | 
| -  if (url.Find(L"javascript") == 0) | 
| +  CString urlLegacy = ToCString(url); | 
| +  if (urlLegacy.Find(L"javascript") == 0) | 
| { | 
| } | 
| else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) | 
| { | 
| m_tab->OnNavigate(url); | 
|  | 
| -    DEBUG_GENERAL(L"================================================================================\nBegin main navigation url:" + url + "\n================================================================================") | 
| +    DEBUG_GENERAL(L"================================================================================\nBegin main navigation url:" + urlLegacy + "\n================================================================================") | 
|  | 
| #ifdef ENABLE_DEBUG_RESULT | 
| -      CPluginDebug::DebugResultDomain(url); | 
| +      CPluginDebug::DebugResultDomain(urlLegacy); | 
| #endif | 
|  | 
| UpdateStatusBar(); | 
| } | 
| else | 
| { | 
| -    DEBUG_NAVI(L"Navi::Begin navigation url:" + url) | 
| +    DEBUG_NAVI(L"Navi::Begin navigation url:" + urlLegacy) | 
| m_tab->CacheFrame(url); | 
| } | 
| } | 
| + | 
| STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags) | 
| { | 
| DEBUG_GENERAL("Tab changed"); | 
| @@ -719,14 +721,12 @@ | 
| CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; | 
| if (pBrowser) | 
| { | 
| -          CString url; | 
| -          CComBSTR bstrUrl; | 
| +          BSTR bstrUrl; | 
| if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen(bstrUrl) > 0) | 
| { | 
| -            url = bstrUrl; | 
| - | 
| -            CPluginClient::UnescapeUrl(url); | 
| - | 
| +            std::wstring url(bstrUrl, SysStringLen(bstrUrl)); | 
| +            SysFreeString(bstrUrl); | 
| +            UnescapeUrl(url); | 
| m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBrowser)); | 
| } | 
| } | 
| @@ -1140,7 +1140,7 @@ | 
| return S_OK; | 
| } | 
|  | 
| -HMENU CPluginClass::CreatePluginMenu(const CString& url) | 
| +HMENU CPluginClass::CreatePluginMenu(const std::wstring& url) | 
| { | 
| DEBUG_GENERAL("CreatePluginMenu"); | 
| HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); | 
| @@ -1357,14 +1357,14 @@ | 
| case ID_MENU_DISABLE_ON_SITE: | 
| { | 
| CPluginSettings* settings = CPluginSettings::GetInstance(); | 
| -      CString urlString = GetTab()->GetDocumentUrl(); | 
| -      if (client->IsWhitelistedUrl(to_wstring(urlString))) | 
| +      std::wstring urlString = GetTab()->GetDocumentUrl(); | 
| +      if (client->IsWhitelistedUrl(urlString)) | 
| { | 
| -        settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(to_wstring(urlString)))); | 
| +        settings->RemoveWhiteListedDomain(to_CString(client->GetHostFromUrl(urlString))); | 
| } | 
| else | 
| { | 
| -        settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(to_wstring(urlString)))); | 
| +        settings->AddWhiteListedDomain(to_CString(client->GetHostFromUrl(urlString))); | 
| } | 
| GetBrowser()->Refresh(); | 
| } | 
| @@ -1377,7 +1377,7 @@ | 
| } | 
|  | 
|  | 
| -bool CPluginClass::SetMenuBar(HMENU hMenu, const CString& url) | 
| +bool CPluginClass::SetMenuBar(HMENU hMenu, const std::wstring& url) | 
| { | 
| DEBUG_GENERAL("SetMenuBar"); | 
|  | 
| @@ -1406,8 +1406,8 @@ | 
| { | 
| ctext = dictionary->Lookup("menu", "menu-disable-on-site"); | 
| // Is domain in white list? | 
| -    ReplaceString(ctext, L"?1?", client->GetHostFromUrl(to_wstring(url))); | 
| -    if (client->IsWhitelistedUrl(to_wstring(GetTab()->GetDocumentUrl()))) | 
| +    ReplaceString(ctext, L"?1?", client->GetHostFromUrl(url)); | 
| +    if (client->IsWhitelistedUrl(GetTab()->GetDocumentUrl())) | 
| { | 
| fmii.fState = MFS_CHECKED | MFS_ENABLED; | 
| } | 
| @@ -1622,7 +1622,7 @@ | 
| } | 
|  | 
|  | 
| -HICON CPluginClass::GetStatusBarIcon(const CString& url) | 
| +HICON CPluginClass::GetStatusBarIcon(const std::wstring& url) | 
| { | 
| // use the disable icon as defualt, if the client doesn't exists | 
| HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); | 
| @@ -1634,7 +1634,7 @@ | 
| if (!CPluginSettings::GetInstance()->IsPluginEnabled()) | 
| { | 
| } | 
| -    else if (client->IsWhitelistedUrl(to_wstring(url))) | 
| +    else if (client->IsWhitelistedUrl(url)) | 
| { | 
| hIcon = GetIcon(ICON_PLUGIN_DISABLED); | 
| } | 
| @@ -1751,14 +1751,14 @@ | 
| case WM_LBUTTONUP: | 
| case WM_RBUTTONUP: | 
| { | 
| -      CString strURL = pClass->GetBrowserUrl(); | 
| -      if (strURL != pClass->GetTab()->GetDocumentUrl()) | 
| +      std::wstring url = pClass->GetBrowserUrl(); | 
| +      if (url != pClass->GetTab()->GetDocumentUrl()) | 
| { | 
| -        pClass->GetTab()->SetDocumentUrl(strURL); | 
| +        pClass->GetTab()->SetDocumentUrl(url); | 
| } | 
|  | 
| // Create menu | 
| -      HMENU hMenu = pClass->CreatePluginMenu(strURL); | 
| +      HMENU hMenu = pClass->CreatePluginMenu(url); | 
| if (!hMenu) | 
| { | 
| return 0; | 
|  |