Replace CrxComponent with std::unique_ptr<CrxComponent>.

This is a mechanical refactoring. A future CL will change the behavior to
allow injecting nullptr as a CrxComponent when the CRX is uninstalled
during an update check.

Bug: 837371,722942

Change-Id: I5f70fdd032a37c08bf35a286c51b109a2ca07ce0
Reviewed-on: https://chromium-review.googlesource.com/1027116
Reviewed-by: Joshua Pawlicki <[email protected]>
Reviewed-by: Devlin <[email protected]>
Commit-Queue: Sorin Jianu <[email protected]>
Cr-Commit-Position: refs/heads/master@{#554166}
diff --git a/components/update_client/update_client_unittest.cc b/components/update_client/update_client_unittest.cc
index 4b9c0b1f..c051f43b 100644
--- a/components/update_client/update_client_unittest.cc
+++ b/components/update_client/update_client_unittest.cc
@@ -213,14 +213,16 @@
 TEST_F(UpdateClientTest, OneCrxNoUpdate) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx;
-      crx.name = "test_jebg";
-      crx.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx.version = base::Version("0.9");
-      crx.installer = base::MakeRefCounted<TestInstaller>();
-      components->push_back(crx);
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_jebg";
+      crx->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx->version = base::Version("0.9");
+      crx->installer = base::MakeRefCounted<TestInstaller>();
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -319,22 +321,24 @@
 TEST_F(UpdateClientTest, TwoCrxUpdateNoUpdate) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx1;
-      crx1.name = "test_jebg";
-      crx1.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx1.version = base::Version("0.9");
-      crx1.installer = base::MakeRefCounted<TestInstaller>();
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx1 = std::make_unique<CrxComponent>();
+      crx1->name = "test_jebg";
+      crx1->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx1->version = base::Version("0.9");
+      crx1->installer = base::MakeRefCounted<TestInstaller>();
 
-      CrxComponent crx2;
-      crx2.name = "test_abag";
-      crx2.pk_hash.assign(abag_hash, abag_hash + arraysize(abag_hash));
-      crx2.version = base::Version("2.2");
-      crx2.installer = base::MakeRefCounted<TestInstaller>();
+      std::unique_ptr<CrxComponent> crx2 = std::make_unique<CrxComponent>();
+      crx2->name = "test_abag";
+      crx2->pk_hash.assign(abag_hash, abag_hash + arraysize(abag_hash));
+      crx2->version = base::Version("2.2");
+      crx2->installer = base::MakeRefCounted<TestInstaller>();
 
-      components->push_back(crx1);
-      components->push_back(crx2);
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx1));
+      component.push_back(std::move(crx2));
+      return component;
     }
   };
 
@@ -532,22 +536,24 @@
 TEST_F(UpdateClientTest, TwoCrxUpdate) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx1;
-      crx1.name = "test_jebg";
-      crx1.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx1.version = base::Version("0.9");
-      crx1.installer = base::MakeRefCounted<TestInstaller>();
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx1 = std::make_unique<CrxComponent>();
+      crx1->name = "test_jebg";
+      crx1->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx1->version = base::Version("0.9");
+      crx1->installer = base::MakeRefCounted<TestInstaller>();
 
-      CrxComponent crx2;
-      crx2.name = "test_ihfo";
-      crx2.pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
-      crx2.version = base::Version("0.8");
-      crx2.installer = base::MakeRefCounted<TestInstaller>();
+      std::unique_ptr<CrxComponent> crx2 = std::make_unique<CrxComponent>();
+      crx2->name = "test_ihfo";
+      crx2->pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
+      crx2->version = base::Version("0.8");
+      crx2->installer = base::MakeRefCounted<TestInstaller>();
 
-      components->push_back(crx1);
-      components->push_back(crx2);
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx1));
+      component.push_back(std::move(crx2));
+      return component;
     }
   };
 
@@ -804,22 +810,24 @@
 TEST_F(UpdateClientTest, TwoCrxUpdateDownloadTimeout) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx1;
-      crx1.name = "test_jebg";
-      crx1.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx1.version = base::Version("0.9");
-      crx1.installer = base::MakeRefCounted<TestInstaller>();
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx1 = std::make_unique<CrxComponent>();
+      crx1->name = "test_jebg";
+      crx1->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx1->version = base::Version("0.9");
+      crx1->installer = base::MakeRefCounted<TestInstaller>();
 
-      CrxComponent crx2;
-      crx2.name = "test_ihfo";
-      crx2.pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
-      crx2.version = base::Version("0.8");
-      crx2.installer = base::MakeRefCounted<TestInstaller>();
+      std::unique_ptr<CrxComponent> crx2 = std::make_unique<CrxComponent>();
+      crx2->name = "test_ihfo";
+      crx2->pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
+      crx2->version = base::Version("0.8");
+      crx2->installer = base::MakeRefCounted<TestInstaller>();
 
