Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(497)

Side by Side Diff: chrome/browser/privacy_blacklist/blacklist_manager_unittest.cc

Issue 337025: Design changes in browser/privacy_blacklist needed to integrate (Closed)
Patch Set: fixes Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/privacy_blacklist/blacklist_manager.h" 5 #include "chrome/browser/privacy_blacklist/blacklist_manager.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/scoped_temp_dir.h" 9 #include "base/scoped_temp_dir.h"
10 #include "base/thread.h" 10 #include "base/thread.h"
(...skipping 16 matching lines...) Expand all
27 ScopedTempDir temp_dir_; 27 ScopedTempDir temp_dir_;
28 28
29 DISALLOW_COPY_AND_ASSIGN(MyTestingProfile); 29 DISALLOW_COPY_AND_ASSIGN(MyTestingProfile);
30 }; 30 };
31 31
32 class TestBlacklistPathProvider : public BlacklistPathProvider { 32 class TestBlacklistPathProvider : public BlacklistPathProvider {
33 public: 33 public:
34 explicit TestBlacklistPathProvider(Profile* profile) : profile_(profile) { 34 explicit TestBlacklistPathProvider(Profile* profile) : profile_(profile) {
35 } 35 }
36 36
37 virtual std::vector<FilePath> GetBlacklistPaths() { 37 virtual std::vector<FilePath> GetPersistentBlacklistPaths() {
38 return paths_; 38 return persistent_paths_;
39 }
40
41 virtual std::vector<FilePath> GetTransientBlacklistPaths() {
42 return transient_paths_;
39 } 43 }
40 44
41 void AddPath(const FilePath& path) { 45 void AddPersistentPath(const FilePath& path) {
42 paths_.push_back(path); 46 persistent_paths_.push_back(path);
47 SendUpdateNotification();
48 }
49
50 void AddTransientPath(const FilePath& path) {
51 transient_paths_.push_back(path);
52 SendUpdateNotification();
53 }
54
55 void clear() {
56 persistent_paths_.clear();
57 transient_paths_.clear();
58 SendUpdateNotification();
59 }
60
61 private:
62 void SendUpdateNotification() {
43 NotificationService::current()->Notify( 63 NotificationService::current()->Notify(
44 NotificationType::PRIVACY_BLACKLIST_PATH_PROVIDER_UPDATED, 64 NotificationType::BLACKLIST_PATH_PROVIDER_UPDATED,
45 Source<Profile>(profile_), 65 Source<Profile>(profile_),
46 Details<BlacklistPathProvider>(this)); 66 Details<BlacklistPathProvider>(this));
47 } 67 }
48 68
49 private:
50 Profile* profile_; 69 Profile* profile_;
51 70
52 std::vector<FilePath> paths_; 71 std::vector<FilePath> persistent_paths_;
72 std::vector<FilePath> transient_paths_;
53 73
54 DISALLOW_COPY_AND_ASSIGN(TestBlacklistPathProvider); 74 DISALLOW_COPY_AND_ASSIGN(TestBlacklistPathProvider);
55 }; 75 };
56 76
57 class BlacklistManagerTest : public testing::Test { 77 class BlacklistManagerTest : public testing::Test, public NotificationObserver {
58 public: 78 public:
79 BlacklistManagerTest() : path_provider_(&profile_) {
80 }
81
59 virtual void SetUp() { 82 virtual void SetUp() {
60 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_)); 83 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_));
61 test_data_dir_ = test_data_dir_.AppendASCII("blacklist_samples"); 84 test_data_dir_ = test_data_dir_.AppendASCII("blacklist_samples");
62 } 85 }
63 86
64 virtual void TearDown() { 87 virtual void TearDown() {
65 loop_.RunAllPending(); 88 loop_.RunAllPending();
66 } 89 }
67 90
91 // NotificationObserver
92 virtual void Observe(NotificationType type,
93 const NotificationSource& source,
94 const NotificationDetails& details) {
95 MessageLoop::current()->Quit();
96 }
97
68 protected: 98 protected:
99 void WaitForBlacklistError() {
100 NotificationRegistrar registrar;
101 registrar.Add(this,
102 NotificationType::BLACKLIST_MANAGER_ERROR,
103 Source<Profile>(&profile_));
104 MessageLoop::current()->Run();
105 }
106
107 void WaitForBlacklistUpdate() {
108 NotificationRegistrar registrar;
109 registrar.Add(this,
110 NotificationType::BLACKLIST_MANAGER_BLACKLIST_READ_FINISHED,
111 Source<Profile>(&profile_));
112 MessageLoop::current()->Run();
113 }
114
69 FilePath test_data_dir_; 115 FilePath test_data_dir_;
70 116
71 MyTestingProfile profile_; 117 MyTestingProfile profile_;
118
119 TestBlacklistPathProvider path_provider_;
72 120
73 private: 121 private:
74 MessageLoop loop_; 122 MessageLoop loop_;
75 }; 123 };
76 124
77 // Returns true if |blacklist| contains a match for |url|. 125 // Returns true if |blacklist| contains a match for |url|.
78 bool BlacklistHasMatch(const Blacklist* blacklist, const char* url) { 126 bool BlacklistHasMatch(const Blacklist* blacklist, const char* url) {
79 Blacklist::Match* match = blacklist->findMatch(GURL(url)); 127 Blacklist::Match* match = blacklist->findMatch(GURL(url));
80 128
81 if (!match) 129 if (!match)
82 return false; 130 return false;
83 131
84 delete match; 132 delete match;
85 return true; 133 return true;
86 } 134 }
87 135
88 TEST_F(BlacklistManagerTest, Basic) { 136 TEST_F(BlacklistManagerTest, Basic) {
89 scoped_refptr<BlacklistManager> manager( 137 scoped_refptr<BlacklistManager> manager(
90 new BlacklistManager(&profile_, NULL)); 138 new BlacklistManager(&profile_, &path_provider_, NULL));
139 WaitForBlacklistUpdate();
91 140
92 const Blacklist* blacklist = manager->GetCompiledBlacklist(); 141 const Blacklist* blacklist = manager->GetCompiledBlacklist();
93 142 EXPECT_TRUE(blacklist);
94 // We should get an empty, but valid object.
95 ASSERT_TRUE(blacklist);
96 EXPECT_TRUE(blacklist->is_good());
97 143
98 // Repeated invocations of GetCompiledBlacklist should return the same object. 144 // Repeated invocations of GetCompiledBlacklist should return the same object.
99 EXPECT_EQ(blacklist, manager->GetCompiledBlacklist()); 145 EXPECT_EQ(blacklist, manager->GetCompiledBlacklist());
100 } 146 }
101 147
102 TEST_F(BlacklistManagerTest, BlacklistPathProvider) { 148 TEST_F(BlacklistManagerTest, BlacklistPathProvider) {
103 scoped_refptr<BlacklistManager> manager( 149 scoped_refptr<BlacklistManager> manager(
104 new BlacklistManager(&profile_, NULL)); 150 new BlacklistManager(&profile_, &path_provider_, NULL));
151 WaitForBlacklistUpdate();
105 152
106 const Blacklist* blacklist1 = manager->GetCompiledBlacklist(); 153 const Blacklist* blacklist1 = manager->GetCompiledBlacklist();
107 EXPECT_FALSE(BlacklistHasMatch(blacklist1, 154 EXPECT_FALSE(BlacklistHasMatch(blacklist1,
108 "http://host/annoying_ads/ad.jpg")); 155 "http://host/annoying_ads/ad.jpg"));
109 156
110 TestBlacklistPathProvider provider(&profile_); 157 path_provider_.AddPersistentPath(
111 manager->RegisterBlacklistPathProvider(&provider); 158 test_data_dir_.AppendASCII("annoying_ads.pbl"));
112 159 WaitForBlacklistUpdate();
113 // Blacklist should not get recompiled. 160
114 EXPECT_EQ(blacklist1, manager->GetCompiledBlacklist());
115
116 provider.AddPath(test_data_dir_.AppendASCII("annoying_ads.pbl"));
117
118 const Blacklist* blacklist2 = manager->GetCompiledBlacklist(); 161 const Blacklist* blacklist2 = manager->GetCompiledBlacklist();
119 162
120 // Added a real blacklist, the manager should recompile. 163 // Added a real blacklist, the manager should recompile.
121 EXPECT_NE(blacklist1, blacklist2); 164 EXPECT_NE(blacklist1, blacklist2);
122 EXPECT_TRUE(BlacklistHasMatch(blacklist2, "http://host/annoying_ads/ad.jpg")); 165 EXPECT_TRUE(BlacklistHasMatch(blacklist2, "http://host/annoying_ads/ad.jpg"));
123 166 EXPECT_FALSE(BlacklistHasMatch(blacklist2, "http://host/other_ads/ad.jpg"));
124 manager->UnregisterBlacklistPathProvider(&provider); 167
125 168 path_provider_.AddTransientPath(test_data_dir_.AppendASCII("other_ads.pbl"));
126 // Just unregistering the provider doesn't remove the blacklist paths 169 WaitForBlacklistUpdate();
127 // from the manager. 170
128 EXPECT_EQ(blacklist2, manager->GetCompiledBlacklist()); 171 const Blacklist* blacklist3 = manager->GetCompiledBlacklist();
172
173 // In theory blacklist2 and blacklist3 could be the same object, so we're
174 // not checking for inequality.
175 EXPECT_TRUE(BlacklistHasMatch(blacklist3, "http://host/annoying_ads/ad.jpg"));
176 EXPECT_TRUE(BlacklistHasMatch(blacklist3, "http://host/other_ads/ad.jpg"));
177
178 // Now make sure that transient blacklists don't survive after re-creating
179 // the BlacklistManager.
180 manager = NULL;
181 path_provider_.clear();
182 path_provider_.AddPersistentPath(
183 test_data_dir_.AppendASCII("annoying_ads.pbl"));
184 manager = new BlacklistManager(&profile_, &path_provider_, NULL);
185 WaitForBlacklistUpdate();
186
187 const Blacklist* blacklist4 = manager->GetCompiledBlacklist();
188
189 EXPECT_TRUE(BlacklistHasMatch(blacklist4, "http://host/annoying_ads/ad.jpg"));
190 EXPECT_FALSE(BlacklistHasMatch(blacklist4, "http://host/other_ads/ad.jpg"));
129 } 191 }
130 192
131 TEST_F(BlacklistManagerTest, RealThread) { 193 TEST_F(BlacklistManagerTest, RealThread) {
132 base::Thread backend_thread("backend_thread"); 194 base::Thread backend_thread("backend_thread");
133 backend_thread.Start(); 195 backend_thread.Start();
134 196
135 scoped_refptr<BlacklistManager> manager( 197 scoped_refptr<BlacklistManager> manager(
136 new BlacklistManager(&profile_, &backend_thread)); 198 new BlacklistManager(&profile_, &path_provider_, &backend_thread));
137 199 WaitForBlacklistUpdate();
138 // Make sure all pending tasks run.
139 backend_thread.Stop();
140 backend_thread.Start();
141 200
142 const Blacklist* blacklist1 = manager->GetCompiledBlacklist(); 201 const Blacklist* blacklist1 = manager->GetCompiledBlacklist();
143 EXPECT_FALSE(BlacklistHasMatch(blacklist1, 202 EXPECT_FALSE(BlacklistHasMatch(blacklist1,
144 "http://host/annoying_ads/ad.jpg")); 203 "http://host/annoying_ads/ad.jpg"));
145 204
146 TestBlacklistPathProvider provider(&profile_); 205 path_provider_.AddPersistentPath(
147 manager->RegisterBlacklistPathProvider(&provider); 206 test_data_dir_.AppendASCII("annoying_ads.pbl"));
148 207 WaitForBlacklistUpdate();
149 // Make sure all pending tasks run.
150 backend_thread.Stop();
151 backend_thread.Start();
152
153 // Blacklist should not get recompiled.
154 EXPECT_EQ(blacklist1, manager->GetCompiledBlacklist());
155
156 provider.AddPath(test_data_dir_.AppendASCII("annoying_ads.pbl"));
157
158 // Make sure all pending tasks run.
159 backend_thread.Stop();
160 backend_thread.Start();
161 208
162 const Blacklist* blacklist2 = manager->GetCompiledBlacklist(); 209 const Blacklist* blacklist2 = manager->GetCompiledBlacklist();
163 210
164 // Added a real blacklist, the manager should recompile. 211 // Added a real blacklist, the manager should recompile.
165 EXPECT_NE(blacklist1, blacklist2); 212 EXPECT_NE(blacklist1, blacklist2);
166 EXPECT_TRUE(BlacklistHasMatch(blacklist2, "http://host/annoying_ads/ad.jpg")); 213 EXPECT_TRUE(BlacklistHasMatch(blacklist2, "http://host/annoying_ads/ad.jpg"));
167
168 manager->UnregisterBlacklistPathProvider(&provider);
169
170 // Make sure all pending tasks run.
171 backend_thread.Stop();
172 backend_thread.Start();
173
174 // Just unregistering the provider doesn't remove the blacklist paths
175 // from the manager.
176 EXPECT_EQ(blacklist2, manager->GetCompiledBlacklist());
177 }
178
179 TEST_F(BlacklistManagerTest, CompiledBlacklistStaysOnDisk) {
180 {
181 scoped_refptr<BlacklistManager> manager(
182 new BlacklistManager(&profile_, NULL));
183
184 TestBlacklistPathProvider provider(&profile_);
185 manager->RegisterBlacklistPathProvider(&provider);
186 provider.AddPath(test_data_dir_.AppendASCII("annoying_ads.pbl"));
187 const Blacklist* blacklist = manager->GetCompiledBlacklist();
188 EXPECT_TRUE(BlacklistHasMatch(blacklist,
189 "http://host/annoying_ads/ad.jpg"));
190 manager->UnregisterBlacklistPathProvider(&provider);
191 }
192
193 {
194 scoped_refptr<BlacklistManager> manager(
195 new BlacklistManager(&profile_, NULL));
196
197 // Make sure we read the compiled blacklist from disk and don't even touch
198 // the paths providers.
199 const Blacklist* blacklist = manager->GetCompiledBlacklist();
200 EXPECT_TRUE(BlacklistHasMatch(blacklist,
201 "http://host/annoying_ads/ad.jpg"));
202 }
203 } 214 }
204 215
205 TEST_F(BlacklistManagerTest, BlacklistPathReadError) { 216 TEST_F(BlacklistManagerTest, BlacklistPathReadError) {
206 scoped_refptr<BlacklistManager> manager( 217 scoped_refptr<BlacklistManager> manager(
207 new BlacklistManager(&profile_, NULL)); 218 new BlacklistManager(&profile_, &path_provider_, NULL));
208 219 WaitForBlacklistUpdate();
209 TestBlacklistPathProvider provider(&profile_);
210 manager->RegisterBlacklistPathProvider(&provider);
211 220
212 FilePath bogus_path(test_data_dir_.AppendASCII("does_not_exist_randomness")); 221 FilePath bogus_path(test_data_dir_.AppendASCII("does_not_exist_randomness"));
213 ASSERT_FALSE(file_util::PathExists(bogus_path)); 222 ASSERT_FALSE(file_util::PathExists(bogus_path));
214 provider.AddPath(bogus_path); 223 path_provider_.AddPersistentPath(bogus_path);
215 224 WaitForBlacklistError();
225
216 const Blacklist* blacklist = manager->GetCompiledBlacklist(); 226 const Blacklist* blacklist = manager->GetCompiledBlacklist();
217 227 EXPECT_TRUE(blacklist);
218 // We should get an empty, but valid object.
219 ASSERT_TRUE(blacklist);
220 EXPECT_TRUE(blacklist->is_good());
221
222 manager->UnregisterBlacklistPathProvider(&provider);
223 } 228 }
224 229
225 TEST_F(BlacklistManagerTest, CompiledBlacklistReadError) { 230 TEST_F(BlacklistManagerTest, CompiledBlacklistReadError) {
226 FilePath compiled_blacklist_path; 231 FilePath compiled_blacklist_path;
227 232
228 { 233 {
229 scoped_refptr<BlacklistManager> manager( 234 scoped_refptr<BlacklistManager> manager(
230 new BlacklistManager(&profile_, NULL)); 235 new BlacklistManager(&profile_, &path_provider_, NULL));
236 WaitForBlacklistUpdate();
231 237
232 TestBlacklistPathProvider provider(&profile_); 238 path_provider_.AddPersistentPath(
233 manager->RegisterBlacklistPathProvider(&provider); 239 test_data_dir_.AppendASCII("annoying_ads.pbl"));
234 provider.AddPath(test_data_dir_.AppendASCII("annoying_ads.pbl")); 240 WaitForBlacklistUpdate();
235 const Blacklist* blacklist = manager->GetCompiledBlacklist(); 241 const Blacklist* blacklist = manager->GetCompiledBlacklist();
236 EXPECT_TRUE(BlacklistHasMatch(blacklist, 242 EXPECT_TRUE(BlacklistHasMatch(blacklist,
237 "http://host/annoying_ads/ad.jpg")); 243 "http://host/annoying_ads/ad.jpg"));
238 manager->UnregisterBlacklistPathProvider(&provider);
239 244
240 compiled_blacklist_path = manager->compiled_blacklist_path(); 245 compiled_blacklist_path = manager->compiled_blacklist_path();
241 } 246 }
242 247
243 ASSERT_TRUE(file_util::PathExists(compiled_blacklist_path)); 248 ASSERT_TRUE(file_util::PathExists(compiled_blacklist_path));
244 ASSERT_TRUE(file_util::Delete(compiled_blacklist_path, false)); 249 ASSERT_TRUE(file_util::Delete(compiled_blacklist_path, false));
245 250
246 { 251 {
247 scoped_refptr<BlacklistManager> manager( 252 scoped_refptr<BlacklistManager> manager(
248 new BlacklistManager(&profile_, NULL)); 253 new BlacklistManager(&profile_, &path_provider_, NULL));
254 WaitForBlacklistUpdate();
249 255
250 // Now we don't have any providers, and no compiled blacklist file. We 256 // The manager should recompile the blacklist.
251 // shouldn't match any URLs.
252 const Blacklist* blacklist = manager->GetCompiledBlacklist(); 257 const Blacklist* blacklist = manager->GetCompiledBlacklist();
253 EXPECT_FALSE(BlacklistHasMatch(blacklist, 258 EXPECT_TRUE(BlacklistHasMatch(blacklist,
254 "http://host/annoying_ads/ad.jpg")); 259 "http://host/annoying_ads/ad.jpg"));
255 } 260 }
256 } 261 }
257 262
258 TEST_F(BlacklistManagerTest, MultipleProviders) {
259 scoped_refptr<BlacklistManager> manager(
260 new BlacklistManager(&profile_, NULL));
261
262 TestBlacklistPathProvider provider1(&profile_);
263 TestBlacklistPathProvider provider2(&profile_);
264 manager->RegisterBlacklistPathProvider(&provider1);
265 manager->RegisterBlacklistPathProvider(&provider2);
266
267 const Blacklist* blacklist1 = manager->GetCompiledBlacklist();
268 EXPECT_FALSE(BlacklistHasMatch(blacklist1,
269 "http://sample/annoying_ads/a.jpg"));
270 EXPECT_FALSE(BlacklistHasMatch(blacklist1,
271 "http://sample/other_ads/a.jpg"));
272 EXPECT_FALSE(BlacklistHasMatch(blacklist1, "http://host/something.doc"));
273
274 provider1.AddPath(test_data_dir_.AppendASCII("annoying_ads.pbl"));
275 const Blacklist* blacklist2 = manager->GetCompiledBlacklist();
276 EXPECT_NE(blacklist1, blacklist2);
277
278 provider2.AddPath(test_data_dir_.AppendASCII("host.pbl"));
279 const Blacklist* blacklist3 = manager->GetCompiledBlacklist();
280 EXPECT_NE(blacklist2, blacklist3);
281
282 EXPECT_TRUE(BlacklistHasMatch(blacklist3,
283 "http://sample/annoying_ads/a.jpg"));
284 EXPECT_FALSE(BlacklistHasMatch(blacklist3, "http://sample/other_ads/a.jpg"));
285 EXPECT_TRUE(BlacklistHasMatch(blacklist3, "http://host/something.doc"));
286
287 provider1.AddPath(test_data_dir_.AppendASCII("other_ads.pbl"));
288
289 const Blacklist* blacklist4 = manager->GetCompiledBlacklist();
290
291 EXPECT_NE(blacklist3, blacklist4);
292 EXPECT_TRUE(BlacklistHasMatch(blacklist4,
293 "http://sample/annoying_ads/a.jpg"));
294 EXPECT_TRUE(BlacklistHasMatch(blacklist4, "http://sample/other_ads/a.jpg"));
295 EXPECT_TRUE(BlacklistHasMatch(blacklist4, "http://host/something.doc"));
296
297 manager->UnregisterBlacklistPathProvider(&provider1);
298 manager->UnregisterBlacklistPathProvider(&provider2);
299 }
300
301 } // namespace 263 } // namespace
OLDNEW
« no previous file with comments | « chrome/browser/privacy_blacklist/blacklist_manager.cc ('k') | chrome/browser/privacy_blacklist/blacklist_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698