summaryrefslogtreecommitdiffstats
path: root/components/translate
diff options
context:
space:
mode:
authorjdduke <jdduke@chromium.org>2014-12-17 09:17:53 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-17 17:18:10 +0000
commit6db5e8943e6d35770ff89fe19103bdbf0d60bc21 (patch)
tree72642fda07f511ac493a650f70d340087df0aeb2 /components/translate
parent0968146e147f7e240960403220dd6a048c81d68e (diff)
downloadchromium_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.cc12
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));
}