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

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc

Issue 220493003: Safebrowsing: change gethash caching to match api 2.3 rules, fix some corner cases. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 8 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // This test creates a safebrowsing service using test safebrowsing database 5 // This test creates a safebrowsing service using test safebrowsing database
6 // and a test protocol manager. It is used to test logics in safebrowsing 6 // and a test protocol manager. It is used to test logics in safebrowsing
7 // service. 7 // service.
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 using content::WebContents; 52 using content::WebContents;
53 using ::testing::_; 53 using ::testing::_;
54 using ::testing::Mock; 54 using ::testing::Mock;
55 using ::testing::StrictMock; 55 using ::testing::StrictMock;
56 56
57 namespace { 57 namespace {
58 58
59 void InvokeFullHashCallback( 59 void InvokeFullHashCallback(
60 SafeBrowsingProtocolManager::FullHashCallback callback, 60 SafeBrowsingProtocolManager::FullHashCallback callback,
61 const std::vector<SBFullHashResult>& result) { 61 const std::vector<SBFullHashResult>& result) {
62 callback.Run(result, true); 62 callback.Run(result, base::TimeDelta::FromMinutes(45));
63 } 63 }
64 64
65 } // namespace 65 } // namespace
66 66
67 // A SafeBrowingDatabase class that allows us to inject the malicious URLs. 67 // A SafeBrowingDatabase class that allows us to inject the malicious URLs.
68 class TestSafeBrowsingDatabase : public SafeBrowsingDatabase { 68 class TestSafeBrowsingDatabase : public SafeBrowsingDatabase {
69 public: 69 public:
70 TestSafeBrowsingDatabase() {} 70 TestSafeBrowsingDatabase() {}
71 71
72 virtual ~TestSafeBrowsingDatabase() {} 72 virtual ~TestSafeBrowsingDatabase() {}
73 73
74 // Initializes the database with the given filename. 74 // Initializes the database with the given filename.
75 virtual void Init(const base::FilePath& filename) OVERRIDE {} 75 virtual void Init(const base::FilePath& filename) OVERRIDE {}
76 76
77 // Deletes the current database and creates a new one. 77 // Deletes the current database and creates a new one.
78 virtual bool ResetDatabase() OVERRIDE { 78 virtual bool ResetDatabase() OVERRIDE {
79 badurls_.clear(); 79 badurls_.clear();
80 return true; 80 return true;
81 } 81 }
82 82
83 // Called on the IO thread to check if the given URL is safe or not. If we 83 // Called on the IO thread to check if the given URL is safe or not. If we
84 // can synchronously determine that the URL is safe, CheckUrl returns true, 84 // can synchronously determine that the URL is safe, CheckUrl returns true,
85 // otherwise it returns false. 85 // otherwise it returns false.
86 virtual bool ContainsBrowseUrl(const GURL& url, 86 virtual bool ContainsBrowseUrl(const GURL& url,
87 std::string* matching_list,
88 std::vector<SBPrefix>* prefix_hits, 87 std::vector<SBPrefix>* prefix_hits,
89 std::vector<SBFullHashResult>* full_hits, 88 std::vector<SBFullHashResult>* cache_hits)
90 base::Time last_update) OVERRIDE { 89 OVERRIDE {
90 cache_hits->clear();
91 std::vector<GURL> urls(1, url); 91 std::vector<GURL> urls(1, url);
92 return ContainsUrl(safe_browsing_util::kMalwareList, 92 return ContainsUrl(safe_browsing_util::kMalwareList,
93 safe_browsing_util::kPhishingList, 93 safe_browsing_util::kPhishingList,
94 urls, prefix_hits, full_hits); 94 urls,
95 prefix_hits);
95 } 96 }
96 virtual bool ContainsDownloadUrl( 97 virtual bool ContainsDownloadUrl(
97 const std::vector<GURL>& urls, 98 const std::vector<GURL>& urls,
98 std::vector<SBPrefix>* prefix_hits) OVERRIDE { 99 std::vector<SBPrefix>* prefix_hits) OVERRIDE {
99 std::vector<SBFullHashResult> full_hits;
100 bool found = ContainsUrl(safe_browsing_util::kBinUrlList, 100 bool found = ContainsUrl(safe_browsing_util::kBinUrlList,
101 safe_browsing_util::kBinUrlList, 101 safe_browsing_util::kBinUrlList,
102 urls, prefix_hits, &full_hits); 102 urls,
103 prefix_hits);
103 if (!found) 104 if (!found)
104 return false; 105 return false;
105 DCHECK_LE(1U, prefix_hits->size()); 106 DCHECK_LE(1U, prefix_hits->size());
106 return true; 107 return true;
107 } 108 }
108 virtual bool ContainsCsdWhitelistedUrl(const GURL& url) OVERRIDE { 109 virtual bool ContainsCsdWhitelistedUrl(const GURL& url) OVERRIDE {
109 return true; 110 return true;
110 } 111 }
111 virtual bool ContainsDownloadWhitelistedString( 112 virtual bool ContainsDownloadWhitelistedString(
112 const std::string& str) OVERRIDE { 113 const std::string& str) OVERRIDE {
(...skipping 22 matching lines...) Expand all
135 ADD_FAILURE() << "Not implemented."; 136 ADD_FAILURE() << "Not implemented.";
136 } 137 }
137 virtual void DeleteChunks( 138 virtual void DeleteChunks(
138 const std::vector<SBChunkDelete>& chunk_deletes) OVERRIDE { 139 const std::vector<SBChunkDelete>& chunk_deletes) OVERRIDE {
139 ADD_FAILURE() << "Not implemented."; 140 ADD_FAILURE() << "Not implemented.";
140 } 141 }
141 virtual void UpdateFinished(bool update_succeeded) OVERRIDE { 142 virtual void UpdateFinished(bool update_succeeded) OVERRIDE {
142 ADD_FAILURE() << "Not implemented."; 143 ADD_FAILURE() << "Not implemented.";
143 } 144 }
144 virtual void CacheHashResults(const std::vector<SBPrefix>& prefixes, 145 virtual void CacheHashResults(const std::vector<SBPrefix>& prefixes,
145 const std::vector<SBFullHashResult>& full_hits) OVERRIDE { 146 const std::vector<SBFullHashResult>& full_hits,
147 const base::TimeDelta& cache_lifetime)
148 OVERRIDE {
146 // Do nothing for the cache. 149 // Do nothing for the cache.
147 } 150 }
148 virtual bool IsMalwareIPMatchKillSwitchOn() OVERRIDE { 151 virtual bool IsMalwareIPMatchKillSwitchOn() OVERRIDE {
149 return false; 152 return false;
150 } 153 }
151 154
152 // Fill up the database with test URL. 155 // Fill up the database with test URL.
153 void AddUrl(const GURL& url, 156 void AddUrl(const GURL& url,
154 const std::string& list_name, 157 const std::string& list_name,
155 const std::vector<SBPrefix>& prefix_hits, 158 const std::vector<SBPrefix>& prefix_hits) {
156 const std::vector<SBFullHashResult>& full_hits) {
157 badurls_[url.spec()].list_name = list_name; 159 badurls_[url.spec()].list_name = list_name;
158 badurls_[url.spec()].prefix_hits = prefix_hits; 160 badurls_[url.spec()].prefix_hits = prefix_hits;
159 badurls_[url.spec()].full_hits = full_hits;
160 } 161 }
161 162
162 // Fill up the database with test hash digest. 163 // Fill up the database with test hash digest.
163 void AddDownloadPrefix(SBPrefix prefix) { 164 void AddDownloadPrefix(SBPrefix prefix) {
164 download_digest_prefix_.insert(prefix); 165 download_digest_prefix_.insert(prefix);
165 } 166 }
166 167
167 private: 168 private:
168 struct Hits { 169 struct Hits {
169 std::string list_name; 170 std::string list_name;
170 std::vector<SBPrefix> prefix_hits; 171 std::vector<SBPrefix> prefix_hits;
171 std::vector<SBFullHashResult> full_hits;
172 }; 172 };
173 173
174 bool ContainsUrl(const std::string& list_name0, 174 bool ContainsUrl(const std::string& list_name0,
175 const std::string& list_name1, 175 const std::string& list_name1,
176 const std::vector<GURL>& urls, 176 const std::vector<GURL>& urls,
177 std::vector<SBPrefix>* prefix_hits, 177 std::vector<SBPrefix>* prefix_hits) {
178 std::vector<SBFullHashResult>* full_hits) {
179 bool hit = false; 178 bool hit = false;
180 for (size_t i = 0; i < urls.size(); ++i) { 179 for (size_t i = 0; i < urls.size(); ++i) {
181 const GURL& url = urls[i]; 180 const GURL& url = urls[i];
182 base::hash_map<std::string, Hits>::const_iterator 181 base::hash_map<std::string, Hits>::const_iterator
183 badurls_it = badurls_.find(url.spec()); 182 badurls_it = badurls_.find(url.spec());
184 183
185 if (badurls_it == badurls_.end()) 184 if (badurls_it == badurls_.end())
186 continue; 185 continue;
187 186
188 if (badurls_it->second.list_name == list_name0 || 187 if (badurls_it->second.list_name == list_name0 ||
189 badurls_it->second.list_name == list_name1) { 188 badurls_it->second.list_name == list_name1) {
190 prefix_hits->insert(prefix_hits->end(), 189 prefix_hits->insert(prefix_hits->end(),
191 badurls_it->second.prefix_hits.begin(), 190 badurls_it->second.prefix_hits.begin(),
192 badurls_it->second.prefix_hits.end()); 191 badurls_it->second.prefix_hits.end());
193 full_hits->insert(full_hits->end(),
194 badurls_it->second.full_hits.begin(),
195 badurls_it->second.full_hits.end());
196 hit = true; 192 hit = true;
197 } 193 }
198 194
199 } 195 }
200 return hit; 196 return hit;
201 } 197 }
202 198
203 base::hash_map<std::string, Hits> badurls_; 199 base::hash_map<std::string, Hits> badurls_;
204 base::hash_set<SBPrefix> download_digest_prefix_; 200 base::hash_set<SBPrefix> download_digest_prefix_;
205 }; 201 };
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 330
335 static void GenUrlFullhashResult(const GURL& url, 331 static void GenUrlFullhashResult(const GURL& url,
336 const std::string& list_name, 332 const std::string& list_name,
337 int add_chunk_id, 333 int add_chunk_id,
338 SBFullHashResult* full_hash) { 334 SBFullHashResult* full_hash) {
339 std::string host; 335 std::string host;
340 std::string path; 336 std::string path;
341 safe_browsing_util::CanonicalizeUrl(url, &host, &path, NULL); 337 safe_browsing_util::CanonicalizeUrl(url, &host, &path, NULL);
342 full_hash->hash = SBFullHashForString(host + path); 338 full_hash->hash = SBFullHashForString(host + path);
343 full_hash->list_name = list_name; 339 full_hash->list_name = list_name;
344 full_hash->add_chunk_id = add_chunk_id;
345 } 340 }
346 341
347 static void GenDigestFullhashResult(const std::string& full_digest, 342 static void GenDigestFullhashResult(const std::string& full_digest,
348 const std::string& list_name, 343 const std::string& list_name,
349 int add_chunk_id, 344 int add_chunk_id,
350 SBFullHashResult* full_hash) { 345 SBFullHashResult* full_hash) {
351 full_hash->hash = safe_browsing_util::StringToSBFullHash(full_digest); 346 full_hash->hash = safe_browsing_util::StringToSBFullHash(full_digest);
352 full_hash->list_name = list_name; 347 full_hash->list_name = list_name;
353 full_hash->add_chunk_id = add_chunk_id;
354 } 348 }
355 349
356 virtual void SetUp() { 350 virtual void SetUp() {
357 // InProcessBrowserTest::SetUp() instantiates SafebrowsingService and 351 // InProcessBrowserTest::SetUp() instantiates SafebrowsingService and
358 // RegisterFactory has to be called before SafeBrowsingService is created. 352 // RegisterFactory has to be called before SafeBrowsingService is created.
359 SafeBrowsingDatabase::RegisterFactory(&db_factory_); 353 SafeBrowsingDatabase::RegisterFactory(&db_factory_);
360 SafeBrowsingProtocolManager::RegisterFactory(&pm_factory_); 354 SafeBrowsingProtocolManager::RegisterFactory(&pm_factory_);
361 InProcessBrowserTest::SetUp(); 355 InProcessBrowserTest::SetUp();
362 } 356 }
363 357
(...skipping 20 matching lines...) Expand all
384 // This will setup the "url" prefix in database and prepare protocol manager 378 // This will setup the "url" prefix in database and prepare protocol manager
385 // to response with |full_hash| for get full hash request. 379 // to response with |full_hash| for get full hash request.
386 void SetupResponseForUrl(const GURL& url, const SBFullHashResult& full_hash) { 380 void SetupResponseForUrl(const GURL& url, const SBFullHashResult& full_hash) {
387 std::vector<SBPrefix> prefix_hits; 381 std::vector<SBPrefix> prefix_hits;
388 prefix_hits.push_back(full_hash.hash.prefix); 382 prefix_hits.push_back(full_hash.hash.prefix);
389 383
390 // Make sure the full hits is empty unless we need to test the 384 // Make sure the full hits is empty unless we need to test the
391 // full hash is hit in database's local cache. 385 // full hash is hit in database's local cache.
392 std::vector<SBFullHashResult> empty_full_hits; 386 std::vector<SBFullHashResult> empty_full_hits;
393 TestSafeBrowsingDatabase* db = db_factory_.GetDb(); 387 TestSafeBrowsingDatabase* db = db_factory_.GetDb();
394 db->AddUrl(url, full_hash.list_name, prefix_hits, empty_full_hits); 388 db->AddUrl(url, full_hash.list_name, prefix_hits);
395 389
396 TestProtocolManager* pm = pm_factory_.GetProtocolManager(); 390 TestProtocolManager* pm = pm_factory_.GetProtocolManager();
397 pm->SetGetFullHashResponse(full_hash); 391 pm->SetGetFullHashResponse(full_hash);
398 } 392 }
399 393
400 // This will setup the binary digest prefix in database and prepare protocol 394 // This will setup the binary digest prefix in database and prepare protocol
401 // manager to respond with the result hash. 395 // manager to respond with the result hash.
402 void SetupResponseForDigest(const std::string& digest, 396 void SetupResponseForDigest(const std::string& digest,
403 const SBFullHashResult& hash_result) { 397 const SBFullHashResult& hash_result) {
404 TestSafeBrowsingDatabase* db = db_factory_.GetDb(); 398 TestSafeBrowsingDatabase* db = db_factory_.GetDb();
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 content::WindowedNotificationObserver observer( 967 content::WindowedNotificationObserver observer(
974 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, 968 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE,
975 content::Source<SafeBrowsingDatabaseManager>( 969 content::Source<SafeBrowsingDatabaseManager>(
976 sb_service_->database_manager().get())); 970 sb_service_->database_manager().get()));
977 BrowserThread::PostTask( 971 BrowserThread::PostTask(
978 BrowserThread::IO, 972 BrowserThread::IO,
979 FROM_HERE, 973 FROM_HERE,
980 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this)); 974 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this));
981 observer.Wait(); 975 observer.Wait();
982 } 976 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698