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

Side by Side Diff: src/FilterEngine.cpp

Issue 10100009: FilterEngine API improvements (Closed)
Patch Set: Created April 4, 2013, 5:04 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 #include <AdblockPlus.h> 1 #include <AdblockPlus.h>
2 2
3 using namespace AdblockPlus; 3 using namespace AdblockPlus;
4 4
5 #if !FILTER_ENGINE_STUBS 5 #if !FILTER_ENGINE_STUBS
6 extern const char* jsSources[]; 6 extern const char* jsSources[];
7 #endif 7 #endif
8 8
9 Subscription::Subscription(const std::string& url, const std::string& title) 9 #if FILTER_ENGINE_STUBS
10 : url(url), title(title) 10 Subscription::Subscription(FilterEngine& filterEngine, const std::string& url)
11 : filterEngine(filterEngine)
12 {
13 properties["url"] = url;
14 }
15 #else
16 Subscription::Subscription()
17 {
18 }
19 #endif
20
21 const std::string Subscription::GetProperty(const std::string& name) const
22 {
23 #if FILTER_ENGINE_STUBS
24 std::map<std::string,std::string>::const_iterator it = properties.find(name);
25 if (it == properties.end())
26 return "";
27 else
28 return it->second;
29 #endif
30 }
31
32 int Subscription::GetIntProperty(const std::string& name) const
33 {
34 #if FILTER_ENGINE_STUBS
35 std::map<std::string,int>::const_iterator it = intProperties.find(name);
36 if (it == intProperties.end())
37 return 0;
38 else
39 return it->second;
40 #endif
41 }
42
43 void Subscription::SetProperty(const std::string& name, const std::string& value )
44 {
45 #if FILTER_ENGINE_STUBS
46 properties[name] = value;
47 #endif
48 }
49
50 void Subscription::SetIntProperty(const std::string& name, int value)
51 {
52 #if FILTER_ENGINE_STUBS
53 intProperties[name] = value;
54 #endif
55 }
56
57 bool Subscription::IsListed() const
58 {
59 #if FILTER_ENGINE_STUBS
60 for (std::vector<Subscription*>::iterator it = filterEngine.listedSubscription s.begin();
61 it != filterEngine.listedSubscriptions.end(); ++it)
62 {
63 if (*it == this)
64 return true;
65 }
66 return false;
67 #endif
68 }
69
70 void Subscription::AddToList()
71 {
72 #if FILTER_ENGINE_STUBS
73 if (!IsListed())
74 filterEngine.listedSubscriptions.push_back(this);
75 #endif
76 }
77
78 void Subscription::RemoveFromList()
79 {
80 for (std::vector<Subscription*>::iterator it = filterEngine.listedSubscription s.begin();
81 it != filterEngine.listedSubscriptions.end();)
82 {
83 if (*it == this)
84 it = filterEngine.listedSubscriptions.erase(it);
85 else
86 it++;
87 }
88 }
89
90 void Subscription::UpdateFilters()
11 { 91 {
12 } 92 }
13 93
14 FilterEngine::FilterEngine(JsEngine& jsEngine) : jsEngine(jsEngine) 94 FilterEngine::FilterEngine(JsEngine& jsEngine) : jsEngine(jsEngine)
15 { 95 {
16 #if !FILTER_ENGINE_STUBS 96 #if !FILTER_ENGINE_STUBS
17 for (int i = 0; jsSources[i] && jsSources[i + 1]; i += 2) 97 for (int i = 0; jsSources[i] && jsSources[i + 1]; i += 2)
18 jsEngine.Evaluate(jsSources[i + 1], jsSources[i]); 98 jsEngine.Evaluate(jsSources[i + 1], jsSources[i]);
19 #endif 99 #endif
20 } 100 }
21 101
22 void FilterEngine::AddSubscription(Subscription subscription) 102 Subscription& FilterEngine::GetSubscription(const std::string& url)
23 { 103 {
24 subscriptions.push_back(subscription); 104 #if FILTER_ENGINE_STUBS
105 std::map<std::string,Subscription*>::const_iterator it = knownSubscriptions.fi nd(url);
106 if (it != knownSubscriptions.end())
107 return *it->second;
108
109 Subscription* result = new Subscription(*this, url);
110 knownSubscriptions[url] = result;
111 return *result;
112 #endif
25 } 113 }
26 114
27 void FilterEngine::RemoveSubscription(const Subscription& subscription) 115 const std::vector<Subscription*>& FilterEngine::GetListedSubscriptions() const
28 { 116 {
29 for (std::vector<Subscription>::iterator it = subscriptions.begin(); 117 #if FILTER_ENGINE_STUBS
30 it != subscriptions.end();) 118 return listedSubscriptions;
31 if (it->url == subscription.url) 119 #endif
32 it = subscriptions.erase(it);
33 else
34 it++;
35 } 120 }
36 121
37 const Subscription* FilterEngine::FindSubscription(const std::string& url) const 122 void FilterEngine::FetchAvailableSubscriptions(SubscriptionsCallback callback)
38 { 123 {
39 for (std::vector<Subscription>::const_iterator it = subscriptions.begin(); 124 #if FILTER_ENGINE_STUBS
40 it != subscriptions.end(); it++) 125 std::vector<Subscription*> availableSubscriptions;
41 if (it->url == url)
42 return &(*it);
43 return 0;
44 }
45 126
46 const std::vector<Subscription>& FilterEngine::GetSubscriptions() const 127 Subscription& subscription1 = GetSubscription("https://easylist-downloads.adbl ockplus.org/easylist.txt");
47 { 128 subscription1.SetProperty("title", "EasyList");
48 return subscriptions; 129 availableSubscriptions.push_back(&subscription1);
49 }
50 130
51 void FilterEngine::UpdateSubscriptionFilters(const Subscription& subscription) 131 Subscription& subscription2 = GetSubscription("https://easylist-downloads.adbl ockplus.org/easylistgermany+easylist.txt");
52 { 132 subscription2.SetProperty("title", "EasyList Germany+EasyList");
53 } 133 availableSubscriptions.push_back(&subscription2);
54 134
55 std::vector<Subscription> FilterEngine::FetchAvailableSubscriptions() 135 callback(availableSubscriptions);
56 { 136 #endif
57 std::vector<Subscription> availableSubscriptions;
58 availableSubscriptions.push_back(Subscription("https://easylist-downloads.adbl ockplus.org/easylist.txt", "EasyList"));
59 availableSubscriptions.push_back(Subscription("https://easylist-downloads.adbl ockplus.org/easylistgermany+easylist.txt", "EasyList Germany+EasyList"));
60 return availableSubscriptions;
61 } 137 }
62 138
63 bool FilterEngine::Matches(const std::string& url, 139 bool FilterEngine::Matches(const std::string& url,
64 const std::string& contentType) const 140 const std::string& contentType,
141 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
65 { 142 {
143 #if FILTER_ENGINE_STUBS
66 //For test on http://simple-adblock.com/faq/testing-your-adblocker/ 144 //For test on http://simple-adblock.com/faq/testing-your-adblocker/
67 return url.find("adbanner.gif") != std::string::npos; 145 return url.find("adbanner.gif") != std::string::npos;
146 #endif
68 } 147 }
69 148
70 std::vector<std::string> FilterEngine::GetElementHidingRules() const 149 std::vector<std::string> FilterEngine::GetElementHidingRules() const
71 { 150 {
151 #if FILTER_ENGINE_STUBS
72 std::vector<std::string> hidingRules; 152 std::vector<std::string> hidingRules;
73 hidingRules.push_back("###ad"); 153 hidingRules.push_back("###ad");
74 hidingRules.push_back("##.ad"); 154 hidingRules.push_back("##.ad");
75 //For test on http://simple-adblock.com/faq/testing-your-adblocker/ 155 //For test on http://simple-adblock.com/faq/testing-your-adblocker/
76 hidingRules.push_back("##.ad_300x250"); 156 hidingRules.push_back("##.ad_300x250");
77 return hidingRules; 157 return hidingRules;
158 #endif
78 } 159 }
OLDNEW

Powered by Google App Engine
This is Rietveld