Index: cc/trees/proxy_main.cc |
diff --git a/cc/trees/proxy_main.cc b/cc/trees/proxy_main.cc |
index c11036c3ff32bae611bc372f7bfaf85f502ede71..cbfe99562bec1344ae99d7fff09549a42c1d507f 100644 |
--- a/cc/trees/proxy_main.cc |
+++ b/cc/trees/proxy_main.cc |
@@ -36,6 +36,7 @@ ProxyMain::ProxyMain(LayerTreeHost* layer_tree_host, |
commit_waits_for_activation_(false), |
started_(false), |
defer_commits_(false), |
+ frame_sink_bound_weak_factory_(this), |
weak_factory_(this) { |
TRACE_EVENT0("cc", "ProxyMain::ProxyMain"); |
DCHECK(task_runner_provider_); |
@@ -88,6 +89,7 @@ void ProxyMain::SetAnimationEvents(std::unique_ptr<MutatorEvents> events) { |
void ProxyMain::DidLoseCompositorFrameSink() { |
TRACE_EVENT0("cc", "ProxyMain::DidLoseCompositorFrameSink"); |
DCHECK(IsMainThread()); |
+ frame_sink_bound_weak_factory_.InvalidateWeakPtrs(); |
danakj
2017/04/18 20:58:42
I would either add a unit test for this case too o
Saman Sami
2017/04/18 21:37:13
Removed to keep things simple. If we ever need thi
|
layer_tree_host_->DidLoseCompositorFrameSink(); |
} |
@@ -298,9 +300,10 @@ bool ProxyMain::CommitToActiveTree() const { |
void ProxyMain::SetCompositorFrameSink( |
CompositorFrameSink* compositor_frame_sink) { |
ImplThreadTaskRunner()->PostTask( |
- FROM_HERE, base::BindOnce(&ProxyImpl::InitializeCompositorFrameSinkOnImpl, |
- base::Unretained(proxy_impl_.get()), |
- compositor_frame_sink)); |
+ FROM_HERE, |
+ base::BindOnce(&ProxyImpl::InitializeCompositorFrameSinkOnImpl, |
+ base::Unretained(proxy_impl_.get()), compositor_frame_sink, |
+ frame_sink_bound_weak_factory_.GetWeakPtr())); |
} |
void ProxyMain::SetVisible(bool visible) { |
@@ -479,6 +482,7 @@ bool ProxyMain::MainFrameWillHappenForTesting() { |
void ProxyMain::ReleaseCompositorFrameSink() { |
DCHECK(IsMainThread()); |
+ frame_sink_bound_weak_factory_.InvalidateWeakPtrs(); |
DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_); |
CompletionEvent completion; |
ImplThreadTaskRunner()->PostTask( |