summarylogtreecommitdiffstats
path: root/don-t-crash-on-reentrant-RunMoveLoop-call.patch
blob: d6a8f833e4d1db749e9fa0781b88e9fe2e42a57a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
From 4b05247f43d592ce748933963df923d9a40705f8 Mon Sep 17 00:00:00 2001
From: Sigurdur Asgeirsson <siggi@chromium.org>
Date: Mon, 8 Feb 2021 18:36:10 +0000
Subject: [PATCH] Don't crash on reentrant RunMoveLoop call.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Bug: 1173484
Change-Id: Ia75b200d2826586080c26089751bef1d12c8fbce
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2680089
Reviewed-by: Scott Violet <sky@chromium.org>
Commit-Queue: Sigurður Ásgeirsson <siggi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#851799}
---
 chrome/browser/ui/views/tabs/tab_drag_controller.cc | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller.cc b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
index 16c3c1e9df8c2..d2ccc2b965237 100644
--- a/chrome/browser/ui/views/tabs/tab_drag_controller.cc
+++ b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
@@ -1397,6 +1397,10 @@ void TabDragController::RunMoveLoop(const gfx::Vector2d& drag_offset) {
 
   move_loop_widget_ = GetAttachedBrowserWidget();
   DCHECK(move_loop_widget_);
+
+  // RunMoveLoop can be called reentrantly from within another RunMoveLoop,
+  // in which case the observation is already established.
+  widget_observation_.Reset();
   widget_observation_.Observe(move_loop_widget_);
   current_state_ = DragState::kDraggingWindow;
   base::WeakPtr<TabDragController> ref(weak_factory_.GetWeakPtr());