PM: Policy for checking whether an update can start.

This policy is based on existing logic found in the following locations
through the current update engine code base:

- UpdateAttempter::CalculateUpdateParams(), which applies various device
  policy attributes and sets the update params.

- UpdateAttempter::CalculateScatteringParams(), called by the former for
  deciding the scatter wait period for the current update. Calls
  UpdateAttempter::GenerateNewWaitingPeriod() to compute a new wait
  period.

- OmahaRequestAction::IsWallClockBasedWaitingSatisfied() and
  OmahaRequestAction::IsUpdateCheckCountBasedWaitingSatisfied, which
  check whether a scattering derived wait period has elapsed and whether
  a check threshold counter was satisfied, respectively.

- UpdateAttempter::CalculateP2PParams() and
  P2PManagerImpl::IsP2PEnabled(), which decide whether P2P can be used.

- PayloadState::ComputeCandidateUrls(), where there's logic for deciding
  whether HTTP downloads are allowed.

Note that this policy request is based on two others. One is the public
UpdateCheckAllowed(), whose positive return value invalidates the
current update attempt. The second is a private policy
UpdateScattering() that decides whether the current update attempt is
subject to scattering.

BUG=chromium:358323
TEST=Unit tests.

Change-Id: I889a3d1c10e1722585fdc1aa87fb6f9d627b60c7
Reviewed-on: https://chromium-review.googlesource.com/198781
Tested-by: Gilad Arnold <garnold@chromium.org>
Reviewed-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Gilad Arnold <garnold@chromium.org>
8 files changed
tree: 3a15430ac87d0c10103181532d319188ec0f9d0b
  1. init/
  2. payload_generator/
  3. policy_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. hardware.cc
  71. hardware.h
  72. hardware_interface.h
  73. http_common.cc
  74. http_common.h
  75. http_fetcher.cc
  76. http_fetcher.h
  77. http_fetcher_unittest.cc
  78. hwid_override.cc
  79. hwid_override.h
  80. hwid_override_unittest.cc
  81. inherit-review-settings-ok
  82. install_plan.cc
  83. install_plan.h
  84. libcurl_http_fetcher.cc
  85. libcurl_http_fetcher.h
  86. LICENSE
  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_p2p_manager.h
  98. mock_payload_state.h
  99. multi_range_http_fetcher.cc
  100. multi_range_http_fetcher.h
  101. omaha_hash_calculator.cc
  102. omaha_hash_calculator.h
  103. omaha_hash_calculator_unittest.cc
  104. omaha_request_action.cc
  105. omaha_request_action.h
  106. omaha_request_action_unittest.cc
  107. omaha_request_params.cc
  108. omaha_request_params.h
  109. omaha_request_params_unittest.cc
  110. omaha_response.h
  111. omaha_response_handler_action.cc
  112. omaha_response_handler_action.h
  113. omaha_response_handler_action_unittest.cc
  114. p2p_manager.cc
  115. p2p_manager.h
  116. p2p_manager_unittest.cc
  117. payload_constants.cc
  118. payload_constants.h
  119. payload_signer.cc
  120. payload_signer.h
  121. payload_signer_unittest.cc
  122. payload_state.cc
  123. payload_state.h
  124. payload_state_interface.h
  125. payload_state_unittest.cc
  126. postinstall_runner_action.cc
  127. postinstall_runner_action.h
  128. postinstall_runner_action_unittest.cc
  129. prefs.cc
  130. prefs.h
  131. prefs_interface.h
  132. prefs_mock.h
  133. prefs_unittest.cc
  134. proxy_resolver.cc
  135. proxy_resolver.h
  136. real_dbus_wrapper.h
  137. real_system_state.cc
  138. real_system_state.h
  139. run_unittests
  140. sample_omaha_v3_response.xml
  141. SConstruct
  142. simple_key_value_store.cc
  143. simple_key_value_store.h
  144. simple_key_value_store_unittest.cc
  145. subprocess.cc
  146. subprocess.h
  147. subprocess_unittest.cc
  148. system_state.h
  149. terminator.cc
  150. terminator.h
  151. terminator_unittest.cc
  152. test_http_server.cc
  153. test_utils.cc
  154. test_utils.h
  155. testrunner.cc
  156. unittest_key.pem
  157. unittest_key2.pem
  158. update_attempter.cc
  159. update_attempter.h
  160. update_attempter_mock.h
  161. update_attempter_unittest.cc
  162. update_check_scheduler.cc
  163. update_check_scheduler.h
  164. update_check_scheduler_unittest.cc
  165. update_engine.xml
  166. update_engine_client.cc
  167. update_metadata.proto
  168. UpdateEngine.conf
  169. utils.cc
  170. utils.h
  171. utils_unittest.cc
  172. WATCHLISTS
  173. zip_unittest.cc