summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/tabs/dragged_tab_controller.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/tabs/dragged_tab_controller.cc')
-rw-r--r--chrome/browser/views/tabs/dragged_tab_controller.cc13
1 files changed, 7 insertions, 6 deletions
diff --git a/chrome/browser/views/tabs/dragged_tab_controller.cc b/chrome/browser/views/tabs/dragged_tab_controller.cc
index 38ab339..df1cd2b 100644
--- a/chrome/browser/views/tabs/dragged_tab_controller.cc
+++ b/chrome/browser/views/tabs/dragged_tab_controller.cc
@@ -108,6 +108,9 @@ DraggedTabController::~DraggedTabController() {
// bounds, it won't be able to clean up properly since its cleanup routine
// uses GetIndexForDraggedContents, which will be invalid.
view_.reset(NULL);
+ // Make sure the TabContents doesn't think we're still its delegate.
+ if (dragged_contents_ && dragged_contents_->delegate() == this)
+ dragged_contents_->set_delegate(NULL);
ChangeDraggedContents(NULL); // This removes our observer.
}
@@ -290,17 +293,15 @@ gfx::Point DraggedTabController::GetWindowCreatePoint() const {
void DraggedTabController::ChangeDraggedContents(TabContents* new_contents) {
if (dragged_contents_) {
- dragged_contents_->set_delegate(NULL);
NotificationService::current()->RemoveObserver(this,
- NOTIFY_TAB_CONTENTS_DESTROYED,
- Source<TabContents>(dragged_contents_));
+ NOTIFY_TAB_CONTENTS_DESTROYED,
+ Source<TabContents>(dragged_contents_));
}
dragged_contents_ = new_contents;
if (dragged_contents_) {
- dragged_contents_->set_delegate(this);
NotificationService::current()->AddObserver(this,
- NOTIFY_TAB_CONTENTS_DESTROYED,
- Source<TabContents>(dragged_contents_));
+ NOTIFY_TAB_CONTENTS_DESTROYED,
+ Source<TabContents>(dragged_contents_));
}
}