// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/net/nss_service.h" #include #include "base/bind.h" #include "base/callback_helpers.h" #include "base/task/bind_post_task.h" #include "base/threading/sequenced_task_runner_handle.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" // Note: This file contains the platform-agnostic components of NssService; // platform-specific portions are implemented in the _linux.cc and // _chromeos.cc files. namespace { void GetCertDBOnIOThread( NssCertDatabaseGetter database_getter, base::OnceCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); auto split_callback = base::SplitOnceCallback(std::move(callback)); net::NSSCertDatabase* cert_db = std::move(database_getter).Run(std::move(split_callback.first)); if (cert_db) std::move(split_callback.second).Run(cert_db); } } // namespace void NssService::UnsafelyGetNSSCertDatabaseForTesting( base::OnceCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); content::GetIOThreadTaskRunner({})->PostTask( FROM_HERE, base::BindOnce(&GetCertDBOnIOThread, CreateNSSCertDatabaseGetterForIOThread(), base::BindPostTask(base::SequencedTaskRunnerHandle::Get(), std::move(callback)))); }