Chromium Code Reviews| Index: components/update_client/update_checker.cc |
| diff --git a/components/update_client/update_checker.cc b/components/update_client/update_checker.cc |
| index 234ef225d5c44f7552b0f834f77e51bd0ac97e95..09b22d7ce165b745303186383a7152bf71561eda 100644 |
| --- a/components/update_client/update_checker.cc |
| +++ b/components/update_client/update_checker.cc |
| @@ -18,6 +18,7 @@ |
| #include "base/strings/stringprintf.h" |
| #include "base/thread_task_runner_handle.h" |
| #include "base/threading/thread_checker.h" |
| +#include "components/update_client/component_metadata.h" |
| #include "components/update_client/configurator.h" |
| #include "components/update_client/crx_update_item.h" |
| #include "components/update_client/request_sender.h" |
| @@ -58,6 +59,7 @@ bool IsEncryptionRequired(const std::vector<CrxUpdateItem*>& items) { |
| // </app> |
| std::string BuildUpdateCheckRequest(const Configurator& config, |
| const std::vector<CrxUpdateItem*>& items, |
| + const ComponentMetadata& metadata, |
| const std::string& additional_attributes) { |
| const std::string brand(SanitizeBrand(config.GetBrand())); |
| std::string app_elements; |
| @@ -72,6 +74,8 @@ std::string BuildUpdateCheckRequest(const Configurator& config, |
| base::StringAppendF(&app, " installsource=\"ondemand\""); |
| base::StringAppendF(&app, ">"); |
| base::StringAppendF(&app, "<updatecheck />"); |
| + base::StringAppendF( |
| + &app, "<ping rd=\"%d\" />", metadata.DateLastRollCall(item->id)); |
| if (!item->component.fingerprint.empty()) { |
| base::StringAppendF(&app, |
| "<packages>" |
| @@ -92,7 +96,9 @@ std::string BuildUpdateCheckRequest(const Configurator& config, |
| class UpdateCheckerImpl : public UpdateChecker { |
| public: |
| - explicit UpdateCheckerImpl(const scoped_refptr<Configurator>& config); |
| + explicit UpdateCheckerImpl( |
|
Sorin Jianu
2016/04/07 04:03:19
explicit not needed.
waffles
2016/04/07 17:04:44
Done.
|
| + const scoped_refptr<Configurator>& config, |
| + const scoped_refptr<ComponentMetadata>& metadata); |
| ~UpdateCheckerImpl() override; |
| // Overrides for UpdateChecker. |
| @@ -102,20 +108,24 @@ class UpdateCheckerImpl : public UpdateChecker { |
| const UpdateCheckCallback& update_check_callback) override; |
| private: |
| - void OnRequestSenderComplete(int error, |
| + void OnRequestSenderComplete(scoped_ptr<std::vector<std::string>> ids_checked, |
| + int error, |
| const std::string& response, |
| int retry_after_sec); |
| base::ThreadChecker thread_checker_; |
| const scoped_refptr<Configurator> config_; |
| + const scoped_refptr<ComponentMetadata>& metadata_; |
| UpdateCheckCallback update_check_callback_; |
| scoped_ptr<RequestSender> request_sender_; |
| DISALLOW_COPY_AND_ASSIGN(UpdateCheckerImpl); |
| }; |
| -UpdateCheckerImpl::UpdateCheckerImpl(const scoped_refptr<Configurator>& config) |
| - : config_(config) {} |
| +UpdateCheckerImpl::UpdateCheckerImpl( |
| + const scoped_refptr<Configurator>& config, |
| + const scoped_refptr<ComponentMetadata>& metadata) |
| + : config_(config), metadata_(metadata) {} |
| UpdateCheckerImpl::~UpdateCheckerImpl() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -138,23 +148,35 @@ bool UpdateCheckerImpl::CheckForUpdates( |
| if (IsEncryptionRequired(items_to_check)) |
| RemoveUnsecureUrls(&urls); |
| + scoped_ptr<std::vector<std::string>> ids_checked( |
| + new std::vector<std::string>()); |
| + for (auto crx : items_to_check) { |
| + ids_checked->push_back(crx->id); |
| + } |
| request_sender_.reset(new RequestSender(config_)); |
| request_sender_->Send( |
| config_->UseCupSigning(), |
| - BuildUpdateCheckRequest(*config_, items_to_check, additional_attributes), |
| + BuildUpdateCheckRequest(*config_, items_to_check, *metadata_, |
| + additional_attributes), |
| urls, base::Bind(&UpdateCheckerImpl::OnRequestSenderComplete, |
| - base::Unretained(this))); |
| + base::Unretained(this), base::Passed(&ids_checked))); |
| return true; |
| } |
| -void UpdateCheckerImpl::OnRequestSenderComplete(int error, |
| - const std::string& response, |
| - int retry_after_sec) { |
| +void UpdateCheckerImpl::OnRequestSenderComplete( |
| + scoped_ptr<std::vector<std::string>> ids_checked, |
| + int error, |
| + const std::string& response, |
| + int retry_after_sec) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| if (!error) { |
| UpdateResponse update_response; |
| if (update_response.Parse(response)) { |
| + int daynum = update_response.results().daystart_elapsed_days; |
| + if (daynum != UpdateResponse::kNoDaystart) { |
| + metadata_->SetDateLastRollCall(*ids_checked, daynum); |
| + } |
| base::ThreadTaskRunnerHandle::Get()->PostTask( |
| FROM_HERE, base::Bind(update_check_callback_, error, |
| update_response.results(), retry_after_sec)); |
| @@ -173,8 +195,9 @@ void UpdateCheckerImpl::OnRequestSenderComplete(int error, |
| } // namespace |
| scoped_ptr<UpdateChecker> UpdateChecker::Create( |
| - const scoped_refptr<Configurator>& config) { |
| - return scoped_ptr<UpdateChecker>(new UpdateCheckerImpl(config)); |
| + const scoped_refptr<Configurator>& config, |
| + const scoped_refptr<ComponentMetadata>& metadata) { |
| + return scoped_ptr<UpdateChecker>(new UpdateCheckerImpl(config, metadata)); |
| } |
| } // namespace update_client |