Treat noupdate="true" as noupdate.

In order to support cases where not all <app> have an update, we
still need to send a delta to self payload because update_engine
doesn't know which partition should be copied over and we need the
hash in payload to detect any data corruption.

But Omaha doesn't allow noupdate updatecheck status with a payload,
so we introduced a new attribute in postinstall action to tell
update_engine this is a delta to self payload and can be treated as
no update if all <app> set it.

Bug: 36252799
Test: mma
Change-Id: I377f2dccacf7b92c5bce91ceacb7752ffbdbc480
(cherry picked from commit 1b70c3a7f257d3ff166f33bbac761ad9b7e969e1)
diff --git a/omaha_request_action.cc b/omaha_request_action.cc
index 3f9f7c4..295d620 100644
--- a/omaha_request_action.cc
+++ b/omaha_request_action.cc
@@ -933,7 +933,10 @@
   output_object->update_exists = false;
   for (size_t i = 0; i < parser_data->apps.size(); i++) {
     const string& status = parser_data->apps[i].updatecheck_status;
-    if (status == "noupdate") {
+    // Also treat noupdate="true" in postinstall attributes as no update even if
+    // updatecheck status says otherwise.
+    if (status == "noupdate" ||
+        parser_data->apps[i].action_postinstall_attrs["noupdate"] == "true") {
       LOG(INFO) << "No update for <app> " << i;
     } else if (status == "ok") {
       output_object->update_exists = true;