| OLD | NEW | 
|     1 /* |     1 /* | 
|     2  * This file is part of Adblock Plus <https://adblockplus.org/>, |     2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
|     3  * Copyright (C) 2006-2015 Eyeo GmbH |     3  * Copyright (C) 2006-2015 Eyeo GmbH | 
|     4  * |     4  * | 
|     5  * Adblock Plus is free software: you can redistribute it and/or modify |     5  * Adblock Plus is free software: you can redistribute it and/or modify | 
|     6  * it under the terms of the GNU General Public License version 3 as |     6  * it under the terms of the GNU General Public License version 3 as | 
|     7  * published by the Free Software Foundation. |     7  * published by the Free Software Foundation. | 
|     8  * |     8  * | 
|     9  * Adblock Plus is distributed in the hope that it will be useful, |     9  * Adblock Plus is distributed in the hope that it will be useful, | 
|    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of |    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|    23 #include "PluginFilter.h" |    23 #include "PluginFilter.h" | 
|    24 #include "PluginMimeFilterClient.h" |    24 #include "PluginMimeFilterClient.h" | 
|    25 #include "PluginClient.h" |    25 #include "PluginClient.h" | 
|    26 #include "PluginClientFactory.h" |    26 #include "PluginClientFactory.h" | 
|    27 #include "PluginMutex.h" |    27 #include "PluginMutex.h" | 
|    28 #include "sddl.h" |    28 #include "sddl.h" | 
|    29 #include "PluginUtil.h" |    29 #include "PluginUtil.h" | 
|    30 #include "PluginUserSettings.h" |    30 #include "PluginUserSettings.h" | 
|    31 #include "../shared/Utils.h" |    31 #include "../shared/Utils.h" | 
|    32 #include "../shared/Dictionary.h" |    32 #include "../shared/Dictionary.h" | 
 |    33 #include "WebBrowserEventsListener.h" | 
|    33 #include "../shared/IE_version.h" |    34 #include "../shared/IE_version.h" | 
|    34 #include <thread> |    35 #include <thread> | 
|    35 #include <array> |    36 #include <array> | 
|    36  |    37  | 
|    37 #ifdef DEBUG_HIDE_EL |    38 #ifdef DEBUG_HIDE_EL | 
|    38 DWORD profileTime = 0; |    39 DWORD profileTime = 0; | 
|    39 #endif |    40 #endif | 
|    40  |    41  | 
|    41 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR); |    42 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR); | 
|    42 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR
      ECT); |    43 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR
      ECT); | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    83     } |    84     } | 
|    84  |    85  | 
|    85     int Width() const |    86     int Width() const | 
|    86     { |    87     { | 
|    87       return right - left; |    88       return right - left; | 
|    88     } |    89     } | 
|    89   }; |    90   }; | 
|    90 } |    91 } | 
|    91  |    92  | 
|    92 CPluginClass::CPluginClass() |    93 CPluginClass::CPluginClass() | 
 |    94   : m_data(std::make_shared<Data>()) | 
|    93 { |    95 { | 
|    94   //Use this line to debug memory leaks |    96   //Use this line to debug memory leaks | 
|    95   //    _CrtDumpMemoryLeaks(); |    97   //    _CrtDumpMemoryLeaks(); | 
|    96  |    98  | 
|    97   m_isAdvised = false; |    99   m_isAdvised = false; | 
|    98   m_hTabWnd = NULL; |   100   m_hTabWnd = NULL; | 
|    99   m_hStatusBarWnd = NULL; |   101   m_hStatusBarWnd = NULL; | 
|   100   m_hPaneWnd = NULL; |   102   m_hPaneWnd = NULL; | 
|   101   m_nPaneWidth = 0; |   103   m_nPaneWidth = 0; | 
|   102   m_pWndProcStatus = NULL; |   104   m_pWndProcStatus = NULL; | 
|   103   m_hTheme = NULL; |   105   m_hTheme = NULL; | 
|   104   m_isInitializedOk = false; |   106   m_isInitializedOk = false; | 
|   105  |   107  | 
|   106  |   108  | 
|   107   m_tab = new CPluginTab(this); |   109   m_data->tab.reset(new CPluginTab(this)); | 
|   108  |  | 
|   109   Dictionary::Create(GetBrowserLanguage()); |   110   Dictionary::Create(GetBrowserLanguage()); | 
|   110 } |   111 } | 
|   111  |   112  | 
|   112 CPluginClass::~CPluginClass() |   113 CPluginClass::~CPluginClass() | 
|   113 { |   114 { | 
|   114   delete m_tab; |  | 
|   115 } |   115 } | 
|   116  |   116  | 
|   117  |  | 
|   118 ///////////////////////////////////////////////////////////////////////////// |   117 ///////////////////////////////////////////////////////////////////////////// | 
|   119 // Initialization |   118 // Initialization | 
|   120  |   119  | 
|   121 HRESULT CPluginClass::FinalConstruct() |   120 HRESULT CPluginClass::FinalConstruct() | 
|   122 { |   121 { | 
|   123   return S_OK; |   122   return S_OK; | 
|   124 } |   123 } | 
|   125  |   124  | 
|   126 void CPluginClass::FinalRelease() |   125 void CPluginClass::FinalRelease() | 
|   127 { |   126 { | 
|   128   s_criticalSectionBrowser.Lock(); |   127   s_criticalSectionBrowser.Lock(); | 
|   129   { |   128   { | 
|   130     m_webBrowser2.Release(); |   129     m_data.reset(); | 
|   131   } |   130   } | 
|   132   s_criticalSectionBrowser.Unlock(); |   131   s_criticalSectionBrowser.Unlock(); | 
|   133 } |   132 } | 
|   134  |   133  | 
|   135 HWND CPluginClass::GetBrowserHWND() const |   134 HWND CPluginClass::GetBrowserHWND() const | 
|   136 { |   135 { | 
|   137   SHANDLE_PTR hBrowserWndHandle = NULL; |   136   SHANDLE_PTR hBrowserWndHandle = NULL; | 
|   138  |   137  | 
|   139   CComQIPtr<IWebBrowser2> browser = GetBrowser(); |   138   CComQIPtr<IWebBrowser2> browser = GetBrowser(); | 
|   140   if (browser) |   139   if (browser) | 
|   141   { |   140   { | 
|   142     HRESULT hr = browser->get_HWND(&hBrowserWndHandle); |   141     HRESULT hr = browser->get_HWND(&hBrowserWndHandle); | 
|   143     if (FAILED(hr)) |   142     if (FAILED(hr)) | 
|   144     { |   143     { | 
|   145       DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_BROWSER_WINDOW, "
      Class::GetBrowserHWND - failed") |   144       DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_BROWSER_WINDOW, "
      Class::GetBrowserHWND - failed") | 
|   146     } |   145     } | 
|   147   } |   146   } | 
|   148  |   147  | 
|   149   return (HWND)hBrowserWndHandle; |   148   return (HWND)hBrowserWndHandle; | 
|   150 } |   149 } | 
|   151  |   150  | 
|   152  |   151  | 
|   153 CComQIPtr<IWebBrowser2> CPluginClass::GetBrowser() const |   152 CComQIPtr<IWebBrowser2> CPluginClass::GetBrowser() const | 
|   154 { |   153 { | 
|   155   CComQIPtr<IWebBrowser2> browser; |   154   CComQIPtr<IWebBrowser2> browser; | 
|   156  |   155  | 
|   157   s_criticalSectionBrowser.Lock(); |   156   s_criticalSectionBrowser.Lock(); | 
|   158   { |   157   { | 
|   159     browser = m_webBrowser2; |   158     browser = m_data->webBrowser2; | 
|   160   } |   159   } | 
|   161   s_criticalSectionBrowser.Unlock(); |   160   s_criticalSectionBrowser.Unlock(); | 
|   162  |   161  | 
|   163   return browser; |   162   return browser; | 
|   164 } |   163 } | 
|   165  |   164  | 
|   166  |   165  | 
|   167 CComQIPtr<IWebBrowser2> CPluginClass::GetAsyncBrowser() |   166 CComQIPtr<IWebBrowser2> CPluginClass::GetAsyncBrowser() | 
|   168 { |   167 { | 
|   169   CComQIPtr<IWebBrowser2> browser; |   168   CComQIPtr<IWebBrowser2> browser; | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|   185   { |   184   { | 
|   186     CComBSTR bstrURL; |   185     CComBSTR bstrURL; | 
|   187     if (SUCCEEDED(browser->get_LocationURL(&bstrURL)) && bstrURL) |   186     if (SUCCEEDED(browser->get_LocationURL(&bstrURL)) && bstrURL) | 
|   188     { |   187     { | 
|   189       url = std::wstring(bstrURL, SysStringLen(bstrURL)); |   188       url = std::wstring(bstrURL, SysStringLen(bstrURL)); | 
|   190       UnescapeUrl(url); |   189       UnescapeUrl(url); | 
|   191     } |   190     } | 
|   192   } |   191   } | 
|   193   else |   192   else | 
|   194   { |   193   { | 
|   195     url = m_tab->GetDocumentUrl(); |   194     url = m_data->tab->GetDocumentUrl(); | 
|   196   } |   195   } | 
|   197   return url; |   196   return url; | 
|   198 } |   197 } | 
|   199  |   198  | 
|   200 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) |   199 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) | 
|   201 { |   200 { | 
|   202   if (thisPtr == NULL) |   201   if (thisPtr == NULL) | 
|   203     return 0; |   202     return 0; | 
|   204   if (!((CPluginClass*)thisPtr)->InitObject()) |   203   if (!((CPluginClass*)thisPtr)->InitObject()) | 
|   205   { |   204   { | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
|   229       DEBUG_GENERAL(L"==========================================================
      ======================\nNEW TAB UI\n============================================
      ====================================") |   228       DEBUG_GENERAL(L"==========================================================
      ======================\nNEW TAB UI\n============================================
      ====================================") | 
|   230  |   229  | 
|   231       HRESULT hr = ::CoInitialize(NULL); |   230       HRESULT hr = ::CoInitialize(NULL); | 
|   232       if (FAILED(hr)) |   231       if (FAILED(hr)) | 
|   233       { |   232       { | 
|   234         DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT,
       "Class::SetSite - CoInitialize"); |   233         DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT,
       "Class::SetSite - CoInitialize"); | 
|   235       } |   234       } | 
|   236  |   235  | 
|   237       s_criticalSectionBrowser.Lock(); |   236       s_criticalSectionBrowser.Lock(); | 
|   238       { |   237       { | 
|   239         m_webBrowser2 = unknownSite; |   238         m_data->webBrowser2 = ATL::CComQIPtr<IWebBrowser2>(unknownSite); | 
|   240       } |   239       } | 
|   241       s_criticalSectionBrowser.Unlock(); |   240       s_criticalSectionBrowser.Unlock(); | 
|   242  |   241  | 
|   243       //register the mimefilter |   242       //register the mimefilter | 
|   244       //and only mimefilter |   243       //and only mimefilter | 
|   245       //on some few computers the mimefilter does not get properly registered wh
      en it is done on another thread |   244       //on some few computers the mimefilter does not get properly registered wh
      en it is done on another thread | 
|   246  |   245  | 
|   247       s_criticalSectionLocal.Lock(); |   246       s_criticalSectionLocal.Lock(); | 
|   248       { |   247       { | 
|   249         // Always register on startup, then check if we need to unregister in a 
      separate thread |   248         // Always register on startup, then check if we need to unregister in a 
      separate thread | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   324         { |   323         { | 
|   325           // TODO: Explicitly releasing a resource when a container becomes empt
      y looks like a job better suited for shared_ptr |   324           // TODO: Explicitly releasing a resource when a container becomes empt
      y looks like a job better suited for shared_ptr | 
|   326           CPluginClientFactory::ReleaseMimeFilterClientInstance(); |   325           CPluginClientFactory::ReleaseMimeFilterClientInstance(); | 
|   327         } |   326         } | 
|   328       } |   327       } | 
|   329       s_criticalSectionLocal.Unlock(); |   328       s_criticalSectionLocal.Unlock(); | 
|   330  |   329  | 
|   331       // Release browser interface |   330       // Release browser interface | 
|   332       s_criticalSectionBrowser.Lock(); |   331       s_criticalSectionBrowser.Lock(); | 
|   333       { |   332       { | 
|   334         m_webBrowser2.Release(); |   333         m_data->webBrowser2.Release(); | 
|   335       } |   334       } | 
|   336       s_criticalSectionBrowser.Unlock(); |   335       s_criticalSectionBrowser.Unlock(); | 
|   337  |   336  | 
|   338       DEBUG_GENERAL("===========================================================
      =====================\nNEW TAB UI - END\n=======================================
      =========================================") |   337       DEBUG_GENERAL("===========================================================
      =====================\nNEW TAB UI - END\n=======================================
      =========================================") | 
|   339  |   338  | 
|   340       ::CoUninitialize(); |   339       ::CoUninitialize(); | 
|   341     } |   340     } | 
|   342  |   341  | 
|   343     IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); |   342     IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); | 
|   344   } |   343   } | 
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   477     if (!webBrowser) |   476     if (!webBrowser) | 
|   478     { |   477     { | 
|   479       return; |   478       return; | 
|   480     } |   479     } | 
|   481     if (!urlVariant || urlVariant->vt != VT_BSTR) |   480     if (!urlVariant || urlVariant->vt != VT_BSTR) | 
|   482     { |   481     { | 
|   483       return; |   482       return; | 
|   484     } |   483     } | 
|   485     std::wstring url(urlVariant->bstrVal, SysStringLen(urlVariant->bstrVal)); |   484     std::wstring url(urlVariant->bstrVal, SysStringLen(urlVariant->bstrVal)); | 
|   486     UnescapeUrl(url); |   485     UnescapeUrl(url); | 
|   487  |   486     EnsureWebBrowserConnected(webBrowser); | 
|   488     //Register a mime filter if it's not registered yet |   487     //Register a mime filter if it's not registered yet | 
|   489     if (s_mimeFilter == nullptr) |   488     if (s_mimeFilter == nullptr) | 
|   490     { |   489     { | 
|   491       s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); |   490       s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); | 
|   492     } |   491     } | 
|   493     // If webbrowser2 is equal to top level browser (as set in SetSite), we are |   492     // If webbrowser2 is equal to top level browser (as set in SetSite), we are | 
|   494     // navigating new page |   493     // navigating new page | 
|   495     CPluginClient* client = CPluginClient::GetInstance(); |   494     CPluginClient* client = CPluginClient::GetInstance(); | 
|   496     if (url.find(L"javascript") == 0) |   495     if (url.find(L"javascript") == 0) | 
|   497     { |   496     { | 
|   498     } |   497     } | 
|   499     else if (GetBrowser().IsEqualObject(webBrowser)) |   498     else if (GetBrowser().IsEqualObject(webBrowser)) | 
|   500     { |   499     { | 
|   501       m_tab->OnNavigate(url); |   500       m_data->tab->OnNavigate(url); | 
|   502       DEBUG_GENERAL( |   501       DEBUG_GENERAL( | 
|   503       L"========================================================================
      ========\n" |   502       L"========================================================================
      ========\n" | 
|   504       L"Begin main navigation url:" + url + L"\n" |   503       L"Begin main navigation url:" + url + L"\n" | 
|   505       L"========================================================================
      ========") |   504       L"========================================================================
      ========") | 
|   506  |   505  | 
|   507 #ifdef ENABLE_DEBUG_RESULT |   506 #ifdef ENABLE_DEBUG_RESULT | 
|   508       CPluginDebug::DebugResultDomain(url); |   507       CPluginDebug::DebugResultDomain(url); | 
|   509 #endif |   508 #endif | 
|   510       UpdateStatusBar(); |   509       UpdateStatusBar(); | 
|   511     } |   510     } | 
|   512     else |   511     else | 
|   513     { |   512     { | 
|   514       DEBUG_NAVI(L"Navi::Begin navigation url:" + url) |   513       DEBUG_NAVI(L"Navi::Begin navigation url:" + url) | 
|   515       m_tab->CacheFrame(url); |   514       m_data->tab->CacheFrame(url); | 
|   516     } |   515     } | 
|   517   } |   516   } | 
|   518   catch (...) |   517   catch (...) | 
|   519   { |   518   { | 
|   520   } |   519   } | 
|   521 } |   520 } | 
|   522  |   521  | 
|   523 // Entry point |   522 // Entry point | 
|   524 void STDMETHODCALLTYPE CPluginClass::OnDownloadComplete() |   523 void STDMETHODCALLTYPE CPluginClass::OnDownloadComplete() | 
|   525 { |   524 { | 
|   526   try |   525   try | 
|   527   { |   526   { | 
|   528     DEBUG_NAVI(L"Navi::Download Complete") |   527     DEBUG_NAVI(L"Navi::Download Complete") | 
|   529     ATL::CComPtr<IWebBrowser2> browser = GetBrowser(); |   528     ATL::CComPtr<IWebBrowser2> browser = GetBrowser(); | 
|   530     if (browser) |   529     if (browser) | 
|   531     { |   530     { | 
|   532       m_tab->OnDownloadComplete(browser); |   531       m_data->tab->OnDownloadComplete(browser); | 
|   533     } |   532     } | 
|   534   } |   533   } | 
|   535   catch (...) |   534   catch (...) | 
|   536   { |   535   { | 
|   537   } |  | 
|   538 } |  | 
|   539  |  | 
|   540 // Entry point |  | 
|   541 void STDMETHODCALLTYPE CPluginClass::OnDocumentComplete(IDispatch* frameBrowserD
      isp, VARIANT* /*urlOrPidl*/) |  | 
