summaryrefslogtreecommitdiffstats
path: root/content/common/net
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-26 22:05:31 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-26 22:05:31 +0000
commit8786b90ec7b8c0706ab4173faa4861f6ddc50eca (patch)
tree61a3f4349cd8154d8cf98782ffd0e122e56c17d8 /content/common/net
parent86f24311984327d522d060bceb8adacfad64c896 (diff)
downloadchromium_src-8786b90ec7b8c0706ab4173faa4861f6ddc50eca.zip
chromium_src-8786b90ec7b8c0706ab4173faa4861f6ddc50eca.tar.gz
chromium_src-8786b90ec7b8c0706ab4173faa4861f6ddc50eca.tar.bz2
Revert 128993 - Refactor BaseTimer to avoid spamming the MessageLoop with orphaned tasks.
This change maintains the same API promises*, but instead of orphaning tasks when they are stopped, the BaseTimer_Helper class holds on to the task until either (1) it expires or (2) the user requests a delay that would arrive earlier than the pending task. If the user requests a longer delay than the pending task, a followup task will be posted when the pending task fires to span the remaining time. * The one change of usage is related to threading. The threading requirements are now more strict. It is not allowed to destruct a timer on a different thread than the one used to post tasks. A thread ID DCHECK is now in place that will help catch misuse. Some existing instances are changed as part of this CL. A side effect of this change is that the BaseTimer and DelayTimer are simplified to use features of BaseTimer_Helper (which is now called Timer). As suggested in timer.h, I ran the disabled TimerTest tests from linux, and they pass consistently. I also added some new tests to verify correct run states. BUG=117451,103667,119714,119750 Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=128412 Reverted: http://src.chromium.org/viewvc/chrome?view=rev&revision=128506 Review URL: https://chromiumcodereview.appspot.com/9655006 TBR=jbates@chromium.org Review URL: https://chromiumcodereview.appspot.com/9791009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@129018 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/common/net')
-rw-r--r--content/common/net/url_fetcher_impl.cc8
1 files changed, 3 insertions, 5 deletions
diff --git a/content/common/net/url_fetcher_impl.cc b/content/common/net/url_fetcher_impl.cc
index 0e87c51..9dd3cd3 100644
--- a/content/common/net/url_fetcher_impl.cc
+++ b/content/common/net/url_fetcher_impl.cc
@@ -316,8 +316,7 @@ class URLFetcherImpl::Core
base::TimeDelta backoff_delay_;
// Timer to poll the progress of uploading for POST and PUT requests.
- // When crbug.com/119629 is fixed, scoped_ptr is not necessary here.
- scoped_ptr<base::RepeatingTimer<Core> > upload_progress_checker_timer_;
+ base::RepeatingTimer<Core> upload_progress_checker_timer_;
// Number of bytes sent so far.
int64 current_upload_bytes_;
// Number of bytes received so far.
@@ -904,8 +903,7 @@ void URLFetcherImpl::Core::StartURLRequest() {
current_upload_bytes_ = -1;
// TODO(kinaba): http://crbug.com/118103. Implement upload callback in the
// net:: layer and avoid using timer here.
- upload_progress_checker_timer_.reset(new base::RepeatingTimer<Core>());
- upload_progress_checker_timer_->Start(
+ upload_progress_checker_timer_.Start(
FROM_HERE,
base::TimeDelta::FromMilliseconds(kUploadProgressTimerInterval),
this,
@@ -1052,7 +1050,7 @@ void URLFetcherImpl::Core::NotifyMalformedContent() {
}
void URLFetcherImpl::Core::ReleaseRequest() {
- upload_progress_checker_timer_.reset();
+ upload_progress_checker_timer_.Stop();
request_.reset();
g_registry.Get().RemoveURLFetcherCore(this);
}