Index: chrome/browser/metrics/metrics_service.cc |
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc |
index 14d164c8d3a8eeac812c2e0da5ba9306ad4e2f6a..4191d5cad08b1615ff40b3ff8ac811c26219ca20 100644 |
--- a/chrome/browser/metrics/metrics_service.cc |
+++ b/chrome/browser/metrics/metrics_service.cc |
@@ -264,16 +264,17 @@ struct MetricsService::ChildProcessStats { |
// Will run the provided task after finished. |
class MetricsMemoryDetails : public MemoryDetails { |
public: |
- explicit MetricsMemoryDetails(Task* completion) : completion_(completion) {} |
+ explicit MetricsMemoryDetails(const base::Closure& callback) |
+ : callback_(callback) {} |
virtual void OnDetailsAvailable() { |
- MessageLoop::current()->PostTask(FROM_HERE, completion_); |
+ MessageLoop::current()->PostTask(FROM_HERE, callback_); |
} |
private: |
~MetricsMemoryDetails() {} |
- Task* completion_; |
+ base::Closure callback_; |
DISALLOW_COPY_AND_ASSIGN(MetricsMemoryDetails); |
}; |
@@ -875,10 +876,12 @@ void MetricsService::StartScheduledUpload() { |
DCHECK(!waiting_for_asynchronus_reporting_step_); |
waiting_for_asynchronus_reporting_step_ = true; |
- Task* task = log_sender_factory_. |
- NewRunnableMethod(&MetricsService::OnMemoryDetailCollectionDone); |
+ base::Closure callback = |
+ base::Bind(&MetricsService::OnMemoryDetailCollectionDone, |
+ log_sender_factory_.GetWeakPtr()); |
- scoped_refptr<MetricsMemoryDetails> details(new MetricsMemoryDetails(task)); |
+ scoped_refptr<MetricsMemoryDetails> details( |
+ new MetricsMemoryDetails(callback)); |
details->StartFetch(); |
// Collect WebCore cache information to put into a histogram. |
@@ -902,8 +905,9 @@ void MetricsService::OnMemoryDetailCollectionDone() { |
// OnHistogramSynchronizationDone to continue processing. |
// Create a callback_task for OnHistogramSynchronizationDone. |
- Task* callback_task = log_sender_factory_.NewRunnableMethod( |
- &MetricsService::OnHistogramSynchronizationDone); |
+ base::Closure callback = base::Bind( |
+ &MetricsService::OnHistogramSynchronizationDone, |
+ log_sender_factory_.GetWeakPtr()); |
base::StatisticsRecorder::CollectHistogramStats("Browser"); |
@@ -911,7 +915,7 @@ void MetricsService::OnMemoryDetailCollectionDone() { |
// renderer processes. Wait time specifies how long to wait before absolutely |
// calling us back on the task. |
HistogramSynchronizer::FetchRendererHistogramsAsynchronously( |
- MessageLoop::current(), callback_task, |
+ MessageLoop::current(), callback, |
kMaxHistogramGatheringWaitDuration); |
} |