Add FakeSecureMessageDelegateFactory class

Replace duplicate implementations with this centralized class.

Bug: 976745
Change-Id: Idb328759ee467b66e417d54d858d895dab3fd4d6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1666771
Auto-Submit: Josh Nohle <nohle@chromium.org>
Commit-Queue: Kyle Horimoto <khorimoto@chromium.org>
Reviewed-by: Kyle Horimoto <khorimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#670529}
diff --git a/chromeos/components/multidevice/fake_secure_message_delegate.cc b/chromeos/components/multidevice/fake_secure_message_delegate.cc
index 39f696df..bccbf976 100644
--- a/chromeos/components/multidevice/fake_secure_message_delegate.cc
+++ b/chromeos/components/multidevice/fake_secure_message_delegate.cc
@@ -197,6 +197,14 @@
   return kPrivateKeyPrefix + public_key;
 }
 
+std::unique_ptr<multidevice::SecureMessageDelegate>
+FakeSecureMessageDelegateFactory::BuildInstance() {
+  auto instance = std::make_unique<multidevice::FakeSecureMessageDelegate>();
+  instance_ = instance.get();
+
+  return instance;
+}
+
 }  // namespace multidevice
 
 }  // namespace chromeos
diff --git a/chromeos/components/multidevice/fake_secure_message_delegate.h b/chromeos/components/multidevice/fake_secure_message_delegate.h
index 8bb1aaa..b94842b 100644
--- a/chromeos/components/multidevice/fake_secure_message_delegate.h
+++ b/chromeos/components/multidevice/fake_secure_message_delegate.h
@@ -5,8 +5,11 @@
 #ifndef CHROMEOS_COMPONENTS_MULTIDEVICE_FAKE_SECURE_MESSAGE_DELEGATE_H_
 #define CHROMEOS_COMPONENTS_MULTIDEVICE_FAKE_SECURE_MESSAGE_DELEGATE_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "chromeos/components/multidevice/secure_message_delegate.h"
+#include "chromeos/components/multidevice/secure_message_delegate_impl.h"
 
 namespace chromeos {
 
@@ -51,6 +54,23 @@
   DISALLOW_COPY_AND_ASSIGN(FakeSecureMessageDelegate);
 };
 
+class FakeSecureMessageDelegateFactory
+    : public multidevice::SecureMessageDelegateImpl::Factory {
+ public:
+  FakeSecureMessageDelegateFactory() = default;
+  ~FakeSecureMessageDelegateFactory() override = default;
+
+  multidevice::FakeSecureMessageDelegate* instance() { return instance_; }
+
+ private:
+  // multidevice::SecureMessageDelegateImpl::Factory:
+  std::unique_ptr<multidevice::SecureMessageDelegate> BuildInstance() override;
+
+  multidevice::FakeSecureMessageDelegate* instance_ = nullptr;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeSecureMessageDelegateFactory);
+};
+
 }  // namespace multidevice
 
 }  // namespace chromeos
diff --git a/chromeos/services/device_sync/cryptauth_key_creator_impl_unittest.cc b/chromeos/services/device_sync/cryptauth_key_creator_impl_unittest.cc
index ab35c46..d29bdca 100644
--- a/chromeos/services/device_sync/cryptauth_key_creator_impl_unittest.cc
+++ b/chromeos/services/device_sync/cryptauth_key_creator_impl_unittest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chromeos/services/device_sync/cryptauth_key_creator_impl.h"
+
 #include <memory>
 #include <string>
 #include <utility>
@@ -16,7 +18,6 @@
 #include "chromeos/services/device_sync/cryptauth_key.h"
 #include "chromeos/services/device_sync/cryptauth_key_bundle.h"
 #include "chromeos/services/device_sync/cryptauth_key_creator.h"
-#include "chromeos/services/device_sync/cryptauth_key_creator_impl.h"
 #include "chromeos/services/device_sync/proto/cryptauth_common.pb.h"
 #include "crypto/hkdf.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -47,36 +48,13 @@
   }
 }
 
