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-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 | 142 |
143 class ThrowingWebRequest : public AdblockPlus::IWebRequest | 143 class ThrowingWebRequest : public AdblockPlus::IWebRequest |
144 { | 144 { |
145 public: | 145 public: |
146 void GET(const std::string& url, const AdblockPlus::HeaderList& requestHeaders
, const GetCallback&) override | 146 void GET(const std::string& url, const AdblockPlus::HeaderList& requestHeaders
, const GetCallback&) override |
147 { | 147 { |
148 throw std::runtime_error("Unexpected GET: " + url); | 148 throw std::runtime_error("Unexpected GET: " + url); |
149 } | 149 } |
150 }; | 150 }; |
151 | 151 |
152 class LazyFileSystem : public AdblockPlus::IFileSystem, public AdblockPlus::File
System | 152 class LazyFileSystem : public AdblockPlus::IFileSystem |
153 { | 153 { |
154 public: | 154 public: |
155 IOBuffer Read(const std::string& path) const | 155 typedef std::function<void()> Task; |
| 156 typedef std::function<void(const Task& task)> Scheduler; |
| 157 static void ExecuteImmediately(const Task& task) |
156 { | 158 { |
157 std::string dummyData(""); | 159 if (task) |
158 if (path == "patterns.ini") | 160 task(); |
159 dummyData = "# Adblock Plus preferences\n[Subscription]\nurl=~fl~"; | |
160 else if (path == "prefs.json") | |
161 dummyData = "{}"; | |
162 return IOBuffer(dummyData.cbegin(), dummyData.cend()); | |
163 } | 161 } |
164 | 162 explicit LazyFileSystem(const Scheduler& scheduler = LazyFileSystem::ExecuteIm
mediately) |
165 void Read(const std::string& path, const ReadCallback& callback) const | 163 : scheduler(scheduler) |
166 { | |
167 std::thread([this, path, callback] | |
168 { | |
169 auto data = Read(path); | |
170 callback(std::move(data), ""); | |
171 }).detach(); | |
172 } | |
173 | |
174 void Write(const std::string& path, const IOBuffer& content) | |
175 { | 164 { |
176 } | 165 } |
177 | 166 |
178 void Write(const std::string& path, const IOBuffer& data, | 167 void Read(const std::string& path, const ReadCallback& callback) const overrid
e |
179 const Callback& callback) | |
180 { | 168 { |
181 std::thread([this, path, data, callback] | 169 scheduler([path, callback] |
182 { | 170 { |
183 Write(path, data); | 171 if (path == "patterns.ini") |
184 callback(""); | 172 { |
185 }).detach(); | 173 std::string dummyData = "# Adblock Plus preferences\n[Subscription]\nurl
=~fl~"; |
| 174 callback(IOBuffer(dummyData.cbegin(), dummyData.cend()), ""); |
| 175 } |
| 176 else if (path == "prefs.json") |
| 177 { |
| 178 std::string dummyData = "{}"; |
| 179 callback(IOBuffer(dummyData.cbegin(), dummyData.cend()), ""); |
| 180 } |
| 181 }); |
186 } | 182 } |
187 | 183 |
188 void Move(const std::string& fromPath, const std::string& toPath) | 184 void Write(const std::string& path, const IOBuffer& data, |
| 185 const Callback& callback) override |
189 { | 186 { |
190 } | 187 } |
191 | 188 |
| 189 |
192 void Move(const std::string& fromPath, const std::string& toPath, | 190 void Move(const std::string& fromPath, const std::string& toPath, |
193 const Callback& callback) | 191 const Callback& callback) override |
194 { | |
195 std::thread([this, fromPath, toPath, callback] | |
196 { | |
197 Move(fromPath, toPath); | |
198 callback(""); | |
199 }).detach(); | |
200 } | |
201 | |
202 void Remove(const std::string& path) | |
203 { | 192 { |
204 } | 193 } |
205 | 194 |
206 void Remove(const std::string& path, const Callback& callback) | 195 void Remove(const std::string& path, const Callback& callback) override |
207 { | 196 { |
208 std::thread([this, path, callback] | |
209 { | |
210 Remove(path); | |
211 callback(""); | |
212 }).detach(); | |
213 } | 197 } |
214 | 198 |
215 StatResult Stat(const std::string& path) const | 199 void Stat(const std::string& path, const StatCallback& callback) const overrid
e |
216 { | 200 { |
217 StatResult result; | 201 scheduler([path, callback] |
218 if (path == "patterns.ini") | |
219 { | 202 { |
220 result.exists = true; | 203 StatResult result; |
221 result.isFile = true; | 204 if (path == "patterns.ini") |
222 } | 205 { |
223 return result; | 206 result.exists = true; |
| 207 result.isFile = true; |
| 208 } |
| 209 callback(result, ""); |
| 210 }); |
224 } | 211 } |
225 | 212 |
226 void Stat(const std::string& path, const StatCallback& callback) const | 213 std::string Resolve(const std::string& path) const override |
227 { | |
228 std::thread([this, path, callback] | |
229 { | |
230 callback(Stat(path), ""); | |
231 }).detach(); | |
232 } | |
233 | |
234 std::string Resolve(const std::string& path) const | |
235 { | 214 { |
236 return path; | 215 return path; |
237 } | 216 } |
| 217 public: |
| 218 Scheduler scheduler; |
238 }; | 219 }; |
239 | 220 |
| 221 AdblockPlus::FilterEnginePtr CreateFilterEngine(LazyFileSystem& fileSystem, |
| 222 const AdblockPlus::JsEnginePtr& jsEngine, |
| 223 const AdblockPlus::FilterEngine::CreationParameters& creationParams = AdblockP
lus::FilterEngine::CreationParameters()); |
| 224 |
240 class NoopWebRequest : public AdblockPlus::IWebRequest | 225 class NoopWebRequest : public AdblockPlus::IWebRequest |
241 { | 226 { |
242 public: | 227 public: |
243 void GET(const std::string& url, const AdblockPlus::HeaderList& requestHeaders
, const GetCallback& callback) override | 228 void GET(const std::string& url, const AdblockPlus::HeaderList& requestHeaders
, const GetCallback& callback) override |
244 { | 229 { |
245 } | 230 } |
246 }; | 231 }; |
247 | 232 |
248 struct DelayedWebRequestTask | 233 struct DelayedWebRequestTask |
249 { | 234 { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 protected: | 274 protected: |
290 AdblockPlus::JsEnginePtr jsEngine; | 275 AdblockPlus::JsEnginePtr jsEngine; |
291 | 276 |
292 virtual void SetUp() | 277 virtual void SetUp() |
293 { | 278 { |
294 jsEngine = CreateJsEngine(); | 279 jsEngine = CreateJsEngine(); |
295 } | 280 } |
296 }; | 281 }; |
297 | 282 |
298 #endif | 283 #endif |
OLD | NEW |