diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-26 18:47:05 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-26 18:47:05 +0000 |
commit | ea0b6116e94fb7bbedac074d534ee8c070384ecc (patch) | |
tree | 11304c682f4bba6e6197f6c51717198da549401b /chrome/browser/download/save_file_manager.cc | |
parent | 0b6af7774219645c8c62efde75b9e38fc8451691 (diff) | |
download | chromium_src-ea0b6116e94fb7bbedac074d534ee8c070384ecc.zip chromium_src-ea0b6116e94fb7bbedac074d534ee8c070384ecc.tar.gz chromium_src-ea0b6116e94fb7bbedac074d534ee8c070384ecc.tar.bz2 |
Fix save complete web page crasher
Repeatedly saving a page may cause a crash. See the bug for a full discussion. This fixes that by making sure the curretn SavePackage is the same one that called into SaveFileManager::RenameAllFiles.
One more hack on the giant, teetering pile of hacks that is the SavePackage system. Can't hurt, right?
BUG=42454
TEST=see bug
Review URL: http://codereview.chromium.org/1729016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45599 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/download/save_file_manager.cc')
-rw-r--r-- | chrome/browser/download/save_file_manager.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/chrome/browser/download/save_file_manager.cc b/chrome/browser/download/save_file_manager.cc index a985071..5d9ad43 100644 --- a/chrome/browser/download/save_file_manager.cc +++ b/chrome/browser/download/save_file_manager.cc @@ -473,7 +473,8 @@ void SaveFileManager::RenameAllFiles( const FinalNameList& final_names, const FilePath& resource_dir, int render_process_id, - int render_view_id) { + int render_view_id, + int save_package_id) { DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); if (!resource_dir.empty() && !file_util::PathExists(resource_dir)) @@ -495,20 +496,19 @@ void SaveFileManager::RenameAllFiles( ChromeThread::UI, FROM_HERE, NewRunnableMethod( this, &SaveFileManager::OnFinishSavePageJob, render_process_id, - render_view_id)); + render_view_id, save_package_id)); } void SaveFileManager::OnFinishSavePageJob(int render_process_id, - int render_view_id) { + int render_view_id, + int save_package_id) { DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); SavePackage* save_package = GetSavePackageFromRenderIds(render_process_id, render_view_id); - if (save_package) { - // save_package is null if save was canceled. + if (save_package && save_package->id() == save_package_id) save_package->Finish(); - } } void SaveFileManager::RemoveSavedFileFromFileMap( |