summaryrefslogtreecommitdiff
path: root/chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc')
-rw-r--r--chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc26
1 files changed, 25 insertions, 1 deletions
diff --git a/chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc b/chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc
index 632d2f84d53..adb19d1909c 100644
--- a/chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc
+++ b/chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc
@@ -160,12 +160,35 @@ void SafeBrowsingService::CreateSafeBrowsingUIManager() {
}
void SafeBrowsingService::CreateAndStartSafeBrowsingDBManager() {
- DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
DCHECK(!safe_browsing_db_manager_);
safe_browsing_db_manager_ =
new safe_browsing::RemoteSafeBrowsingDatabaseManager();
+ if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)) {
+ // Posting a task to start the DB here ensures that it will be started by
+ // the time that a consumer uses it on the IO thread, as such a consumer
+ // would need to make it available for usage on the IO thread via a
+ // PostTask() that will be ordered after this one.
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ &SafeBrowsingService::StartSafeBrowsingDBManagerOnIOThread,
+ base::Unretained(this)));
+ } else {
+ StartSafeBrowsingDBManagerOnIOThread();
+ }
+}
+
+void SafeBrowsingService::StartSafeBrowsingDBManagerOnIOThread() {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+ DCHECK(safe_browsing_db_manager_);
+
+ if (started_db_manager_)
+ return;
+
+ started_db_manager_ = true;
+
// V4ProtocolConfig is not used. Just create one with empty values.
safe_browsing::V4ProtocolConfig config("", false, "", "");
safe_browsing_db_manager_->StartOnIOThread(GetURLLoaderFactoryOnIOThread(),
@@ -225,6 +248,7 @@ void SafeBrowsingService::StopDBManagerOnIOThread() {
if (safe_browsing_db_manager_) {
safe_browsing_db_manager_->StopOnIOThread(true /*shutdown*/);
safe_browsing_db_manager_.reset();
+ started_db_manager_ = false;
}
}