summaryrefslogtreecommitdiffstats
path: root/base/base_drag_source.cc
diff options
context:
space:
mode:
authortc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-10 23:10:42 +0000
committertc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-10 23:10:42 +0000
commit24a4d10647ee76bae3d977caba9e8b13b5b81cf4 (patch)
treec35928b309d59b6fc60823364d4f122ca88a4c1e /base/base_drag_source.cc
parented1c9da9c46143da81c9449719b51b2b6fbc0e97 (diff)
downloadchromium_src-24a4d10647ee76bae3d977caba9e8b13b5b81cf4.zip
chromium_src-24a4d10647ee76bae3d977caba9e8b13b5b81cf4.tar.gz
chromium_src-24a4d10647ee76bae3d977caba9e8b13b5b81cf4.tar.bz2
Fix a crash that happens if a tab is closed while
we're in the middle of a drag originating from the tab. The problem is that the tab gets deleted out from under the drag operation which is happening in a nested message loop. To work around this, if we're in the middle of a drag and we get a tab close request, delay the tab close until after the drag operation is finished. BUG=16280 Review URL: http://codereview.chromium.org/149466 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20436 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/base_drag_source.cc')
-rw-r--r--base/base_drag_source.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/base/base_drag_source.cc b/base/base_drag_source.cc
index bdaab1e..bc81395 100644
--- a/base/base_drag_source.cc
+++ b/base/base_drag_source.cc
@@ -7,7 +7,7 @@
///////////////////////////////////////////////////////////////////////////////
// BaseDragSource, public:
-BaseDragSource::BaseDragSource() : ref_count_(0) {
+BaseDragSource::BaseDragSource() : ref_count_(0), cancel_drag_(false) {
}
///////////////////////////////////////////////////////////////////////////////
@@ -15,6 +15,9 @@ BaseDragSource::BaseDragSource() : ref_count_(0) {
HRESULT BaseDragSource::QueryContinueDrag(BOOL escape_pressed,
DWORD key_state) {
+ if (cancel_drag_)
+ return DRAGDROP_S_CANCEL;
+
if (escape_pressed) {
OnDragSourceCancel();
return DRAGDROP_S_CANCEL;