summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download/save_file_manager.cc
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-26 18:47:05 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-26 18:47:05 +0000
commitea0b6116e94fb7bbedac074d534ee8c070384ecc (patch)
tree11304c682f4bba6e6197f6c51717198da549401b /chrome/browser/download/save_file_manager.cc
parent0b6af7774219645c8c62efde75b9e38fc8451691 (diff)
downloadchromium_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.cc12
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(