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 |