|   542 { |  | 
|   543   try |  | 
|   544   { |  | 
|   545     DEBUG_NAVI(L"Navi::Document Complete"); |  | 
|   546     ATL::CComQIPtr<IWebBrowser2> webBrowser2 = frameBrowserDisp; |  | 
|   547     if (!webBrowser2) |  | 
|   548     { |  | 
|   549       return; |  | 
|   550     } |  | 
|   551     std::wstring frameSrc = GetLocationUrl(*webBrowser2); |  | 
|   552     UnescapeUrl(frameSrc); |  | 
|   553     bool isRootPageBrowser = GetBrowser().IsEqualObject(webBrowser2); |  | 
|   554     m_tab->OnDocumentComplete(webBrowser2, frameSrc, isRootPageBrowser); |  | 
|   555   } |  | 
|   556   catch (...) |  | 
|   557   { |  | 
|   558   } |   536   } | 
|   559 } |   537 } | 
|   560  |   538  | 
|   561 // Entry point |   539 // Entry point | 
|   562 void STDMETHODCALLTYPE CPluginClass::OnWindowStateChanged(unsigned long flags, u
      nsigned long validFlagsMask) |   540 void STDMETHODCALLTYPE CPluginClass::OnWindowStateChanged(unsigned long flags, u
      nsigned long validFlagsMask) | 
