update_engine: Don't sent <ping a=-1 r=-1> once the device was powerwashed.

When a device is first activated, a <ping a=-1 r=-1> is sent to Omaha
indicating this is a new device activation. After that point, the
active days count will be positive since Omaha sends back the daystart
tag which will be used in the future to compute the non-negative
"a=" and "r=" values.

Nevertheless, when a device is powerwashed, the daystart data is lost
and the first login will trigger a "new device" activation, counting
the same device as two activations in the Omaha side.

This patch uses the powerwash_count file stored in stateful partition
to detect if the new device activation is performed on a device that
was powerwashed at some point and thus doesn't send the a=-1 and r=-1
ping to Omaha. The powerwash_count is generated or incremented
whenever a "safe" powerwash is performed (such as the one that
update_engine triggers on some channel changes). Going to dev mode
and back, going through recovery with an USB key or doing a
"factory" powerwash (done in the factory) *will* wipe this powerwash
count and send the device back to a factory state.

BUG=chromium:428792
TEST=Manual test.

Manual test procude:
1. Run recovery. Check /mnt/stateful_partition/unencrypted/preserve/powerwash_count
   is not present.
2. Login for the first time.
3. Check /var/log/update_engine.log shows a '<ping' with 'a="-1" r="-1"' being sent.
4. Powerwash ( echo "safe fast keepimg" > /mnt/stateful_partition/factory_install_reset )
5. Reboot
6. Login for the first time again.
7. Check /var/log/update_engine.log shows doesn't show a '<ping' with 'a="-1" r="-1"'

Change-Id: I1a823040d2da43b93f14241bc521087ce2a2d4f2
Reviewed-on: https://chromium-review.googlesource.com/226716
Reviewed-by: Gilad Arnold <garnold@chromium.org>
Commit-Queue: Alex Deymo <deymo@chromium.org>
Tested-by: Alex Deymo <deymo@chromium.org>
8 files changed
tree: e4eca28fcd08576c64d92124a2013584c6d879db
  1. init/
  2. payload_generator/
  3. update_manager/
  4. .gitignore
  5. action.h
  6. action_mock.h
  7. action_pipe.h
  8. action_pipe_unittest.cc
  9. action_processor.cc
  10. action_processor.h
  11. action_processor_mock.h
  12. action_processor_unittest.cc
  13. action_unittest.cc
  14. build
  15. bzip.cc
  16. bzip.h
  17. bzip_extent_writer.cc
  18. bzip_extent_writer.h
  19. bzip_extent_writer_unittest.cc
  20. certificate_checker.cc
  21. certificate_checker.h
  22. certificate_checker_mock.h
  23. certificate_checker_unittest.cc
  24. chrome_browser_proxy_resolver.cc
  25. chrome_browser_proxy_resolver.h
  26. chrome_browser_proxy_resolver_unittest.cc
  27. clock.cc
  28. clock.h
  29. clock_interface.h
  30. connection_manager.cc
  31. connection_manager.h
  32. connection_manager_unittest.cc
  33. constants.cc
  34. constants.h
  35. dbus_constants.h
  36. dbus_service.cc
  37. dbus_service.h
  38. dbus_wrapper_interface.h
  39. delta_performer.cc
  40. delta_performer.h
  41. delta_performer_unittest.cc
  42. download_action.cc
  43. download_action.h
  44. download_action_unittest.cc
  45. error_code.h
  46. extent_ranges.cc
  47. extent_ranges.h
  48. extent_ranges_unittest.cc
  49. extent_writer.cc
  50. extent_writer.h
  51. extent_writer_unittest.cc
  52. fake_clock.h
  53. fake_hardware.h
  54. fake_p2p_manager.h
  55. fake_p2p_manager_configuration.h
  56. fake_prefs.cc
  57. fake_prefs.h
  58. fake_system_state.cc
  59. fake_system_state.h
  60. file_descriptor.cc
  61. file_descriptor.h
  62. file_writer.cc
  63. file_writer.h
  64. file_writer_mock.h
  65. file_writer_unittest.cc
  66. filesystem_copier_action.cc
  67. filesystem_copier_action.h
  68. filesystem_copier_action_unittest.cc
  69. gen_coverage_html
  70. glib_utils.cc
  71. glib_utils.h
  72. hardware.cc
  73. hardware.h
  74. hardware_interface.h
  75. http_common.cc
  76. http_common.h
  77. http_fetcher.cc
  78. http_fetcher.h
  79. http_fetcher_unittest.cc
  80. hwid_override.cc
  81. hwid_override.h
  82. hwid_override_unittest.cc
  83. install_plan.cc
  84. install_plan.h
  85. libcurl_http_fetcher.cc
  86. libcurl_http_fetcher.h
  87. local_coverage_rate
  88. main.cc
  89. metrics.cc
  90. metrics.h
  91. mock_connection_manager.h
  92. mock_dbus_wrapper.h
  93. mock_file_writer.h
  94. mock_hardware.h
  95. mock_http_fetcher.cc
  96. mock_http_fetcher.h
  97. mock_omaha_request_params.h
  98. mock_p2p_manager.h
  99. mock_payload_state.h
  100. mock_update_attempter.h
  101. multi_range_http_fetcher.cc
  102. multi_range_http_fetcher.h
  103. omaha_hash_calculator.cc
  104. omaha_hash_calculator.h
  105. omaha_hash_calculator_unittest.cc
  106. omaha_request_action.cc
  107. omaha_request_action.h
  108. omaha_request_action_unittest.cc
  109. omaha_request_params.cc
  110. omaha_request_params.h
  111. omaha_request_params_unittest.cc
  112. omaha_response.h
  113. omaha_response_handler_action.cc
  114. omaha_response_handler_action.h
  115. omaha_response_handler_action_unittest.cc
  116. OWNERS
  117. p2p_manager.cc
  118. p2p_manager.h
  119. p2p_manager_unittest.cc
  120. payload_constants.cc
  121. payload_constants.h
  122. payload_state.cc
  123. payload_state.h
  124. payload_state_interface.h
  125. payload_state_unittest.cc
  126. payload_verifier.cc
  127. payload_verifier.h
  128. postinstall_runner_action.cc
  129. postinstall_runner_action.h
  130. postinstall_runner_action_unittest.cc
  131. prefs.cc
  132. prefs.h
  133. prefs_interface.h
  134. prefs_mock.h
  135. prefs_unittest.cc
  136. proxy_resolver.cc
  137. proxy_resolver.h
  138. real_dbus_wrapper.h
  139. real_system_state.cc
  140. real_system_state.h
  141. run_unittests
  142. sample_omaha_v3_response.xml
  143. subprocess.cc
  144. subprocess.h
  145. subprocess_unittest.cc
  146. system_state.h
  147. terminator.cc
  148. terminator.h
  149. terminator_unittest.cc
  150. test_http_server.cc
  151. test_utils.cc
  152. test_utils.h
  153. testrunner.cc
  154. unittest_key.pem
  155. unittest_key2.pem
  156. update_attempter.cc
  157. update_attempter.h
  158. update_attempter_unittest.cc
  159. update_engine.gyp
  160. update_engine.xml
  161. update_engine_client.cc
  162. update_metadata.proto
  163. UpdateEngine.conf
  164. utils.cc
  165. utils.h
  166. utils_unittest.cc
  167. WATCHLISTS
  168. zip_unittest.cc