| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #include "chrome/browser/download/save_file_manager.h" | 7 #include "chrome/browser/download/save_file_manager.h" |
| 8 | 8 |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/stl_util-inl.h" | 11 #include "base/stl_util-inl.h" |
| 12 #include "base/string_util.h" | 12 #include "base/string_util.h" |
| 13 #include "base/task.h" | 13 #include "base/task.h" |
| 14 #include "base/threading/thread.h" | 14 #include "base/threading/thread.h" |
| 15 #include "chrome/browser/download/download_manager.h" |
| 16 #include "chrome/browser/download/download_prefs.h" |
| 15 #include "chrome/browser/download/save_file.h" | 17 #include "chrome/browser/download/save_file.h" |
| 16 #include "chrome/browser/download/save_package.h" | 18 #include "chrome/browser/download/save_package.h" |
| 17 #include "chrome/browser/platform_util.h" | 19 #include "chrome/browser/platform_util.h" |
| 20 #include "chrome/browser/profiles/profile.h" |
| 18 #include "chrome/browser/tab_contents/tab_util.h" | 21 #include "chrome/browser/tab_contents/tab_util.h" |
| 19 #include "chrome/browser/ui/download/download_tab_helper.h" | 22 #include "chrome/browser/ui/download/download_tab_helper.h" |
| 20 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 23 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 21 #include "chrome/common/chrome_paths.h" | 24 #include "chrome/common/chrome_paths.h" |
| 22 #include "content/browser/browser_thread.h" | 25 #include "content/browser/browser_thread.h" |
| 23 #include "content/browser/renderer_host/resource_dispatcher_host.h" | 26 #include "content/browser/renderer_host/resource_dispatcher_host.h" |
| 24 #include "content/browser/tab_contents/tab_contents.h" | 27 #include "content/browser/tab_contents/tab_contents.h" |
| 25 #include "googleurl/src/gurl.h" | 28 #include "googleurl/src/gurl.h" |
| 26 #include "net/base/net_util.h" | 29 #include "net/base/net_util.h" |
| 27 #include "net/base/io_buffer.h" | 30 #include "net/base/io_buffer.h" |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 const GURL& url, | 121 const GURL& url, |
| 119 const GURL& referrer, | 122 const GURL& referrer, |
| 120 int render_process_host_id, | 123 int render_process_host_id, |
| 121 int render_view_id, | 124 int render_view_id, |
| 122 SaveFileCreateInfo::SaveFileSource save_source, | 125 SaveFileCreateInfo::SaveFileSource save_source, |
| 123 const FilePath& file_full_path, | 126 const FilePath& file_full_path, |
| 124 const content::ResourceContext& context, | 127 const content::ResourceContext& context, |
| 125 SavePackage* save_package) { | 128 SavePackage* save_package) { |
| 126 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 129 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 127 | 130 |
| 131 TabContents* contents = |
| 132 tab_util::GetTabContentsByID(render_process_host_id, render_view_id); |
| 133 DownloadPrefs* download_prefs = |
| 134 contents->profile()->GetDownloadManager()->download_prefs(); |
| 135 FilePath default_download_dir = download_prefs->GetDefaultDownloadDirectory(); |
| 136 |
| 128 // Register a saving job. | 137 // Register a saving job. |
| 129 RegisterStartingRequest(url, save_package); | 138 RegisterStartingRequest(url, save_package); |
| 130 if (save_source == SaveFileCreateInfo::SAVE_FILE_FROM_NET) { | 139 if (save_source == SaveFileCreateInfo::SAVE_FILE_FROM_NET) { |
| 131 DCHECK(url.is_valid()); | 140 DCHECK(url.is_valid()); |
| 132 | 141 |
| 133 BrowserThread::PostTask( | 142 BrowserThread::PostTask( |
| 134 BrowserThread::IO, FROM_HERE, | 143 BrowserThread::IO, FROM_HERE, |
| 135 NewRunnableMethod(this, | 144 NewRunnableMethod(this, |
| 136 &SaveFileManager::OnSaveURL, | 145 &SaveFileManager::OnSaveURL, |
| 137 url, | 146 url, |
| 138 referrer, | 147 referrer, |
| 139 render_process_host_id, | 148 render_process_host_id, |
| 140 render_view_id, | 149 render_view_id, |
| 150 default_download_dir, |
| 141 &context)); | 151 &context)); |
| 142 } else { | 152 } else { |
| 143 // We manually start the save job. | 153 // We manually start the save job. |
| 144 SaveFileCreateInfo* info = new SaveFileCreateInfo(file_full_path, | 154 SaveFileCreateInfo* info = new SaveFileCreateInfo(file_full_path, |
| 145 url, | 155 url, |
| 146 save_source, | 156 save_source, |
| 147 -1); | 157 -1); |
| 148 info->render_process_id = render_process_host_id; | 158 info->render_process_id = render_process_host_id; |
| 149 info->render_view_id = render_view_id; | 159 info->render_view_id = render_view_id; |
| 150 | 160 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 | 228 |
| 219 // The IO thread created |info|, but the file thread (this method) uses it | 229 // The IO thread created |info|, but the file thread (this method) uses it |
| 220 // to create a SaveFile which will hold and finally destroy |info|. It will | 230 // to create a SaveFile which will hold and finally destroy |info|. It will |
| 221 // then passes |info| to the UI thread for reporting saving status. | 231 // then passes |info| to the UI thread for reporting saving status. |
| 222 void SaveFileManager::StartSave(SaveFileCreateInfo* info) { | 232 void SaveFileManager::StartSave(SaveFileCreateInfo* info) { |
| 223 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 233 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 224 DCHECK(info); | 234 DCHECK(info); |
| 225 SaveFile* save_file = new SaveFile(info); | 235 SaveFile* save_file = new SaveFile(info); |
| 226 | 236 |
| 227 // TODO(phajdan.jr): We should check the return value and handle errors here. | 237 // TODO(phajdan.jr): We should check the return value and handle errors here. |
| 228 save_file->Initialize(false); // No need to calculate hash. | 238 // No need to calculate hash. |
| 239 save_file->Initialize(false, info->default_download_dir); |
| 229 | 240 |
| 230 DCHECK(!LookupSaveFile(info->save_id)); | 241 DCHECK(!LookupSaveFile(info->save_id)); |
| 231 save_file_map_[info->save_id] = save_file; | 242 save_file_map_[info->save_id] = save_file; |
| 232 info->path = save_file->full_path(); | 243 info->path = save_file->full_path(); |
| 233 | 244 |
| 234 BrowserThread::PostTask( | 245 BrowserThread::PostTask( |
| 235 BrowserThread::UI, FROM_HERE, | 246 BrowserThread::UI, FROM_HERE, |
| 236 NewRunnableMethod(this, &SaveFileManager::OnStartSave, info)); | 247 NewRunnableMethod(this, &SaveFileManager::OnStartSave, info)); |
| 237 } | 248 } |
| 238 | 249 |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 save_package->SaveFailed(save_url); | 366 save_package->SaveFailed(save_url); |
| 356 } | 367 } |
| 357 | 368 |
| 358 // Notifications sent from the UI thread and run on the IO thread. | 369 // Notifications sent from the UI thread and run on the IO thread. |
| 359 | 370 |
| 360 void SaveFileManager::OnSaveURL( | 371 void SaveFileManager::OnSaveURL( |
| 361 const GURL& url, | 372 const GURL& url, |
| 362 const GURL& referrer, | 373 const GURL& referrer, |
| 363 int render_process_host_id, | 374 int render_process_host_id, |
| 364 int render_view_id, | 375 int render_view_id, |
| 376 const FilePath& default_download_dir, |
| 365 const content::ResourceContext* context) { | 377 const content::ResourceContext* context) { |
| 366 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 378 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 367 resource_dispatcher_host_->BeginSaveFile(url, | 379 resource_dispatcher_host_->BeginSaveFile(url, |
| 368 referrer, | 380 referrer, |
| 369 render_process_host_id, | 381 render_process_host_id, |
| 370 render_view_id, | 382 render_view_id, |
| 383 default_download_dir, |
| 371 *context); | 384 *context); |
| 372 } | 385 } |
| 373 | 386 |
| 374 void SaveFileManager::OnRequireSaveJobFromOtherSource( | 387 void SaveFileManager::OnRequireSaveJobFromOtherSource( |
| 375 SaveFileCreateInfo* info) { | 388 SaveFileCreateInfo* info) { |
| 376 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 389 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 377 DCHECK_EQ(info->save_id, -1); | 390 DCHECK_EQ(info->save_id, -1); |
| 378 // Generate a unique save id. | 391 // Generate a unique save id. |
| 379 info->save_id = GetNextId(); | 392 info->save_id = GetNextId(); |
| 380 // Start real saving action. | 393 // Start real saving action. |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 SaveFileMap::iterator it = save_file_map_.find(*i); | 545 SaveFileMap::iterator it = save_file_map_.find(*i); |
| 533 if (it != save_file_map_.end()) { | 546 if (it != save_file_map_.end()) { |
| 534 SaveFile* save_file = it->second; | 547 SaveFile* save_file = it->second; |
| 535 DCHECK(!save_file->in_progress()); | 548 DCHECK(!save_file->in_progress()); |
| 536 file_util::Delete(save_file->full_path(), false); | 549 file_util::Delete(save_file->full_path(), false); |
| 537 delete save_file; | 550 delete save_file; |
| 538 save_file_map_.erase(it); | 551 save_file_map_.erase(it); |
| 539 } | 552 } |
| 540 } | 553 } |
| 541 } | 554 } |
| OLD | NEW |