Index: chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
index 2dbda14ecf242471155366f32f4231e7ca0f22e9..bfaab6733340959b164b8b0cdf1d2c58f294ab1b 100644 |
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
@@ -145,6 +145,7 @@ |
#include "content/public/browser/notification_service.h" |
#include "content/public/common/content_switches.h" |
#include "content/public/common/main_function_params.h" |
+#include "crypto/nss_util_internal.h" |
#include "dbus/object_path.h" |
#include "device/bluetooth/bluetooth_adapter_factory.h" |
#include "device/bluetooth/dbus/bluez_dbus_manager.h" |
@@ -204,6 +205,36 @@ void InitializeNetworkPortalDetector() { |
} |
} |
+void StartCertLoaderWithSystemNSSDB(net::NSSCertDatabase* system_nss_cert_db) { |
+ CertLoader::Get()->StartWithSystemNSSDB(system_nss_cert_db); |
+} |
+ |
+void InitializeSystemSlotCertDatabaseOnUIThread( |
+ crypto::ScopedPK11Slot system_slot) { |
+ g_browser_process->platform_part()->InitializeSystemSlotCertDatabase( |
+ std::move(system_slot)); |
+ g_browser_process->platform_part()->GetSystemSlotCertDatabase( |
+ base::Bind(&StartCertLoaderWithSystemNSSDB)); |
+} |
+ |
+// Called on IO Thread when the system slot has been retrieved. |
+void GotSystemSlot(crypto::ScopedPK11Slot system_slot) { |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::UI, FROM_HERE, |
+ base::BindOnce(&InitializeSystemSlotCertDatabaseOnUIThread, |
+ std::move(system_slot))); |
+} |
+ |
+// Called on IO Thread |
+void InitializeSystemSlotCertDatabaseOnIOThread() { |
+ auto callback = base::Bind(&GotSystemSlot); |
+ crypto::ScopedPK11Slot system_nss_slot = |
+ crypto::GetSystemNSSKeySlot(callback); |
+ if (system_nss_slot) { |
+ callback.Run(std::move(system_nss_slot)); |
+ } |
+} |
+ |
} // namespace |
namespace internal { |
@@ -469,6 +500,12 @@ void ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun() { |
content::BrowserThread::GetTaskRunnerForThread( |
content::BrowserThread::IO)); |
+ // Initialize NSS database for system token. |
+ TPMTokenLoader::Get()->EnsureStarted(); |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::IO, FROM_HERE, |
+ base::BindOnce(&InitializeSystemSlotCertDatabaseOnIOThread)); |
+ |
CrasAudioHandler::Initialize( |
new AudioDevicesPrefHandlerImpl(g_browser_process->local_state())); |