Index: ash/wm/dock/docked_window_resizer.cc |
diff --git a/ash/wm/dock/docked_window_resizer.cc b/ash/wm/dock/docked_window_resizer.cc |
index 9e4eb2d0b66ab85a75520662cdc12943c9041c6f..624dc72822d419af0847eb8122a95754ca4c69e9 100644 |
--- a/ash/wm/dock/docked_window_resizer.cc |
+++ b/ash/wm/dock/docked_window_resizer.cc |
@@ -64,17 +64,21 @@ DockedWindowResizer::Create(WindowResizer* next_window_resizer, |
void DockedWindowResizer::Drag(const gfx::Point& location, int event_flags) { |
last_location_ = location; |
::wm::ConvertPointToScreen(GetTarget()->parent(), &last_location_); |
+ base::WeakPtr<DockedWindowResizer> resizer(weak_ptr_factory_.GetWeakPtr()); |
+ |
if (!did_move_or_resize_) { |
did_move_or_resize_ = true; |
- StartedDragging(); |
+ StartedDragging(resizer); |
} |
+ if (!resizer) |
+ return; |
+ |
gfx::Point offset; |
gfx::Rect bounds(CalculateBoundsForDrag(location)); |
MaybeSnapToEdge(bounds, &offset); |
gfx::Point modified_location(location); |
modified_location.Offset(offset.x(), offset.y()); |
- base::WeakPtr<DockedWindowResizer> resizer(weak_ptr_factory_.GetWeakPtr()); |
next_window_resizer_->Drag(modified_location, event_flags); |
if (!resizer) |
return; |
@@ -181,7 +185,8 @@ void DockedWindowResizer::MaybeSnapToEdge(const gfx::Rect& bounds, |
} |
} |
-void DockedWindowResizer::StartedDragging() { |
+void DockedWindowResizer::StartedDragging( |
+ base::WeakPtr<DockedWindowResizer>& resizer) { |
// During resizing the window width is preserved by DockedwindowLayoutManager. |
if (is_docked_ && |
(details().bounds_change & WindowResizer::kBoundsChange_Resizes)) { |
@@ -192,6 +197,8 @@ void DockedWindowResizer::StartedDragging() { |
// At this point we are not yet animating the window as it may not be |
// inside the docked area. |
dock_layout_->StartDragging(GetTarget()); |
+ if (!resizer) |
+ return; |
// Reparent workspace windows during the drag to elevate them above workspace. |
// Other windows for which the DockedWindowResizer is instantiated include |
// panels and windows that are already docked. Those do not need reparenting. |
@@ -205,6 +212,8 @@ void DockedWindowResizer::StartedDragging() { |
wm::ReparentChildWithTransientChildren(GetTarget(), |
GetTarget()->parent(), |
docked_container); |
+ if (!resizer) |
+ return; |
} |
if (is_docked_) |
dock_layout_->DockDraggedWindow(GetTarget()); |