-class FakeSecureMessageDelegateFactory
-    : public multidevice::SecureMessageDelegateImpl::Factory {
- public:
-  FakeSecureMessageDelegateFactory() = default;
-
-  ~FakeSecureMessageDelegateFactory() override = default;
-
-  multidevice::FakeSecureMessageDelegate* instance() { return instance_; }
-
- private:
-  // multidevice::SecureMessageDelegateImpl::Factory:
-  std::unique_ptr<multidevice::SecureMessageDelegate> BuildInstance() override {
-    auto instance = std::make_unique<multidevice::FakeSecureMessageDelegate>();
-    instance_ = instance.get();
-
-    return instance;
-  }
-
-  multidevice::FakeSecureMessageDelegate* instance_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeSecureMessageDelegateFactory);
-};
-
 }  // namespace
 
 class DeviceSyncCryptAuthKeyCreatorImplTest : public testing::Test {
  protected:
   DeviceSyncCryptAuthKeyCreatorImplTest()
       : fake_secure_message_delegate_factory_(
-            std::make_unique<FakeSecureMessageDelegateFactory>()),
+            std::make_unique<multidevice::FakeSecureMessageDelegateFactory>()),
         fake_server_ephemeral_dh_(CryptAuthKey(
             kFakeServerEphemeralDhPublicKeyMaterial,
             fake_secure_message_delegate()->GetPrivateKeyForPublicKey(
@@ -161,7 +139,7 @@
     client_ephemeral_dh_ = client_ephemeral_dh;
   }
 
-  std::unique_ptr<FakeSecureMessageDelegateFactory>
+  std::unique_ptr<multidevice::FakeSecureMessageDelegateFactory>
       fake_secure_message_delegate_factory_;
   std::unique_ptr<CryptAuthKeyCreator> key_creator_;
 
diff --git a/chromeos/services/device_sync/remote_device_provider_impl_unittest.cc b/chromeos/services/device_sync/remote_device_provider_impl_unittest.cc
index 906d76b..39bc2eec 100644
--- a/chromeos/services/device_sync/remote_device_provider_impl_unittest.cc
+++ b/chromeos/services/device_sync/remote_device_provider_impl_unittest.cc
@@ -34,21 +34,6 @@
 const char kTestUserId[] = "testUserId";
 const char kTestUserPrivateKey[] = "kTestUserPrivateKey";
 
-class FakeSecureMessageDelegateFactory
-    : public multidevice::SecureMessageDelegateImpl::Factory {
- public:
-  // multidevice::SecureMessageDelegateImpl::Factory:
-  std::unique_ptr<multidevice::SecureMessageDelegate> BuildInstance() override {
-    multidevice::FakeSecureMessageDelegate* delegate =
-        new multidevice::FakeSecureMessageDelegate();
-    created_delegates_.push_back(delegate);
-    return base::WrapUnique(delegate);
-  }
-
- private:
-  std::vector<multidevice::FakeSecureMessageDelegate*> created_delegates_;
-};
-
 std::vector<cryptauth::ExternalDeviceInfo>
 CreateExternalDeviceInfosForRemoteDevices(
     const multidevice::RemoteDeviceList remote_devices) {
@@ -157,7 +142,7 @@
   void SetUp() override {
     fake_device_manager_ = std::make_unique<FakeCryptAuthDeviceManager>();
     fake_secure_message_delegate_factory_ =
-        std::make_unique<FakeSecureMessageDelegateFactory>();
+        std::make_unique<multidevice::FakeSecureMessageDelegateFactory>();
     multidevice::SecureMessageDelegateImpl::Factory::SetInstanceForTesting(
         fake_secure_message_delegate_factory_.get());
     test_device_loader_factory_ =
@@ -206,7 +191,7 @@
     return test_device_loader_factory_->test_device_infos_[val];
   }
 
-  std::unique_ptr<FakeSecureMessageDelegateFactory>
+  std::unique_ptr<multidevice::FakeSecureMessageDelegateFactory>
       fake_secure_message_delegate_factory_;
 
   std::unique_ptr<FakeCryptAuthDeviceManager> fake_device_manager_;
diff --git a/chromeos/services/secure_channel/secure_channel_unittest.cc b/chromeos/services/secure_channel/secure_channel_unittest.cc
index 34487c2..9ac455b 100644
--- a/chromeos/services/secure_channel/secure_channel_unittest.cc
+++ b/chromeos/services/secure_channel/secure_channel_unittest.cc
@@ -43,15 +43,6 @@
   std::string payload;
 };
 
-class FakeSecureMessageDelegateFactory
-    : public multidevice::SecureMessageDelegateImpl::Factory {
- public:
-  // multidevice::SecureMessageDelegateImpl::Factory:
-  std::unique_ptr<multidevice::SecureMessageDelegate> BuildInstance() override {
-    return std::make_unique<multidevice::FakeSecureMessageDelegate>();
-  }
-};
-
 class TestObserver final : public SecureChannel::Observer {
  public:
   explicit TestObserver(SecureChannel* secure_channel)
@@ -166,7 +157,7 @@
         test_authenticator_factory_.get());
 
     fake_secure_message_delegate_factory_ =
-        std::make_unique<FakeSecureMessageDelegateFactory>();
+        std::make_unique<multidevice::FakeSecureMessageDelegateFactory>();
     multidevice::SecureMessageDelegateImpl::Factory::SetInstanceForTesting(
         fake_secure_message_delegate_factory_.get());
 
@@ -341,7 +332,7 @@
   // Owned by secure_channel_.
   FakeConnection* fake_connection_;
 
-  std::unique_ptr<FakeSecureMessageDelegateFactory>
+  std::unique_ptr<multidevice::FakeSecureMessageDelegateFactory>
       fake_secure_message_delegate_factory_;
 
   // Owned by secure_channel_ once authentication has completed successfully.