update_engine: Process Omaha response for rollback images

Omaha returns whether the image returned is a rollback in the
_rollback="true" argument. If this is set, the client has to check
whether it's OK to apply the rollback image (policy is specifically
requesting a rollback and verified boot will accept the image based
on its kernel and firmware key versions).

In addition to this, the device has to do a safe powerwash if the
image is a rollback. (We're not supporting rollbacks with partial
or no powerwash yet.)

We're also setting the rollback_happened preference to avoid force
updates happening before the policy is available again.

Chromium CL adding the error code: http://crrev.com/c/1047866

BUG=chromium:840432
TEST='cros_run_unit_tests --board=caroline --packages update_engine'

Change-Id: I1436ca96211b2a8523e78bf83602ef8b6b525570
Reviewed-on: https://chromium-review.googlesource.com/1047610
Commit-Ready: Marton Hunyady <hunyadym@chromium.org>
Tested-by: Marton Hunyady <hunyadym@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
16 files changed
tree: 68c1cad6d5daea07e177cace968c578e96c49133
  1. binder_bindings/
  2. client_library/
  3. common/
  4. dbus_bindings/
  5. init/
  6. payload_consumer/
  7. payload_generator/
  8. sample_images/
  9. scripts/
  10. update_manager/
  11. update_payload_key/
  12. .clang-format
  13. .gitignore
  14. Android.bp
  15. Android.mk
  16. binder_service_android.cc
  17. binder_service_android.h
  18. binder_service_brillo.cc
  19. binder_service_brillo.h
  20. boot_control_android.cc
  21. boot_control_android.h
  22. boot_control_chromeos.cc
  23. boot_control_chromeos.h
  24. boot_control_chromeos_unittest.cc
  25. boot_control_recovery.cc
  26. boot_control_recovery.h
  27. boot_control_recovery_stub.cc
  28. certificate_checker.cc
  29. certificate_checker.h
  30. certificate_checker_unittest.cc
  31. chrome_browser_proxy_resolver.cc
  32. chrome_browser_proxy_resolver.h
  33. COMMIT-QUEUE.ini
  34. common_service.cc
  35. common_service.h
  36. common_service_unittest.cc
  37. connection_manager.cc
  38. connection_manager.h
  39. connection_manager_android.cc
  40. connection_manager_android.h
  41. connection_manager_interface.h
  42. connection_manager_unittest.cc
  43. connection_utils.cc
  44. connection_utils.h
  45. CPPLINT.cfg
  46. daemon.cc
  47. daemon.h
  48. daemon_state_android.cc
  49. daemon_state_android.h
  50. daemon_state_interface.h
  51. dbus_connection.cc
  52. dbus_connection.h
  53. dbus_service.cc
  54. dbus_service.h
  55. dbus_test_utils.h
  56. fake_file_writer.h
  57. fake_p2p_manager.h
  58. fake_p2p_manager_configuration.h
  59. fake_shill_proxy.cc
  60. fake_shill_proxy.h
  61. fake_system_state.cc
  62. fake_system_state.h
  63. generate_pc_file.sh
  64. hardware_android.cc
  65. hardware_android.h
  66. hardware_chromeos.cc
  67. hardware_chromeos.h
  68. hardware_chromeos_unittest.cc
  69. image_properties.h
  70. image_properties_android.cc
  71. image_properties_android_unittest.cc
  72. image_properties_chromeos.cc
  73. image_properties_chromeos_unittest.cc
  74. libcurl_http_fetcher.cc
  75. libcurl_http_fetcher.h
  76. libupdate_engine-client-test.pc.in
  77. libupdate_engine-client.pc.in
  78. local_coverage_rate
  79. main.cc
  80. metrics_constants.h
  81. metrics_reporter_android.cc
  82. metrics_reporter_android.h
  83. metrics_reporter_interface.h
  84. metrics_reporter_omaha.cc
  85. metrics_reporter_omaha.h
  86. metrics_reporter_omaha_unittest.cc
  87. metrics_reporter_stub.cc
  88. metrics_reporter_stub.h
  89. metrics_utils.cc
  90. metrics_utils.h
  91. metrics_utils_unittest.cc
  92. mock_certificate_checker.h
  93. mock_connection_manager.h
  94. mock_file_writer.h
  95. mock_metrics_reporter.h
  96. mock_omaha_request_params.h
  97. mock_p2p_manager.h
  98. mock_payload_state.h
  99. mock_power_manager.h
  100. mock_proxy_resolver.h
  101. mock_service_observer.h
  102. mock_update_attempter.h
  103. MODULE_LICENSE_APACHE2
  104. network_selector.h
  105. network_selector_android.cc
  106. network_selector_android.h
  107. network_selector_interface.h
  108. network_selector_stub.cc
  109. network_selector_stub.h
  110. NOTICE
  111. omaha_request_action.cc
  112. omaha_request_action.h
  113. omaha_request_action_unittest.cc
  114. omaha_request_params.cc
  115. omaha_request_params.h
  116. omaha_request_params_unittest.cc
  117. omaha_response.h
  118. omaha_response_handler_action.cc
  119. omaha_response_handler_action.h
  120. omaha_response_handler_action_unittest.cc
  121. omaha_utils.cc
  122. omaha_utils.h
  123. omaha_utils_unittest.cc
  124. OWNERS
  125. p2p_manager.cc
  126. p2p_manager.h
  127. p2p_manager_unittest.cc
  128. parcelable_update_engine_status.cc
  129. parcelable_update_engine_status.h
  130. parcelable_update_engine_status_unittest.cc
  131. payload_state.cc
  132. payload_state.h
  133. payload_state_interface.h
  134. payload_state_unittest.cc
  135. power_manager_android.cc
  136. power_manager_android.h
  137. power_manager_chromeos.cc
  138. power_manager_chromeos.h
  139. power_manager_interface.h
  140. PRESUBMIT.cfg
  141. PREUPLOAD.cfg
  142. proxy_resolver.cc
  143. proxy_resolver.h
  144. proxy_resolver_unittest.cc
  145. pylintrc
  146. real_system_state.cc
  147. real_system_state.h
  148. run_unittests
  149. sample_omaha_v3_response.xml
  150. service_delegate_android_interface.h
  151. service_observer_interface.h
  152. shill_proxy.cc
  153. shill_proxy.h
  154. shill_proxy_interface.h
  155. sideload_main.cc
  156. system_state.h
  157. tar_bunzip2.gypi
  158. test_http_server.cc
  159. test_subprocess.cc
  160. testrunner.cc
  161. unittest_key.pem
  162. unittest_key2.pem
  163. update_attempter.cc
  164. update_attempter.h
  165. update_attempter_android.cc
  166. update_attempter_android.h
  167. update_attempter_android_unittest.cc
  168. update_attempter_unittest.cc
  169. update_engine-client.gyp
  170. update_engine.conf
  171. update_engine.gyp
  172. update_engine.rc
  173. update_engine_client.cc
  174. update_engine_client_android.cc
  175. update_metadata.proto
  176. update_status_utils.cc
  177. update_status_utils.h
  178. UpdateEngine.conf
  179. utils_android.cc
  180. utils_android.h