Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/FilterEngine.cpp

Issue 10100009: FilterEngine API improvements (Closed)
Patch Set: Created April 4, 2013, 5:04 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/FilterEngine.cpp
===================================================================
--- a/src/FilterEngine.cpp
+++ b/src/FilterEngine.cpp
@@ -1,78 +1,159 @@
#include <AdblockPlus.h>
using namespace AdblockPlus;
#if !FILTER_ENGINE_STUBS
extern const char* jsSources[];
#endif
-Subscription::Subscription(const std::string& url, const std::string& title)
- : url(url), title(title)
+#if FILTER_ENGINE_STUBS
+Subscription::Subscription(FilterEngine& filterEngine, const std::string& url)
+ : filterEngine(filterEngine)
+{
+ properties["url"] = url;
+}
+#else
+Subscription::Subscription()
+{
+}
+#endif
+
+const std::string Subscription::GetProperty(const std::string& name) const
+{
+#if FILTER_ENGINE_STUBS
+ std::map<std::string,std::string>::const_iterator it = properties.find(name);
+ if (it == properties.end())
+ return "";
+ else
+ return it->second;
+#endif
+}
+
+int Subscription::GetIntProperty(const std::string& name) const
+{
+#if FILTER_ENGINE_STUBS
+ std::map<std::string,int>::const_iterator it = intProperties.find(name);
+ if (it == intProperties.end())
+ return 0;
+ else
+ return it->second;
+#endif
+}
+
+void Subscription::SetProperty(const std::string& name, const std::string& value)
+{
+#if FILTER_ENGINE_STUBS
+ properties[name] = value;
+#endif
+}
+
+void Subscription::SetIntProperty(const std::string& name, int value)
+{
+#if FILTER_ENGINE_STUBS
+ intProperties[name] = value;
+#endif
+}
+
+bool Subscription::IsListed() const
+{
+#if FILTER_ENGINE_STUBS
+ for (std::vector<Subscription*>::iterator it = filterEngine.listedSubscriptions.begin();
+ it != filterEngine.listedSubscriptions.end(); ++it)
+ {
+ if (*it == this)
+ return true;
+ }
+ return false;
+#endif
+}
+
+void Subscription::AddToList()
+{
+#if FILTER_ENGINE_STUBS
+ if (!IsListed())
+ filterEngine.listedSubscriptions.push_back(this);
+#endif
+}
+
+void Subscription::RemoveFromList()
+{
+ for (std::vector<Subscription*>::iterator it = filterEngine.listedSubscriptions.begin();
+ it != filterEngine.listedSubscriptions.end();)
+ {
+ if (*it == this)
+ it = filterEngine.listedSubscriptions.erase(it);
+ else
+ it++;
+ }
+}
+
+void Subscription::UpdateFilters()
{
}
FilterEngine::FilterEngine(JsEngine& jsEngine) : jsEngine(jsEngine)
{
#if !FILTER_ENGINE_STUBS
for (int i = 0; jsSources[i] && jsSources[i + 1]; i += 2)
jsEngine.Evaluate(jsSources[i + 1], jsSources[i]);
#endif
}
-void FilterEngine::AddSubscription(Subscription subscription)
+Subscription& FilterEngine::GetSubscription(const std::string& url)
{
- subscriptions.push_back(subscription);
+#if FILTER_ENGINE_STUBS
+ std::map<std::string,Subscription*>::const_iterator it = knownSubscriptions.find(url);
+ if (it != knownSubscriptions.end())
+ return *it->second;
+
+ Subscription* result = new Subscription(*this, url);
+ knownSubscriptions[url] = result;
+ return *result;
+#endif
}
-void FilterEngine::RemoveSubscription(const Subscription& subscription)
+const std::vector<Subscription*>& FilterEngine::GetListedSubscriptions() const
{
- for (std::vector<Subscription>::iterator it = subscriptions.begin();
- it != subscriptions.end();)
- if (it->url == subscription.url)
- it = subscriptions.erase(it);
- else
- it++;
+#if FILTER_ENGINE_STUBS
+ return listedSubscriptions;
+#endif
}
-const Subscription* FilterEngine::FindSubscription(const std::string& url) const
+void FilterEngine::FetchAvailableSubscriptions(SubscriptionsCallback callback)
{
- for (std::vector<Subscription>::const_iterator it = subscriptions.begin();
- it != subscriptions.end(); it++)
- if (it->url == url)
- return &(*it);
- return 0;
-}
+#if FILTER_ENGINE_STUBS
+ std::vector<Subscription*> availableSubscriptions;
-const std::vector<Subscription>& FilterEngine::GetSubscriptions() const
-{
- return subscriptions;
-}
+ Subscription& subscription1 = GetSubscription("https://easylist-downloads.adblockplus.org/easylist.txt");
+ subscription1.SetProperty("title", "EasyList");
+ availableSubscriptions.push_back(&subscription1);
-void FilterEngine::UpdateSubscriptionFilters(const Subscription& subscription)
-{
-}
+ Subscription& subscription2 = GetSubscription("https://easylist-downloads.adblockplus.org/easylistgermany+easylist.txt");
+ subscription2.SetProperty("title", "EasyList Germany+EasyList");
+ availableSubscriptions.push_back(&subscription2);
-std::vector<Subscription> FilterEngine::FetchAvailableSubscriptions()
-{
- std::vector<Subscription> availableSubscriptions;
- availableSubscriptions.push_back(Subscription("https://easylist-downloads.adblockplus.org/easylist.txt", "EasyList"));
- availableSubscriptions.push_back(Subscription("https://easylist-downloads.adblockplus.org/easylistgermany+easylist.txt", "EasyList Germany+EasyList"));
- return availableSubscriptions;
+ callback(availableSubscriptions);
+#endif
}
bool FilterEngine::Matches(const std::string& url,
- const std::string& contentType) const
+ const std::string& contentType,
+ const std::string& documentUrl) const
Oleksandr 2013/04/05 07:31:51 How about returning the filter definition rule tha
Wladimir Palant 2013/04/05 12:15:16 Yes, I want to do that in the next step, while imp
{
+#if FILTER_ENGINE_STUBS
//For test on http://simple-adblock.com/faq/testing-your-adblocker/
return url.find("adbanner.gif") != std::string::npos;
+#endif
}
std::vector<std::string> FilterEngine::GetElementHidingRules() const
{
+#if FILTER_ENGINE_STUBS
std::vector<std::string> hidingRules;
hidingRules.push_back("###ad");
hidingRules.push_back("##.ad");
//For test on http://simple-adblock.com/faq/testing-your-adblocker/
hidingRules.push_back("##.ad_300x250");
return hidingRules;
+#endif
}

Powered by Google App Engine
This is Rietveld