diff options
Diffstat (limited to 'chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc')
-rw-r--r-- | chromium/weblayer/browser/safe_browsing/safe_browsing_service.cc | 26 |
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; } } |