| OLD | NEW |
| 1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
| 2 | 2 |
| 3 // Internet / FTP | 3 // Internet / FTP |
| 4 #include <wininet.h> | 4 #include <wininet.h> |
| 5 | 5 |
| 6 // IP adapter | 6 // IP adapter |
| 7 #include <iphlpapi.h> | 7 #include <iphlpapi.h> |
| 8 | 8 |
| 9 #include "PluginSettings.h" | 9 #include "PluginSettings.h" |
| 10 #include "PluginSystem.h" | 10 #include "PluginSystem.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 { | 45 { |
| 46 return domain != ABPDOMAIN && | 46 return domain != ABPDOMAIN && |
| 47 domain != USERS_HOST && | 47 domain != USERS_HOST && |
| 48 domain != L"about:blank" && | 48 domain != L"about:blank" && |
| 49 domain != L"about:tabs" && | 49 domain != L"about:tabs" && |
| 50 domain.Find(L"javascript:") != 0 && | 50 domain.Find(L"javascript:") != 0 && |
| 51 !domain.IsEmpty(); | 51 !domain.IsEmpty(); |
| 52 } | 52 } |
| 53 | 53 |
| 54 | 54 |
| 55 CString CPluginClientBase::ExtractDomain(const CString& url) | |
| 56 { | |
| 57 int pos = 0; | |
| 58 CString http = url.Find('/',pos) >= 0 ? url.Tokenize(L"/", pos) : L""; | |
| 59 CString domain = url.Tokenize(L"/", pos); | |
| 60 | |
| 61 domain.MakeLower(); | |
| 62 | |
| 63 return domain; | |
| 64 } | |
| 65 | |
| 66 | |
| 67 CString& CPluginClientBase::UnescapeUrl(CString& url) | 55 CString& CPluginClientBase::UnescapeUrl(CString& url) |
| 68 { | 56 { |
| 69 CString unescapedUrl; | 57 CString unescapedUrl; |
| 70 DWORD cb = 2048; | 58 DWORD cb = 2048; |
| 71 | 59 |
| 72 if (SUCCEEDED(::UrlUnescape(url.GetBuffer(), unescapedUrl.GetBufferSetLength(c
b), &cb, 0))) | 60 if (SUCCEEDED(::UrlUnescape(url.GetBuffer(), unescapedUrl.GetBufferSetLength(c
b), &cb, 0))) |
| 73 { | 61 { |
| 74 unescapedUrl.ReleaseBuffer(); | 62 unescapedUrl.ReleaseBuffer(); |
| 75 unescapedUrl.Truncate(cb); | 63 unescapedUrl.Truncate(cb); |
| 76 | 64 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 | 136 |
| 149 hasError = true; | 137 hasError = true; |
| 150 | 138 |
| 151 s_pluginErrors.erase(it); | 139 s_pluginErrors.erase(it); |
| 152 } | 140 } |
| 153 } | 141 } |
| 154 s_criticalSectionLocal.Unlock(); | 142 s_criticalSectionLocal.Unlock(); |
| 155 | 143 |
| 156 return hasError; | 144 return hasError; |
| 157 } | 145 } |
| 158 | |
| 159 // ============================================================================ | |
| 160 // Whitelisting | |
| 161 // ============================================================================ | |
| 162 | |
| 163 #ifdef SUPPORT_WHITELIST | |
| 164 | |
| 165 bool CPluginClientBase::IsUrlWhiteListed(const CString& url) | |
| 166 { | |
| 167 if (url.IsEmpty()) | |
| 168 { | |
| 169 return false; | |
| 170 } | |
| 171 | |
| 172 int pos = 0; | |
| 173 CString scheme = url.Find('/',pos) >= 0 ? url.Tokenize(L"/", pos) : L""; | |
| 174 CString domain = ExtractDomain(url); | |
| 175 if (scheme == L"res:" || scheme == L"file:") | |
| 176 { | |
| 177 return true; | |
| 178 } | |
| 179 | |
| 180 // TODO: Caching whitelist entries in PluginSettings is redundant and wasteful
. We should have an engine call for IsWhitelistedDomain. | |
| 181 CPluginSettings* pluginSettings = CPluginSettings::GetInstance(); | |
| 182 pluginSettings->RefreshWhitelist(); | |
| 183 return pluginSettings->IsWhiteListedDomain(domain); | |
| 184 } | |
| 185 | |
| 186 #endif // SUPPORT_WHITELIST | |
| OLD | NEW |