From 23ecc2149133fa0cf369f53b5d7d28e78815bca3 Mon Sep 17 00:00:00 2001
From: Hidehiko Abe <hidehiko@chromium.org>
Date: Thu, 13 Jun 2019 22:27:41 +0900
Subject: [PATCH] libchrome: Update crypto.

libchrome uses OpenSSH, instead of BoringSSH, although its support
was dropped in Chrome already.
To lengthen its lifetime, this patch adds minor fix.
- Use base::data() instead of base::string_as_array().
  The method was removed. cf) crrev.com/c/1056014.
- Use base::PostTaskAndReply instead of base::WorkerPool.
  The class was removed. cf) crrev.com/c/650368
- tracked_object::Location is renamed to base::Location.
  cf) crbug.com/763556
- base::Location::Write was removed. Use ToString().
  cf) crrev.com/c/707310
- base::MakeUnique was removed. Use std::make_unique.
  cf) crrev.com/c/944048

BUG=chromium:909719
TEST=Built locally.

Change-Id: I2ba45db7592ea9addc2df230b977ffb950f0b342
---
 crypto/nss_util.cc     | 37 ++++++++++++++-----------------------
 crypto/openssl_util.cc |  6 ++----
 crypto/openssl_util.h  |  7 +++----
 crypto/sha2.cc         |  2 +-
 4 files changed, 20 insertions(+), 32 deletions(-)

diff --git a/crypto/nss_util.cc b/crypto/nss_util.cc
index a7752d3..f9c6373 100644
--- a/crypto/nss_util.cc
+++ b/crypto/nss_util.cc
@@ -38,14 +38,13 @@
 #include "base/files/file_util.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
-#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/native_library.h"
 #include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task_scheduler/post_task.h"
 #include "base/threading/thread_checker.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/worker_pool.h"
 #include "build/build_config.h"
 
 #if !defined(OS_CHROMEOS)
@@ -380,22 +379,16 @@ class NSSInitSingleton {
     std::unique_ptr<TPMModuleAndSlot> tpm_args(
         new TPMModuleAndSlot(chaps_module_));
     TPMModuleAndSlot* tpm_args_ptr = tpm_args.get();
-    if (base::WorkerPool::PostTaskAndReply(
-            FROM_HERE,
-            base::Bind(&NSSInitSingleton::InitializeTPMTokenOnWorkerThread,
-                       system_slot_id,
-                       tpm_args_ptr),
-            base::Bind(&NSSInitSingleton::OnInitializedTPMTokenAndSystemSlot,
-                       base::Unretained(this),  // NSSInitSingleton is leaky
-                       callback,
-                       base::Passed(&tpm_args)),
-            true /* task_is_slow */
-            )) {
-      initializing_tpm_token_ = true;
-    } else {
-      base::MessageLoop::current()->task_runner()->PostTask(
-          FROM_HERE, base::Bind(callback, false));
-    }
+    base::PostTaskAndReply(
+        FROM_HERE,
+        base::Bind(&NSSInitSingleton::InitializeTPMTokenOnWorkerThread,
+                   system_slot_id,
+                   tpm_args_ptr),
+        base::Bind(&NSSInitSingleton::OnInitializedTPMTokenAndSystemSlot,
+                   base::Unretained(this),  // NSSInitSingleton is leaky
+                   callback,
+                   base::Passed(&tpm_args)));
+    initializing_tpm_token_ = true;
   }
 
   static void InitializeTPMTokenOnWorkerThread(CK_SLOT_ID token_slot_id,
@@ -508,7 +501,7 @@ class NSSInitSingleton {
         "%s %s", kUserNSSDatabaseName, username_hash.c_str());
     ScopedPK11Slot public_slot(OpenPersistentNSSDBForPath(db_name, path));
     chromeos_user_map_[username_hash] =
-        base::MakeUnique<ChromeOSUserData>(std::move(public_slot));
+        std::make_unique<ChromeOSUserData>(std::move(public_slot));
     return true;
   }
 