|   563 { |   541 { | 
|   564   try |   542   try | 
|   565   { |   543   { | 
|   566     DEBUG_GENERAL(L"WindowStateChanged (check tab changed)"); |   544     DEBUG_GENERAL(L"WindowStateChanged (check tab changed)"); | 
|   567     bool newtabshown = validFlagsMask == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OL
      ECMDIDF_WINDOWSTATE_ENABLED) |   545     bool newtabshown = validFlagsMask == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OL
      ECMDIDF_WINDOWSTATE_ENABLED) | 
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   980       } |   958       } | 
|   981     } |   959     } | 
|   982   } |   960   } | 
|   983   s_criticalSectionLocal.Unlock(); |   961   s_criticalSectionLocal.Unlock(); | 
|   984  |   962  | 
|   985   return result; |   963   return result; | 
|   986 } |   964 } | 
|   987  |   965  | 
|   988 CPluginTab* CPluginClass::GetTab() |   966 CPluginTab* CPluginClass::GetTab() | 
|   989 { |   967 { | 
|   990   return m_tab; |   968   return m_data->tab.get(); | 
|   991 } |   969 } | 
|   992  |   970  | 
|   993 CPluginTab* CPluginClass::GetTab(DWORD dwThreadId) |   971 CPluginTab* CPluginClass::GetTab(DWORD dwThreadId) | 
|   994 { |   972 { | 
|   995   CPluginTab* tab = NULL; |   973   CPluginTab* tab = NULL; | 
|   996  |   974  | 
|   997   s_criticalSectionLocal.Lock(); |   975   s_criticalSectionLocal.Lock(); | 
|   998   { |   976   { | 
|   999     std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(dw
      ThreadId); |   977     std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(dw
      ThreadId); | 
|  1000     if (it != s_threadInstances.end()) |   978     if (it != s_threadInstances.end()) | 
|  1001     { |   979     { | 
|  1002       tab = it->second->m_tab; |   980       tab = it->second->m_data->tab.get(); | 
|  1003     } |   981     } | 
|  1004   } |   982   } | 
|  1005   s_criticalSectionLocal.Unlock(); |   983   s_criticalSectionLocal.Unlock(); | 
|  1006  |   984  | 
|  1007   return tab; |   985   return tab; | 
|  1008 } |   986 } | 
|  1009  |   987  | 
|  1010  |   988  | 
|  1011 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O
      LECMD prgCmds[], OLECMDTEXT* pCmdText) |   989 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O
      LECMD prgCmds[], OLECMDTEXT* pCmdText) | 
