Index: cc/layers/delegated_frame_resource_collection.cc |
diff --git a/cc/layers/delegated_frame_resource_collection.cc b/cc/layers/delegated_frame_resource_collection.cc |
index cd2633dc2aec56437013b2d42dcc13374083a4ae..5ca4eda57d761bed7998ae75964a136c979ddae9 100644 |
--- a/cc/layers/delegated_frame_resource_collection.cc |
+++ b/cc/layers/delegated_frame_resource_collection.cc |
@@ -12,7 +12,8 @@ namespace cc { |
DelegatedFrameResourceCollection::DelegatedFrameResourceCollection() |
: client_(NULL), |
main_thread_runner_(BlockingTaskRunner::current()), |
- lost_all_resources_(false) { |
+ lost_all_resources_(false), |
+ weak_ptr_factory_(this) { |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
} |
@@ -112,21 +113,21 @@ void DelegatedFrameResourceCollection::RefResources( |
resource_id_ref_count_map_[resources[i].id].refs_to_wait_for++; |
} |
-ReturnCallback |
-DelegatedFrameResourceCollection::GetReturnResourcesCallbackForImplThread() { |
- return base::Bind( |
- &DelegatedFrameResourceCollection::UnrefResourcesOnImplThread, |
- this, |
- main_thread_runner_); |
-} |
- |
-void DelegatedFrameResourceCollection::UnrefResourcesOnImplThread( |
+static void UnrefResourcesOnImplThread( |
+ base::WeakPtr<DelegatedFrameResourceCollection> self, |
scoped_refptr<BlockingTaskRunner> main_thread_runner, |
const ReturnedResourceArray& returned) { |
main_thread_runner->PostTask( |
FROM_HERE, |
base::Bind( |
- &DelegatedFrameResourceCollection::UnrefResources, this, returned)); |
+ &DelegatedFrameResourceCollection::UnrefResources, self, returned)); |
+} |
+ |
+ReturnCallback |
+DelegatedFrameResourceCollection::GetReturnResourcesCallbackForImplThread() { |
+ return base::Bind(&UnrefResourcesOnImplThread, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ main_thread_runner_); |
} |
} // namespace cc |