diff options
author | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-10 23:10:42 +0000 |
---|---|---|
committer | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-10 23:10:42 +0000 |
commit | 24a4d10647ee76bae3d977caba9e8b13b5b81cf4 (patch) | |
tree | c35928b309d59b6fc60823364d4f122ca88a4c1e /base/base_drag_source.cc | |
parent | ed1c9da9c46143da81c9449719b51b2b6fbc0e97 (diff) | |
download | chromium_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.cc | 5 |
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; |