|  1012 { |   990 { | 
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1221  |  1199  | 
|  1222 STDMETHODIMP CPluginClass::Exec(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, V
      ARIANTARG*) |  1200 STDMETHODIMP CPluginClass::Exec(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, V
      ARIANTARG*) | 
|  1223 { |  1201 { | 
|  1224   HWND hBrowserWnd = GetBrowserHWND(); |  1202   HWND hBrowserWnd = GetBrowserHWND(); | 
|  1225   if (!hBrowserWnd) |  1203   if (!hBrowserWnd) | 
|  1226   { |  1204   { | 
|  1227     return E_FAIL; |  1205     return E_FAIL; | 
|  1228   } |  1206   } | 
|  1229  |  1207  | 
|  1230   // Create menu |  1208   // Create menu | 
|  1231   HMENU hMenu = CreatePluginMenu(m_tab->GetDocumentUrl()); |  1209   HMENU hMenu = CreatePluginMenu(m_data->tab->GetDocumentUrl()); | 
|  1232   if (!hMenu) |  1210   if (!hMenu) | 
|  1233   { |  1211   { | 
|  1234     return E_FAIL; |  1212     return E_FAIL; | 
|  1235   } |  1213   } | 
|  1236  |  1214  | 
|  1237   // Check if button in toolbar was pressed |  1215   // Check if button in toolbar was pressed | 
|  1238   int nIDCommand = -1; |  1216   int nIDCommand = -1; | 
|  1239   BOOL bRightAlign = FALSE; |  1217   BOOL bRightAlign = FALSE; | 
|  1240  |  1218  | 
|  1241   POINT pt; |  1219   POINT pt; | 
| (...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1619   if (m_hPaneWnd == NULL) |  1597   if (m_hPaneWnd == NULL) | 
|  1620   { |  1598   { | 
|  1621     CreateStatusBarPane(); |  1599     CreateStatusBarPane(); | 
|  1622   } |  1600   } | 
|  1623   if ((m_hPaneWnd != NULL) && !::InvalidateRect(m_hPaneWnd, NULL, FALSE)) |  1601   if ((m_hPaneWnd != NULL) && !::InvalidateRect(m_hPaneWnd, NULL, FALSE)) | 
|  1624   { |  1602   { | 
|  1625       DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_INVALID
      ATE_STATUSBAR, "Class::Invalidate statusbar"); |  1603       DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_INVALID
      ATE_STATUSBAR, "Class::Invalidate statusbar"); | 
|  1626   } |  1604   } | 
|  1627 } |  1605 } | 
|  1628  |  1606  | 
|  1629  |  | 
|  1630 void CPluginClass::Unadvise() |  1607 void CPluginClass::Unadvise() | 
|  1631 { |  1608 { | 
|  1632   s_criticalSectionLocal.Lock(); |  1609   s_criticalSectionLocal.Lock(); | 
|  1633   { |  1610   { | 
|  1634     if (m_isAdvised) |  1611     if (m_isAdvised) | 
|  1635     { |  1612     { | 
|  1636       HRESULT hr = DispEventUnadvise(GetBrowser()); |  1613       HRESULT hr = DispEventUnadvise(GetBrowser()); | 
|  1637       if (FAILED(hr)) |  1614       if (FAILED(hr)) | 
|  1638       { |  1615       { | 
|  1639         DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_UNADVIS
      E, "Class::Unadvise - Unadvise"); |  1616         DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_UNADVIS
      E, "Class::Unadvise - Unadvise"); | 
|  1640       } |  1617       } | 
|  1641       m_isAdvised = false; |  1618       m_isAdvised = false; | 
|  1642     } |  1619     } | 
|  1643   } |  1620   } | 
|  1644   s_criticalSectionLocal.Unlock(); |  1621   s_criticalSectionLocal.Unlock(); | 
|  1645 } |  1622 } | 
|  1646  |  1623  | 
 |  1624 void CPluginClass::EnsureWebBrowserConnected(const ATL::CComPtr<IWebBrowser2>& w
      ebBrowser) | 
 |  1625 { | 
 |  1626   auto it = m_data->connectedWebBrowsersCache.find(webBrowser); | 
 |  1627   if (it != m_data->connectedWebBrowsersCache.end()) | 
 |  1628   { | 
 |  1629     return; | 
 |  1630   } | 
 |  1631   ATL::CComObject<WebBrowserEventsListener>* listenerImpl = nullptr; | 
 |  1632   if (FAILED(ATL::CComObject<WebBrowserEventsListener>::CreateInstance(&listener
      Impl))) | 
 |  1633   { | 
 |  1634     return; | 
 |  1635   } | 
 |  1636   ATL::CComPtr<IUnknown> listenerRefCounterGuard(listenerImpl->GetUnknown()); | 
 |  1637   std::weak_ptr<Data> dataForCapturing = m_data; | 
 |  1638   auto onListenerDestroy = [webBrowser, dataForCapturing] | 
 |  1639   { | 
 |  1640     if (auto data = dataForCapturing.lock()) | 
 |  1641     { | 
 |  1642       data->connectedWebBrowsersCache.erase(webBrowser); | 
 |  1643     } | 
 |  1644   }; | 
 |  1645   if (FAILED(listenerImpl->Init(webBrowser, onListenerDestroy))) | 
 |  1646   { | 
 |  1647     return; | 
 |  1648   } | 
 |  1649   listenerImpl->reloaded = [webBrowser, dataForCapturing] | 
 |  1650   { | 
 |  1651     if (auto data = dataForCapturing.lock()) | 
 |  1652     { | 
 |  1653       auto frameSrc = GetLocationUrl(*webBrowser); | 
 |  1654       UnescapeUrl(frameSrc); | 
 |  1655       data->tab->OnDocumentComplete(webBrowser, frameSrc, data->webBrowser2.IsEq
      ualObject(webBrowser)); | 
 |  1656     } | 
 |  1657   }; | 
 |  1658   m_data->connectedWebBrowsersCache.emplace(webBrowser, listenerImpl); | 
 |  1659 } | 
 |  1660  | 