@@ -543,7 +536,7 @@ class NSSInitSingleton {
     std::unique_ptr<TPMModuleAndSlot> tpm_args(
         new TPMModuleAndSlot(chaps_module_));
     TPMModuleAndSlot* tpm_args_ptr = tpm_args.get();
-    base::WorkerPool::PostTaskAndReply(
+    base::PostTaskAndReply(
         FROM_HERE,
         base::Bind(&NSSInitSingleton::InitializeTPMTokenOnWorkerThread,
                    slot_id,
@@ -551,9 +544,7 @@ class NSSInitSingleton {
         base::Bind(&NSSInitSingleton::OnInitializedTPMForChromeOSUser,
                    base::Unretained(this),  // NSSInitSingleton is leaky
                    username_hash,
-                   base::Passed(&tpm_args)),
-        true /* task_is_slow */
-        );
+                   base::Passed(&tpm_args)));
   }
 
   void OnInitializedTPMForChromeOSUser(
diff --git a/crypto/openssl_util.cc b/crypto/openssl_util.cc
index c1b7a90..b671eab 100644
--- a/crypto/openssl_util.cc
+++ b/crypto/openssl_util.cc
@@ -46,15 +46,13 @@ void EnsureOpenSSLInit() {
 #endif
 }
 
-void ClearOpenSSLERRStack(const tracked_objects::Location& location) {
+void ClearOpenSSLERRStack(const base::Location& location) {
   if (DCHECK_IS_ON() && VLOG_IS_ON(1)) {
     uint32_t error_num = ERR_peek_error();
     if (error_num == 0)
       return;
 
-    std::string message;
-    location.Write(true, true, &message);
-    DVLOG(1) << "OpenSSL ERR_get_error stack from " << message;
+    DVLOG(1) << "OpenSSL ERR_get_error stack from " << location.ToString();
     ERR_print_errors_cb(&OpenSSLErrorCallback, NULL);
   } else {
     ERR_clear_error();
diff --git a/crypto/openssl_util.h b/crypto/openssl_util.h
index d608cde..c3d6cc9 100644
--- a/crypto/openssl_util.h
+++ b/crypto/openssl_util.h
@@ -63,8 +63,7 @@ CRYPTO_EXPORT void EnsureOpenSSLInit();
 // Drains the OpenSSL ERR_get_error stack. On a debug build the error codes
 // are send to VLOG(1), on a release build they are disregarded. In most
 // cases you should pass FROM_HERE as the |location|.
-CRYPTO_EXPORT void ClearOpenSSLERRStack(
-    const tracked_objects::Location& location);
+CRYPTO_EXPORT void ClearOpenSSLERRStack(const base::Location& location);
 
 // Place an instance of this class on the call stack to automatically clear
 // the OpenSSL error stack on function exit.
@@ -73,7 +72,7 @@ class OpenSSLErrStackTracer {
   // Pass FROM_HERE as |location|, to help track the source of OpenSSL error
   // messages. Note any diagnostic emitted will be tagged with the location of
   // the constructor call as it's not possible to trace a destructor's callsite.
-  explicit OpenSSLErrStackTracer(const tracked_objects::Location& location)
+  explicit OpenSSLErrStackTracer(const base::Location& location)
       : location_(location) {
     EnsureOpenSSLInit();
   }
@@ -82,7 +81,7 @@ class OpenSSLErrStackTracer {
   }
 
  private:
-  const tracked_objects::Location location_;
+  const base::Location location_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(OpenSSLErrStackTracer);
 };
diff --git a/crypto/sha2.cc b/crypto/sha2.cc
index 1b302b3..71566a9 100644
--- a/crypto/sha2.cc
+++ b/crypto/sha2.cc
@@ -21,7 +21,7 @@ void SHA256HashString(const base::StringPiece& str, void* output, size_t len) {
 
 std::string SHA256HashString(const base::StringPiece& str) {
   std::string output(kSHA256Length, 0);
-  SHA256HashString(str, base::string_as_array(&output), output.size());
+  SHA256HashString(str, base::data(output), output.size());
   return output;
 }
 
-- 
2.22.0.rc2.383.gf4fbbf30c2-goog

