Only skip operation on snapshot partitions

On Virtual A/B devices, don't skip SOURCE_COPY on
static partitions.

Test: update_engine_unittest
Test: incremental update to self
Change-Id: I5c93b501e09f50f559151eb77d83052373c90d0d
diff --git a/dynamic_partition_control_android.cc b/dynamic_partition_control_android.cc
index 4414e4b..4ad02c7 100644
--- a/dynamic_partition_control_android.cc
+++ b/dynamic_partition_control_android.cc
@@ -106,11 +106,13 @@
 }
 
 bool DynamicPartitionControlAndroid::ShouldSkipOperation(
-    const InstallOperation& operation) {
+    const std::string& partition_name, const InstallOperation& operation) {
   switch (operation.type()) {
     case InstallOperation::SOURCE_COPY:
       return target_supports_snapshot_ &&
              GetVirtualAbFeatureFlag().IsEnabled() &&
+             mapped_devices_.count(partition_name +
+                                   SlotSuffixForSlotNumber(target_slot_)) > 0 &&
              SourceCopyOperationIsClone(operation);
       break;
     default:
@@ -371,6 +373,9 @@
     uint32_t target_slot,
     const DeltaArchiveManifest& manifest,
     bool update) {
+  source_slot_ = source_slot;
+  target_slot_ = target_slot;
+
   if (fs_mgr_overlayfs_is_setup()) {
     // Non DAP devices can use overlayfs as well.
     LOG(WARNING)
@@ -675,4 +680,9 @@
   return DynamicPartitionDeviceStatus::ERROR;
 }
 
+void DynamicPartitionControlAndroid::set_fake_mapped_devices(
+    const std::set<std::string>& fake) {
+  mapped_devices_ = fake;
+}
+
 }  // namespace chromeos_update_engine