DynamicPartitionControl: map snapshot devices for virt ab

Bug: 138816109
Test: apply OTA on Virtual A/B devices
Test: update_engine_unittests

Change-Id: I23263624afb370d122d5aed5c3a9bf48a1a3d8fc
diff --git a/dynamic_partition_control_android.h b/dynamic_partition_control_android.h
index 0907236..9509a62 100644
--- a/dynamic_partition_control_android.h
+++ b/dynamic_partition_control_android.h
@@ -23,11 +23,13 @@
 #include <set>
 #include <string>
 
+#include <libsnapshot/snapshot.h>
+
 namespace chromeos_update_engine {
 
 class DynamicPartitionControlAndroid : public DynamicPartitionControlInterface {
  public:
-  DynamicPartitionControlAndroid() = default;
+  DynamicPartitionControlAndroid();
   ~DynamicPartitionControlAndroid();
   FeatureFlag GetDynamicPartitionsFeatureFlag() override;
   FeatureFlag GetVirtualAbFeatureFlag() override;
@@ -83,8 +85,6 @@
  private:
   friend class DynamicPartitionControlAndroidTest;
 
-  std::set<std::string> mapped_devices_;
-
   void CleanupInternal(bool wait);
   bool MapPartitionInternal(const std::string& super_device,
                             const std::string& target_partition_name,
@@ -98,6 +98,21 @@
                                uint32_t target_slot,
                                const DeltaArchiveManifest& manifest);
 
+  // Helper for PreparePartitionsForUpdate. Used for dynamic partitions without
+  // Virtual A/B update.
+  bool PrepareDynamicPartitionsForUpdate(uint32_t source_slot,
+                                         uint32_t target_slot,
+                                         const DeltaArchiveManifest& manifest);
+
+  // Helper for PreparePartitionsForUpdate. Used for snapshotted partitions for
+  // Virtual A/B update.
+  bool PrepareSnapshotPartitionsForUpdate(uint32_t source_slot,
+                                          uint32_t target_slot,
+                                          const DeltaArchiveManifest& manifest);
+
+  std::set<std::string> mapped_devices_;
+  std::unique_ptr<android::snapshot::SnapshotManager> snapshot_;
+
   DISALLOW_COPY_AND_ASSIGN(DynamicPartitionControlAndroid);
 };