-      components->push_back(crx1);
-      components->push_back(crx2);
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx1));
+      component.push_back(std::move(crx2));
+      return component;
     }
   };
 
@@ -1068,8 +1076,8 @@
 TEST_F(UpdateClientTest, OneCrxDiffUpdate) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
       static int num_calls = 0;
 
       // Must use the same stateful installer object.
@@ -1078,19 +1086,21 @@
 
       ++num_calls;
 
-      CrxComponent crx;
-      crx.name = "test_ihfo";
-      crx.pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
-      crx.installer = installer;
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_ihfo";
+      crx->pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
+      crx->installer = installer;
       if (num_calls == 1) {
-        crx.version = base::Version("0.8");
+        crx->version = base::Version("0.8");
       } else if (num_calls == 2) {
-        crx.version = base::Version("1.0");
+        crx->version = base::Version("1.0");
       } else {
         NOTREACHED();
       }
 
-      components->push_back(crx);
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -1408,8 +1418,8 @@
 
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
       scoped_refptr<MockInstaller> installer =
           base::MakeRefCounted<MockInstaller>();
 
@@ -1418,12 +1428,15 @@
       EXPECT_CALL(*installer, GetInstalledFile(_, _)).Times(0);
       EXPECT_CALL(*installer, Uninstall()).Times(0);
 
-      CrxComponent crx;
-      crx.name = "test_jebg";
-      crx.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx.version = base::Version("0.9");
-      crx.installer = installer;
-      components->push_back(crx);
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_jebg";
+      crx->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx->version = base::Version("0.9");
+      crx->installer = installer;
+
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -1593,8 +1606,8 @@
 TEST_F(UpdateClientTest, OneCrxDiffUpdateFailsFullUpdateSucceeds) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
       static int num_calls = 0;
 
       // Must use the same stateful installer object.
@@ -1603,19 +1616,21 @@
 
       ++num_calls;
 
-      CrxComponent crx;
-      crx.name = "test_ihfo";
-      crx.pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
-      crx.installer = installer;
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_ihfo";
+      crx->pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
+      crx->installer = installer;
       if (num_calls == 1) {
-        crx.version = base::Version("0.8");
+        crx->version = base::Version("0.8");
       } else if (num_calls == 2) {
-        crx.version = base::Version("1.0");
+        crx->version = base::Version("1.0");
       } else {
         NOTREACHED();
       }
 
-      components->push_back(crx);
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -1911,14 +1926,16 @@
 TEST_F(UpdateClientTest, OneCrxNoUpdateQueuedCall) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx;
-      crx.name = "test_jebg";
-      crx.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx.version = base::Version("0.9");
-      crx.installer = base::MakeRefCounted<TestInstaller>();
-      components->push_back(crx);
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_jebg";
+      crx->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx->version = base::Version("0.9");
+      crx->installer = base::MakeRefCounted<TestInstaller>();
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -2028,15 +2045,17 @@
 TEST_F(UpdateClientTest, OneCrxInstall) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx;
-      crx.name = "test_jebg";
-      crx.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx.version = base::Version("0.0");
-      crx.installer = base::MakeRefCounted<TestInstaller>();
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_jebg";
+      crx->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx->version = base::Version("0.0");
+      crx->installer = base::MakeRefCounted<TestInstaller>();
 
-      components->push_back(crx);
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -2212,15 +2231,16 @@
 TEST_F(UpdateClientTest, ConcurrentInstallSameCRX) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx;
-      crx.name = "test_jebg";
-      crx.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx.version = base::Version("0.0");
-      crx.installer = base::MakeRefCounted<TestInstaller>();
-
-      components->push_back(crx);
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_jebg";
+      crx->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx->version = base::Version("0.0");
+      crx->installer = base::MakeRefCounted<TestInstaller>();
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -2337,8 +2357,10 @@
 TEST_F(UpdateClientTest, EmptyIdList) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {}
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      return {};
+    }
   };
 
   class CompletionCallbackMock {
@@ -2474,14 +2496,16 @@
 TEST_F(UpdateClientTest, RetryAfter) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx;
-      crx.name = "test_jebg";
-      crx.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx.version = base::Version("0.9");
-      crx.installer = base::MakeRefCounted<TestInstaller>();
-      components->push_back(crx);
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_jebg";
+      crx->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx->version = base::Version("0.9");
+      crx->installer = base::MakeRefCounted<TestInstaller>();
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -2666,23 +2690,25 @@
 TEST_F(UpdateClientTest, TwoCrxUpdateOneUpdateDisabled) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx1;
-      crx1.name = "test_jebg";
-      crx1.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx1.version = base::Version("0.9");
-      crx1.installer = base::MakeRefCounted<TestInstaller>();
-      crx1.supports_group_policy_enable_component_updates = true;
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx1 = std::make_unique<CrxComponent>();
+      crx1->name = "test_jebg";
+      crx1->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx1->version = base::Version("0.9");
+      crx1->installer = base::MakeRefCounted<TestInstaller>();
+      crx1->supports_group_policy_enable_component_updates = true;
 
-      CrxComponent crx2;
-      crx2.name = "test_ihfo";
-      crx2.pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
-      crx2.version = base::Version("0.8");
-      crx2.installer = base::MakeRefCounted<TestInstaller>();
+      std::unique_ptr<CrxComponent> crx2 = std::make_unique<CrxComponent>();
+      crx2->name = "test_ihfo";
+      crx2->pk_hash.assign(ihfo_hash, ihfo_hash + arraysize(ihfo_hash));
+      crx2->version = base::Version("0.8");
+      crx2->installer = base::MakeRefCounted<TestInstaller>();
 
-      components->push_back(crx1);
-      components->push_back(crx2);
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx1));
+      component.push_back(std::move(crx2));
+      return component;
     }
   };
 
