diff options
author | jdduke <jdduke@chromium.org> | 2014-12-17 09:17:53 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-17 17:18:10 +0000 |
commit | 6db5e8943e6d35770ff89fe19103bdbf0d60bc21 (patch) | |
tree | 72642fda07f511ac493a650f70d340087df0aeb2 /components/translate | |
parent | 0968146e147f7e240960403220dd6a048c81d68e (diff) | |
download | chromium_src-6db5e8943e6d35770ff89fe19103bdbf0d60bc21.zip chromium_src-6db5e8943e6d35770ff89fe19103bdbf0d60bc21.tar.gz chromium_src-6db5e8943e6d35770ff89fe19103bdbf0d60bc21.tar.bz2 |
Use an exponential timeout falloff for translate CLD requests
The TranslateHelper kicks off a (potentially non-termiting) series of
requests for CLD data until it gets a valid response. As there are
(currently) no guarantees that a valid response will be received,
change the repeat timeout from a fixed 1s delay to a delay that decays
gracefully over time.
BUG=437869
Review URL: https://codereview.chromium.org/793643004
Cr-Commit-Position: refs/heads/master@{#308799}
Diffstat (limited to 'components/translate')
-rw-r--r-- | components/translate/content/renderer/translate_helper.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/components/translate/content/renderer/translate_helper.cc b/components/translate/content/renderer/translate_helper.cc index 83d9bc3..aa67a6a 100644 --- a/components/translate/content/renderer/translate_helper.cc +++ b/components/translate/content/renderer/translate_helper.cc @@ -577,6 +577,9 @@ void TranslateHelper::CancelCldDataPolling() { void TranslateHelper::SendCldDataRequest(const int delay_millis, const int next_delay_millis) { + DCHECK_GE(delay_millis, 0); + DCHECK_GT(next_delay_millis, 0); + // Terminate immediately if told to stop polling. if (cld_data_polling_canceled_) { DVLOG(1) << "Aborting CLD data request (polling canceled)"; @@ -589,6 +592,13 @@ void TranslateHelper::SendCldDataRequest(const int delay_millis, return; } + // Terminate immediately if the decayed delay is sufficiently large. + if (next_delay_millis > std::numeric_limits<int>::max() / 2) { + DVLOG(1) << "Aborting CLD data request (exceeded max number of requests)"; + cld_data_polling_started_ = false; + return; + } + if (!g_cld_callback_set) { g_cld_callback_set = true; cld_data_provider_->SetCldAvailableCallback( @@ -613,7 +623,7 @@ void TranslateHelper::SendCldDataRequest(const int delay_millis, base::Bind(&TranslateHelper::SendCldDataRequest, weak_method_factory_.GetWeakPtr(), next_delay_millis, - next_delay_millis), + next_delay_millis * 2), base::TimeDelta::FromMilliseconds(delay_millis)); } |