OLD | NEW |
1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
2 | 2 |
3 #include "PluginSettings.h" | 3 #include "PluginSettings.h" |
4 #include "PluginSystem.h" | 4 #include "PluginSystem.h" |
5 #include "PluginFilter.h" | 5 #include "PluginFilter.h" |
6 #include "PluginClientFactory.h" | 6 #include "PluginClientFactory.h" |
7 #include "PluginDictionary.h" | 7 #include "PluginDictionary.h" |
8 #include "PluginHttpRequest.h" | 8 #include "PluginHttpRequest.h" |
9 #include "PluginMutex.h" | 9 #include "PluginMutex.h" |
10 #include "PluginClass.h" | 10 #include "PluginClass.h" |
11 | 11 |
12 #include "AdblockPlusClient.h" | 12 #include "AdblockPlusClient.h" |
13 | 13 |
14 | 14 |
15 CAdblockPlusClient* CAdblockPlusClient::s_instance = NULL; | 15 CAdblockPlusClient* CAdblockPlusClient::s_instance = NULL; |
16 | 16 |
17 | 17 |
18 CAdblockPlusClient::CAdblockPlusClient() : CPluginClientBase() | 18 CAdblockPlusClient::CAdblockPlusClient() : CPluginClientBase() |
19 { | 19 { |
20 m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); | 20 m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); |
| 21 fileReader = std::auto_ptr<LibFileReader>(new LibFileReader()); |
| 22 errorCallback = std::auto_ptr<CerrErrorCallback>(new CerrErrorCallback()); |
| 23 jsEngine = std::auto_ptr<AdblockPlus::JsEngine>(new AdblockPlus::JsEngine(file
Reader.get(), errorCallback.get())); |
| 24 filterEngine = std::auto_ptr<AdblockPlus::FilterEngine>(new AdblockPlus::Filte
rEngine(*jsEngine)); |
21 } | 25 } |
22 CAdblockPlusClient::~CAdblockPlusClient() | 26 CAdblockPlusClient::~CAdblockPlusClient() |
23 { | 27 { |
24 s_instance = NULL; | 28 s_instance = NULL; |
25 } | 29 } |
26 | 30 |
27 | 31 |
28 CAdblockPlusClient* CAdblockPlusClient::GetInstance() | 32 CAdblockPlusClient* CAdblockPlusClient::GetInstance() |
29 { | 33 { |
30 CAdblockPlusClient* instance = NULL; | 34 CAdblockPlusClient* instance = NULL; |
31 | 35 |
32 s_criticalSectionLocal.Lock(); | 36 s_criticalSectionLocal.Lock(); |
33 { | 37 { |
34 if (!s_instance) | 38 if (!s_instance) |
35 { | 39 { |
36 CAdblockPlusClient* client = new CAdblockPlusClient(); | 40 CAdblockPlusClient* client = new CAdblockPlusClient(); |
37 | 41 |
38 s_instance = client; | 42 s_instance = client; |
39 } | 43 } |
40 | 44 |
41 instance = s_instance; | 45 instance = s_instance; |
42 } | 46 } |
43 s_criticalSectionLocal.Unlock(); | 47 s_criticalSectionLocal.Unlock(); |
44 | 48 |
45 return instance; | 49 return instance; |
46 } | 50 } |
47 | 51 |
| 52 bool CAdblockPlusClient::LoadFilters() |
| 53 { |
| 54 return m_filter->LoadHideFilters(filterEngine->GetElementHidingRules()); |
| 55 } |
| 56 |
| 57 AdblockPlus::FilterEngine* CAdblockPlusClient::GetFilterEngine() |
| 58 { |
| 59 return filterEngine.get(); |
| 60 } |
48 | 61 |
49 bool CAdblockPlusClient::ShouldBlock(CString src, int contentType, const CString
& domain, bool addDebug) | 62 bool CAdblockPlusClient::ShouldBlock(CString src, int contentType, const CString
& domain, bool addDebug) |
50 { | 63 { |
51 bool isBlocked = false; | 64 bool isBlocked = false; |
52 | 65 |
53 bool isCached = false; | 66 bool isCached = false; |
54 | 67 |
55 CPluginSettings* settings = CPluginSettings::GetInstance(); | 68 CPluginSettings* settings = CPluginSettings::GetInstance(); |
56 | 69 |
57 m_criticalSectionCache.Lock(); | 70 m_criticalSectionCache.Lock(); |
(...skipping 25 matching lines...) Expand all Loading... |
83 m_cacheBlockedSources[src] = isBlocked; | 96 m_cacheBlockedSources[src] = isBlocked; |
84 } | 97 } |
85 m_criticalSectionCache.Unlock(); | 98 m_criticalSectionCache.Unlock(); |
86 } | 99 } |
87 } | 100 } |
88 | 101 |
89 | 102 |
90 return isBlocked; | 103 return isBlocked; |
91 } | 104 } |
92 | 105 |
93 void CAdblockPlusClient::RequestFilterDownload(const CString& filter, const CStr
ing& filterPath) | |
94 { | |
95 DEBUG_GENERAL(L"*** Requesting filter download:" + filter) | |
96 | |
97 m_criticalSectionFilter.Lock(); | |
98 { | |
99 m_filterDownloads.insert(std::make_pair(filter, filterPath)); | |
100 } | |
101 m_criticalSectionFilter.Unlock(); | |
102 } | |
103 | |
104 | |
105 bool CAdblockPlusClient::DownloadFirstMissingFilter() | |
106 { | |
107 bool isDownloaded = false; | |
108 | |
109 CString filterFilename; | |
110 CString filterDownloadPath; | |
111 | |
112 m_criticalSectionFilter.Lock(); | |
113 { | |
114 TFilterFileList::iterator it = m_filterDownloads.begin(); | |
115 if (it != m_filterDownloads.end()) | |
116 { | |
117 filterFilename = it->first; | |
118 filterDownloadPath = it->second; | |
119 | |
120 m_filterDownloads.erase(it); | |
121 } | |
122 } | |
123 m_criticalSectionFilter.Unlock(); | |
124 | |
125 if (!filterFilename.IsEmpty() && m_filter->DownloadFilterFile(filterDownloadPa
th, filterFilename)) | |
126 { | |
127 isDownloaded = true; | |
128 | |
129 CPluginSettings* settings = CPluginSettings::GetInstance(); | |
130 | |
131 settings->IncrementTabVersion(SETTING_TAB_FILTER_VERSION); | |
132 } | |
133 | |
134 return isDownloaded; | |
135 } | |
136 | |
137 | |
138 //in this method we read the filter that are in the persistent storage | |
139 //then we read them and use these to create a new filterclass | |
140 | |
141 void CAdblockPlusClient::ReadFilters() | |
142 { | |
143 CPluginSettings* settings = CPluginSettings::GetInstance(); | |
144 | |
145 // Check existence of filter file | |
146 // if (settings->IsMainProcess()) | |
147 // { | |
148 // CPluginFilter::CreateFilters(); | |
149 // } | |
150 | |
151 TFilterFileList filterFileNames; | |
152 | |
153 TFilterUrlList filters = settings->GetFilterUrlList(); | |
154 std::map<CString, CString> filterFileNameList = settings->GetFilterFileNamesLi
st(); | |
155 | |
156 // Remember first entry in the map, is the filename, second is the version of
the filter | |
157 for (TFilterUrlList::iterator it = filters.begin(); it != filters.end(); ++it) | |
158 { | |
159 DEBUG_FILTER(L"Filter::ReadFilters - adding url:" + it->first) | |
160 | |
161 CString filename = ""; | |
162 if (filterFileNameList.find(it->first) != filterFileNameList.end() ) | |
163 { | |
164 filename = filterFileNameList.find(it->first)->second; | |
165 } | |
166 else | |
167 { | |
168 filename = it->first.Right(it->first.GetLength() - it->first.ReverseFind('
/') - 1); | |
169 } | |
170 filterFileNames.insert(std::make_pair(filename, it->first)); | |
171 } | |
172 | |
173 // Create our filter class which can be used from now on | |
174 std::auto_ptr<CPluginFilter> filter = std::auto_ptr<CPluginFilter>(new CPlugin
Filter(filterFileNames, CPluginSettings::GetDataPath())); | |
175 | |
176 m_criticalSectionFilter.Lock(); | |
177 { | |
178 m_filter = filter; | |
179 } | |
180 m_criticalSectionFilter.Unlock(); | |
181 | |
182 ClearWhiteListCache(); | |
183 } | |
184 | |
185 | |
186 bool CAdblockPlusClient::IsElementHidden(const CString& tag, IHTMLElement* pEl,
const CString& domain, const CString& indent) | 106 bool CAdblockPlusClient::IsElementHidden(const CString& tag, IHTMLElement* pEl,
const CString& domain, const CString& indent) |
187 { | 107 { |
188 bool isHidden; | 108 bool isHidden; |
189 m_criticalSectionFilter.Lock(); | 109 m_criticalSectionFilter.Lock(); |
190 { | 110 { |
191 isHidden = m_filter.get() && m_filter->IsElementHidden(tag, pEl, domain, ind
ent); | 111 isHidden = m_filter.get() && m_filter->IsElementHidden(tag, pEl, domain, ind
ent); |
192 } | 112 } |
193 m_criticalSectionFilter.Unlock(); | 113 m_criticalSectionFilter.Unlock(); |
194 return isHidden; | 114 return isHidden; |
195 } | 115 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 BYTE version[50]; | 147 BYTE version[50]; |
228 cbData = 50; | 148 cbData = 50; |
229 status = RegQueryValueEx(hKey, L"Version", NULL, &type, (BYTE*)version, &cbDat
a); | 149 status = RegQueryValueEx(hKey, L"Version", NULL, &type, (BYTE*)version, &cbDat
a); |
230 if (status != 0) | 150 if (status != 0) |
231 { | 151 { |
232 return 0; | 152 return 0; |
233 } | 153 } |
234 RegCloseKey(hKey); | 154 RegCloseKey(hKey); |
235 return (int)(version[0] - 48); | 155 return (int)(version[0] - 48); |
236 } | 156 } |
OLD | NEW |