@@ -2924,14 +2950,16 @@
 TEST_F(UpdateClientTest, OneCrxUpdateCheckFails) {
   class DataCallbackMock {
    public:
-    static void Callback(const std::vector<std::string>& ids,
-                         std::vector<CrxComponent>* components) {
-      CrxComponent crx;
-      crx.name = "test_jebg";
-      crx.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
-      crx.version = base::Version("0.9");
-      crx.installer = base::MakeRefCounted<TestInstaller>();
-      components->push_back(crx);
+    static std::vector<std::unique_ptr<CrxComponent>> Callback(
+        const std::vector<std::string>& ids) {
+      std::unique_ptr<CrxComponent> crx = std::make_unique<CrxComponent>();
+      crx->name = "test_jebg";
+      crx->pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
+      crx->version = base::Version("0.9");
+      crx->installer = base::MakeRefCounted<TestInstaller>();
+      std::vector<std::unique_ptr<CrxComponent>> component;
+      component.push_back(std::move(crx));
+      return component;
     }
   };
 
@@ -3170,14 +3198,15 @@
   // The action is a program which returns 1877345072 as a hardcoded value.
   update_client->Install(
       std::string("gjpmebpgbhcamgdgjcmnjfhggjpgcimm"),
-      base::BindOnce([](const std::vector<std::string>& ids,
-                        std::vector<CrxComponent>* components) {
-        CrxComponent crx;
-        crx.name = "test_niea";
-        crx.pk_hash.assign(gjpm_hash, gjpm_hash + arraysize(gjpm_hash));
-        crx.version = base::Version("0.0");
-        crx.installer = base::MakeRefCounted<VersionedTestInstaller>();
-        components->push_back(crx);
+      base::BindOnce([](const std::vector<std::string>& ids) {
+        auto crx = std::make_unique<CrxComponent>();
+        crx->name = "test_niea";
+        crx->pk_hash.assign(gjpm_hash, gjpm_hash + arraysize(gjpm_hash));
+        crx->version = base::Version("0.0");
+        crx->installer = base::MakeRefCounted<VersionedTestInstaller>();
+        std::vector<std::unique_ptr<CrxComponent>> component;
+        component.push_back(std::move(crx));
+        return component;
       }),
       base::BindOnce(
           [](base::OnceClosure quit_closure, Error error) {
@@ -3278,7 +3307,7 @@
     base::OnceClosure quit_closure = runloop.QuitClosure();
 
     auto config = base::MakeRefCounted<TestConfigurator>();
-    scoped_refptr<ComponentUnpacker> component_unpacker = new ComponentUnpacker(
+    auto component_unpacker = base::MakeRefCounted<ComponentUnpacker>(
         std::vector<uint8_t>(std::begin(gjpm_hash), std::end(gjpm_hash)),
         TestFilePath("runaction_test_win.crx3"), nullptr,
         config->CreateServiceManagerConnector());
@@ -3317,15 +3346,16 @@
       ids,
       base::BindOnce(
           [](const base::FilePath& unpack_path,
-             const std::vector<std::string>& ids,
-             std::vector<CrxComponent>* components) {
-            CrxComponent crx;
-            crx.name = "test_niea";
-            crx.pk_hash.assign(gjpm_hash, gjpm_hash + arraysize(gjpm_hash));
-            crx.version = base::Version("1.0");
-            crx.installer =
+             const std::vector<std::string>& ids) {
+            auto crx = std::make_unique<CrxComponent>();
+            crx->name = "test_niea";
+            crx->pk_hash.assign(gjpm_hash, gjpm_hash + arraysize(gjpm_hash));
+            crx->version = base::Version("1.0");
+            crx->installer =
                 base::MakeRefCounted<ReadOnlyTestInstaller>(unpack_path);
-            components->push_back(crx);
+            std::vector<std::unique_ptr<CrxComponent>> component;
+            component.push_back(std::move(crx));
+            return component;
           },
           unpack_path),
       false,