Index: chrome/browser/safe_browsing/safe_browsing_service.cc |
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc |
index 1b762f2a4960ca0260a7299321e86d0812f89017..6e8c25cf13a43e0eaa716c9c01216ed7422079e1 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_service.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_service.cc |
@@ -51,6 +51,12 @@ |
#include "chrome/installer/util/browser_distribution.h" |
#endif |
+#if defined(SAFE_BROWSING_DB_LOCAL) |
+#include "chrome/browser/safe_browsing/local_database_manager.h" |
+#elif defined(SAFE_BROWSING_DB_REMOTE) |
+#include "chrome/browser/safe_browsing/remote_database_manager.h" |
+#endif |
+ |
#if defined(FULL_SAFE_BROWSING) |
#include "chrome/browser/safe_browsing/incident_reporting/binary_integrity_analyzer.h" |
#include "chrome/browser/safe_browsing/incident_reporting/blacklist_load_analyzer.h" |
@@ -243,7 +249,7 @@ void SafeBrowsingService::Initialize() { |
off_domain_inclusion_detector_.reset( |
new safe_browsing::OffDomainInclusionDetector(database_manager_)); |
-#endif // !defined(OS_ANDROID) |
+#endif // !defined(FULL_SAFE_BROWSING) |
// Track the safe browsing preference of existing profiles. |
// The SafeBrowsingService will be started if any existing profile has the |
@@ -379,7 +385,9 @@ SafeBrowsingUIManager* SafeBrowsingService::CreateUIManager() { |
SafeBrowsingDatabaseManager* SafeBrowsingService::CreateDatabaseManager() { |
#if defined(SAFE_BROWSING_DB_LOCAL) |
- return new SafeBrowsingDatabaseManager(this); |
+ return new LocalSafeBrowsingDatabaseManager(this); |
+#elif defined(SAFE_BROWSING_DB_REMOTE) |
+ return new RemoteSafeBrowsingDatabaseManager(); |
#else |
return NULL; |
#endif |
@@ -466,6 +474,19 @@ SafeBrowsingProtocolConfig SafeBrowsingService::GetProtocolConfig() const { |
return config; |
} |
+// Any tests that create a DatabaseManager that isn't derived from |
+// LocalSafeBrowsingDatabaseManager should override this to return NULL. |
+SafeBrowsingProtocolManagerDelegate* |
+SafeBrowsingService::GetProtocolManagerDelegate() { |
+#if defined(SAFE_BROWSING_DB_LOCAL) |
+ return static_cast<LocalSafeBrowsingDatabaseManager*>( |
+ database_manager_.get()); |
+#else |
+ NOTREACHED(); |
+ return NULL; |
+#endif |
+} |
+ |
void SafeBrowsingService::StartOnIOThread( |
net::URLRequestContextGetter* url_request_context_getter) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
@@ -475,14 +496,19 @@ void SafeBrowsingService::StartOnIOThread( |
SafeBrowsingProtocolConfig config = GetProtocolConfig(); |
-#if defined(SAFE_BROWSING_DB_LOCAL) |
+#if defined(SAFE_BROWSING_DB_LOCAL) || defined(SAFE_BROWSING_DB_REMOTE) |
DCHECK(database_manager_.get()); |
database_manager_->StartOnIOThread(); |
+#endif |
- DCHECK(!protocol_manager_); |
- protocol_manager_ = SafeBrowsingProtocolManager::Create( |
- database_manager_.get(), url_request_context_getter, config); |
- protocol_manager_->Initialize(); |
+#if defined(SAFE_BROWSING_DB_LOCAL) |
+ SafeBrowsingProtocolManagerDelegate* protocol_manager_delegate = |
+ GetProtocolManagerDelegate(); |
+ if (protocol_manager_delegate) { |
+ protocol_manager_ = SafeBrowsingProtocolManager::Create( |
+ protocol_manager_delegate, url_request_context_getter, config); |
+ protocol_manager_->Initialize(); |
+ } |
#endif |
DCHECK(!ping_manager_); |
@@ -493,7 +519,7 @@ void SafeBrowsingService::StartOnIOThread( |
void SafeBrowsingService::StopOnIOThread(bool shutdown) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
-#if defined(SAFE_BROWSING_DB_LOCAL) |
+#if defined(SAFE_BROWSING_DB_LOCAL) || defined(SAFE_BROWSING_DB_REMOTE) |
database_manager_->StopOnIOThread(shutdown); |
#endif |
ui_manager_->StopOnIOThread(shutdown); |
@@ -505,8 +531,10 @@ void SafeBrowsingService::StopOnIOThread(bool shutdown) { |
// This cancels all in-flight GetHash requests. Note that database_manager_ |
// relies on the protocol_manager_ so if the latter is destroyed, the |
// former must be stopped. |
- delete protocol_manager_; |
- protocol_manager_ = NULL; |
+ if (protocol_manager_) { |
+ delete protocol_manager_; |
+ protocol_manager_ = NULL; |
+ } |
#endif |
delete ping_manager_; |
ping_manager_ = NULL; |