Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 file should not be build on Android but is currently getting built. | 5 // This file should not be build on Android but is currently getting built. |
| 6 // TODO(vakh): Fix that: http://crbug.com/621647 | 6 // TODO(vakh): Fix that: http://crbug.com/621647 |
| 7 | 7 |
| 8 #include "components/safe_browsing_db/v4_local_database_manager.h" | 8 #include "components/safe_browsing_db/v4_local_database_manager.h" |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 123 stores_to_check(stores_to_check) { | 123 stores_to_check(stores_to_check) { |
| 124 full_hashes.assign(full_hashes_set.begin(), full_hashes_set.end()); | 124 full_hashes.assign(full_hashes_set.begin(), full_hashes_set.end()); |
| 125 } | 125 } |
| 126 | 126 |
| 127 V4LocalDatabaseManager::PendingCheck::~PendingCheck() {} | 127 V4LocalDatabaseManager::PendingCheck::~PendingCheck() {} |
| 128 | 128 |
| 129 // static | 129 // static |
| 130 scoped_refptr<V4LocalDatabaseManager> V4LocalDatabaseManager::Create( | 130 scoped_refptr<V4LocalDatabaseManager> V4LocalDatabaseManager::Create( |
| 131 const base::FilePath& base_path, | 131 const base::FilePath& base_path, |
| 132 ExtendedReportingLevelCallback extended_reporting_level_callback) { | 132 ExtendedReportingLevelCallback extended_reporting_level_callback) { |
| 133 if (!V4FeatureList::IsLocalDatabaseManagerEnabled()) { | |
| 134 return nullptr; | |
| 135 } | |
| 136 | |
| 137 return make_scoped_refptr( | 133 return make_scoped_refptr( |
| 138 new V4LocalDatabaseManager(base_path, extended_reporting_level_callback)); | 134 new V4LocalDatabaseManager(base_path, extended_reporting_level_callback)); |
| 139 } | 135 } |
| 140 | 136 |
| 141 V4LocalDatabaseManager::V4LocalDatabaseManager( | 137 V4LocalDatabaseManager::V4LocalDatabaseManager( |
| 142 const base::FilePath& base_path, | 138 const base::FilePath& base_path, |
| 143 ExtendedReportingLevelCallback extended_reporting_level_callback) | 139 ExtendedReportingLevelCallback extended_reporting_level_callback) |
| 144 : base_path_(base_path), | 140 : base_path_(base_path), |
| 145 extended_reporting_level_callback_(extended_reporting_level_callback), | 141 extended_reporting_level_callback_(extended_reporting_level_callback), |
| 146 list_infos_(GetListInfos()), | 142 list_infos_(GetListInfos()), |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 192 url.SchemeIs(url::kFtpScheme); | 188 url.SchemeIs(url::kFtpScheme); |
| 193 } | 189 } |
| 194 | 190 |
| 195 bool V4LocalDatabaseManager::ChecksAreAlwaysAsync() const { | 191 bool V4LocalDatabaseManager::ChecksAreAlwaysAsync() const { |
| 196 return false; | 192 return false; |
| 197 } | 193 } |
| 198 | 194 |
| 199 bool V4LocalDatabaseManager::CheckBrowseUrl(const GURL& url, Client* client) { | 195 bool V4LocalDatabaseManager::CheckBrowseUrl(const GURL& url, Client* client) { |
| 200 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 196 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 201 | 197 |
| 198 LOG(ERROR) << "V4LocalDatabaseManager::CheckBrowseUrl: url: " << url.spec(); | |
|
Scott Hess - ex-Googler
2017/02/06 22:46:36
Does everyone need to see these logs?
vakh (use Gerrit instead)
2017/02/06 23:30:13
No, got uploaded by mistake. Removed.
| |
| 199 | |
| 202 if (!enabled_ || !CanCheckUrl(url)) { | 200 if (!enabled_ || !CanCheckUrl(url)) { |
| 203 return true; | 201 return true; |
| 204 } | 202 } |
| 205 | 203 |
| 204 LOG(ERROR) << "V4LocalDatabaseManager::CheckBrowseUrl: url: " << url.spec(); | |
| 206 std::unique_ptr<PendingCheck> check = base::MakeUnique<PendingCheck>( | 205 std::unique_ptr<PendingCheck> check = base::MakeUnique<PendingCheck>( |
| 207 client, ClientCallbackType::CHECK_BROWSE_URL, | 206 client, ClientCallbackType::CHECK_BROWSE_URL, |
| 208 StoresToCheck({GetUrlMalwareId(), GetUrlSocEngId(), GetUrlUwsId()}), | 207 StoresToCheck({GetUrlMalwareId(), GetUrlSocEngId(), GetUrlUwsId()}), |
| 209 std::vector<GURL>(1, url)); | 208 std::vector<GURL>(1, url)); |
| 210 | 209 |
| 211 return HandleCheck(std::move(check)); | 210 return HandleCheck(std::move(check)); |
| 212 } | 211 } |
| 213 | 212 |
| 214 bool V4LocalDatabaseManager::CheckDownloadUrl( | 213 bool V4LocalDatabaseManager::CheckDownloadUrl( |
| 215 const std::vector<GURL>& url_chain, | 214 const std::vector<GURL>& url_chain, |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 462 check->client_callback_type == ClientCallbackType::CHECK_RESOURCE_URL || | 461 check->client_callback_type == ClientCallbackType::CHECK_RESOURCE_URL || |
| 463 check->client_callback_type == ClientCallbackType::CHECK_EXTENSION_IDS || | 462 check->client_callback_type == ClientCallbackType::CHECK_EXTENSION_IDS || |
| 464 check->client_callback_type == ClientCallbackType::CHECK_OTHER) { | 463 check->client_callback_type == ClientCallbackType::CHECK_OTHER) { |
| 465 DCHECK(!check->full_hashes.empty()); | 464 DCHECK(!check->full_hashes.empty()); |
| 466 | 465 |
| 467 full_hash_to_store_and_hash_prefixes->clear(); | 466 full_hash_to_store_and_hash_prefixes->clear(); |
| 468 for (const auto& full_hash : check->full_hashes) { | 467 for (const auto& full_hash : check->full_hashes) { |
| 469 StoreAndHashPrefixes matched_store_and_hash_prefixes; | 468 StoreAndHashPrefixes matched_store_and_hash_prefixes; |
| 470 v4_database_->GetStoresMatchingFullHash(full_hash, check->stores_to_check, | 469 v4_database_->GetStoresMatchingFullHash(full_hash, check->stores_to_check, |
| 471 &matched_store_and_hash_prefixes); | 470 &matched_store_and_hash_prefixes); |
| 471 LOG(ERROR) << "V4LocalDatabaseManager::GetPrefixMatches: matched: " | |
| 472 << !matched_store_and_hash_prefixes.empty(); | |
| 472 if (!matched_store_and_hash_prefixes.empty()) { | 473 if (!matched_store_and_hash_prefixes.empty()) { |
| 473 (*full_hash_to_store_and_hash_prefixes)[full_hash] = | 474 (*full_hash_to_store_and_hash_prefixes)[full_hash] = |
| 474 matched_store_and_hash_prefixes; | 475 matched_store_and_hash_prefixes; |
| 475 } | 476 } |
| 476 } | 477 } |
| 477 } else { | 478 } else { |
| 478 NOTREACHED() << "Unexpected client_callback_type encountered."; | 479 NOTREACHED() << "Unexpected client_callback_type encountered."; |
| 479 } | 480 } |
| 480 | 481 |
| 481 // TODO(vakh): Only log SafeBrowsing.V4GetPrefixMatches.Time once PVer3 code | 482 // TODO(vakh): Only log SafeBrowsing.V4GetPrefixMatches.Time once PVer3 code |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 526 auto it = std::find_if( | 527 auto it = std::find_if( |
| 527 std::begin(list_infos_), std::end(list_infos_), | 528 std::begin(list_infos_), std::end(list_infos_), |
| 528 [&list_id](ListInfo const& li) { return li.list_id() == list_id; }); | 529 [&list_id](ListInfo const& li) { return li.list_id() == list_id; }); |
| 529 DCHECK(list_infos_.end() != it); | 530 DCHECK(list_infos_.end() != it); |
| 530 DCHECK_NE(SB_THREAT_TYPE_SAFE, it->sb_threat_type()); | 531 DCHECK_NE(SB_THREAT_TYPE_SAFE, it->sb_threat_type()); |
| 531 DCHECK_NE(SB_THREAT_TYPE_UNUSED, it->sb_threat_type()); | 532 DCHECK_NE(SB_THREAT_TYPE_UNUSED, it->sb_threat_type()); |
| 532 return it->sb_threat_type(); | 533 return it->sb_threat_type(); |
| 533 } | 534 } |
| 534 | 535 |
| 535 bool V4LocalDatabaseManager::HandleCheck(std::unique_ptr<PendingCheck> check) { | 536 bool V4LocalDatabaseManager::HandleCheck(std::unique_ptr<PendingCheck> check) { |
| 537 LOG(ERROR) << "V4LocalDatabaseManager::HandleCheck: v4_database_: " | |
| 538 << v4_database_.get(); | |
| 536 if (!v4_database_) { | 539 if (!v4_database_) { |
| 537 queued_checks_.push_back(std::move(check)); | 540 queued_checks_.push_back(std::move(check)); |
| 538 return false; | 541 return false; |
| 539 } | 542 } |
| 540 | 543 |
| 541 FullHashToStoreAndHashPrefixesMap full_hash_to_store_and_hash_prefixes; | 544 FullHashToStoreAndHashPrefixesMap full_hash_to_store_and_hash_prefixes; |
| 542 if (!GetPrefixMatches(check, &full_hash_to_store_and_hash_prefixes)) { | 545 if (!GetPrefixMatches(check, &full_hash_to_store_and_hash_prefixes)) { |
| 546 LOG(ERROR) << "V4LocalDatabaseManager::HandleCheck: No prefix match!"; | |
| 543 return true; | 547 return true; |
| 544 } | 548 } |
| 545 | 549 |
| 550 LOG(ERROR) << "V4LocalDatabaseManager::HandleCheck: Prefix(es) matched!"; | |
| 546 // Add check to pending_checks_ before scheduling PerformFullHashCheck so that | 551 // Add check to pending_checks_ before scheduling PerformFullHashCheck so that |
| 547 // even if the client calls CancelCheck before PerformFullHashCheck gets | 552 // even if the client calls CancelCheck before PerformFullHashCheck gets |
| 548 // called, the check can be found in pending_checks_. | 553 // called, the check can be found in pending_checks_. |
| 549 pending_checks_.insert(check.get()); | 554 pending_checks_.insert(check.get()); |
| 550 | 555 |
| 551 // Post on the IO thread to enforce async behavior. | 556 // Post on the IO thread to enforce async behavior. |
| 552 BrowserThread::PostTask( | 557 BrowserThread::PostTask( |
| 553 BrowserThread::IO, FROM_HERE, | 558 BrowserThread::IO, FROM_HERE, |
| 554 base::Bind(&V4LocalDatabaseManager::PerformFullHashCheck, this, | 559 base::Bind(&V4LocalDatabaseManager::PerformFullHashCheck, this, |
| 555 base::Passed(std::move(check)), | 560 base::Passed(std::move(check)), |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 582 | 587 |
| 583 FullHashToStoreAndHashPrefixesMap full_hash_to_store_and_hash_prefixes; | 588 FullHashToStoreAndHashPrefixesMap full_hash_to_store_and_hash_prefixes; |
| 584 return GetPrefixMatches(check, &full_hash_to_store_and_hash_prefixes); | 589 return GetPrefixMatches(check, &full_hash_to_store_and_hash_prefixes); |
| 585 } | 590 } |
| 586 | 591 |
| 587 void V4LocalDatabaseManager::OnFullHashResponse( | 592 void V4LocalDatabaseManager::OnFullHashResponse( |
| 588 std::unique_ptr<PendingCheck> check, | 593 std::unique_ptr<PendingCheck> check, |
| 589 const std::vector<FullHashInfo>& full_hash_infos) { | 594 const std::vector<FullHashInfo>& full_hash_infos) { |
| 590 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 595 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 591 | 596 |
| 597 LOG(ERROR) | |
| 598 << "V4LocalDatabaseManager::OnFullHashResponse: full_hash_infos.size(): " | |
| 599 << full_hash_infos.size(); | |
| 600 LOG(ERROR) << "V4LocalDatabaseManager::OnFullHashResponse: enabled_: " | |
| 601 << enabled_; | |
| 602 | |
| 592 if (!enabled_) { | 603 if (!enabled_) { |
| 593 DCHECK(pending_checks_.empty()); | 604 DCHECK(pending_checks_.empty()); |
| 594 return; | 605 return; |
| 595 } | 606 } |
| 596 | 607 |
| 597 const auto it = pending_checks_.find(check.get()); | 608 const auto it = pending_checks_.find(check.get()); |
| 598 if (it == pending_checks_.end()) { | 609 if (it == pending_checks_.end()) { |
| 599 // The check has since been cancelled. | 610 // The check has since been cancelled. |
| 600 return; | 611 return; |
| 601 } | 612 } |
| 602 | 613 |
| 603 // Find out the most severe threat, if any, to report to the client. | 614 // Find out the most severe threat, if any, to report to the client. |
| 604 GetSeverestThreatTypeAndMetadata(&check->result_threat_type, | 615 GetSeverestThreatTypeAndMetadata(&check->result_threat_type, |
| 605 &check->url_metadata, | 616 &check->url_metadata, |
| 606 &check->matching_full_hash, full_hash_infos); | 617 &check->matching_full_hash, full_hash_infos); |
| 618 LOG(ERROR) << "V4LocalDatabaseManager::OnFullHashResponse: " | |
| 619 "check->result_threat_type: " | |
| 620 << check->result_threat_type; | |
| 607 pending_checks_.erase(it); | 621 pending_checks_.erase(it); |
| 608 RespondToClient(std::move(check)); | 622 RespondToClient(std::move(check)); |
| 609 } | 623 } |
| 610 | 624 |
| 611 void V4LocalDatabaseManager::PerformFullHashCheck( | 625 void V4LocalDatabaseManager::PerformFullHashCheck( |
| 612 std::unique_ptr<PendingCheck> check, | 626 std::unique_ptr<PendingCheck> check, |
| 613 const FullHashToStoreAndHashPrefixesMap& | 627 const FullHashToStoreAndHashPrefixesMap& |
| 614 full_hash_to_store_and_hash_prefixes) { | 628 full_hash_to_store_and_hash_prefixes) { |
| 615 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 629 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 616 | 630 |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 728 db_updated_callback_); | 742 db_updated_callback_); |
| 729 } | 743 } |
| 730 | 744 |
| 731 bool V4LocalDatabaseManager::AreStoresAvailableNow( | 745 bool V4LocalDatabaseManager::AreStoresAvailableNow( |
| 732 const StoresToCheck& stores_to_check) const { | 746 const StoresToCheck& stores_to_check) const { |
| 733 return enabled_ && v4_database_ && | 747 return enabled_ && v4_database_ && |
| 734 v4_database_->AreStoresAvailable(stores_to_check); | 748 v4_database_->AreStoresAvailable(stores_to_check); |
| 735 } | 749 } |
| 736 | 750 |
| 737 } // namespace safe_browsing | 751 } // namespace safe_browsing |
| OLD | NEW |