|  1647 HICON CPluginClass::GetIcon(int type) |  1661 HICON CPluginClass::GetIcon(int type) | 
|  1648 { |  1662 { | 
|  1649   HICON icon = NULL; |  1663   HICON icon = NULL; | 
|  1650  |  1664  | 
|  1651   s_criticalSectionLocal.Lock(); |  1665   s_criticalSectionLocal.Lock(); | 
|  1652   { |  1666   { | 
|  1653     if (!s_hIcons[type]) |  1667     if (!s_hIcons[type]) | 
|  1654     { |  1668     { | 
|  1655       std::wstring imageToLoad = L"#"; |  1669       std::wstring imageToLoad = L"#"; | 
|  1656       imageToLoad += std::to_wstring(s_hIconTypes[type]); |  1670       imageToLoad += std::to_wstring(s_hIconTypes[type]); | 
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1733           s_criticalSectionLocal.Unlock(); |  1747           s_criticalSectionLocal.Unlock(); | 
|  1734  |  1748  | 
|  1735         } |  1749         } | 
|  1736       } |  1750       } | 
|  1737     } |  1751     } | 
|  1738  |  1752  | 
|  1739     hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); |  1753     hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); | 
|  1740   } |  1754   } | 
|  1741   return hTabWnd; |  1755   return hTabWnd; | 
|  1742 } |  1756 } | 
| OLD | NEW |