Chromium Code Reviews| 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 "chrome/browser/ui/download/download_tab_helper.h" | 5 #include "chrome/browser/ui/download/download_tab_helper.h" |
| 6 | 6 |
| 7 #include "base/path_service.h" | |
| 7 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
| 8 #include "chrome/browser/download/download_manager.h" | 9 #include "chrome/browser/download/download_manager.h" |
| 10 #include "chrome/browser/download/download_prefs.h" | |
| 9 #include "chrome/browser/download/download_request_limiter.h" | 11 #include "chrome/browser/download/download_request_limiter.h" |
| 10 #include "chrome/browser/download/download_util.h" | 12 #include "chrome/browser/download/download_util.h" |
| 13 #include "chrome/browser/prefs/pref_service.h" | |
| 11 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
| 12 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" | 15 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" |
| 13 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper_delegate. h" | 16 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper_delegate. h" |
| 14 #include "chrome/browser/ui/download/download_tab_helper_delegate.h" | 17 #include "chrome/browser/ui/download/download_tab_helper_delegate.h" |
| 15 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 18 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 19 #include "chrome/common/chrome_paths.h" | |
| 20 #include "chrome/common/pref_names.h" | |
| 16 #include "chrome/common/render_messages.h" | 21 #include "chrome/common/render_messages.h" |
| 17 #include "content/browser/tab_contents/tab_contents.h" | 22 #include "content/browser/tab_contents/tab_contents.h" |
| 18 #include "content/common/view_messages.h" | 23 #include "content/common/view_messages.h" |
| 19 | 24 |
| 20 DownloadTabHelper::DownloadTabHelper(TabContentsWrapper* tab_contents) | 25 DownloadTabHelper::DownloadTabHelper(TabContentsWrapper* tab_contents) |
| 21 : TabContentsObserver(tab_contents->tab_contents()), | 26 : TabContentsObserver(tab_contents->tab_contents()), |
| 22 tab_contents_wrapper_(tab_contents), | 27 tab_contents_wrapper_(tab_contents), |
| 23 delegate_(NULL) { | 28 delegate_(NULL) { |
| 24 DCHECK(tab_contents); | 29 DCHECK(tab_contents); |
| 25 } | 30 } |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 47 // another thread. | 52 // another thread. |
| 48 save_package_ = new SavePackage(tab_contents_wrapper_); | 53 save_package_ = new SavePackage(tab_contents_wrapper_); |
| 49 save_package_->GetSaveInfo(); | 54 save_package_->GetSaveInfo(); |
| 50 } | 55 } |
| 51 | 56 |
| 52 void DownloadTabHelper::OnSaveURL(const GURL& url) { | 57 void DownloadTabHelper::OnSaveURL(const GURL& url) { |
| 53 DownloadManager* dlm = tab_contents()->profile()->GetDownloadManager(); | 58 DownloadManager* dlm = tab_contents()->profile()->GetDownloadManager(); |
| 54 dlm->DownloadUrl(url, tab_contents()->GetURL(), "", tab_contents()); | 59 dlm->DownloadUrl(url, tab_contents()->GetURL(), "", tab_contents()); |
| 55 } | 60 } |
| 56 | 61 |
| 57 // Used in automated testing to bypass prompting the user for file names. | |
| 58 // Instead, the names and paths are hard coded rather than running them through | |
| 59 // file name sanitation and extension / mime checking. | |
|
Randy Smith (Not in Mondays)
2011/06/02 19:13:57
Why delete this comment? I think it's still valid
haraken1
2011/06/03 06:50:27
Oops. I restored this comment download_tab_helper.
| |
| 60 bool DownloadTabHelper::SavePage(const FilePath& main_file, | 62 bool DownloadTabHelper::SavePage(const FilePath& main_file, |
| 61 const FilePath& dir_path, | 63 const FilePath& dir_path, |
| 62 SavePackage::SavePackageType save_type) { | 64 SavePackage::SavePackageType save_type) { |
| 63 // Stop the page from navigating. | 65 // Stop the page from navigating. |
| 64 tab_contents()->Stop(); | 66 tab_contents()->Stop(); |
| 65 | 67 |
| 66 save_package_ = | 68 save_package_ = |
| 67 new SavePackage(tab_contents_wrapper_, save_type, main_file, dir_path); | 69 new SavePackage(tab_contents_wrapper_, save_type, main_file, dir_path); |
| 70 // Skips GetSaveInfo() and directly calls Init(). | |
| 71 // We do not have to explicitly disable the select file dialog | |
| 72 // since we skip the process that can show the dialog. | |
| 68 return save_package_->Init(); | 73 return save_package_->Init(); |
| 69 } | 74 } |
| 70 | 75 |
| 76 string16 DownloadTabHelper::SavePageWithoutDialog() { | |
| 77 tab_contents()->Stop(); | |
| 78 | |
| 79 save_package_ = new SavePackage(tab_contents_wrapper_); | |
| 80 // Disables the select file dialog. | |
| 81 save_package_->SetShouldPromptUser(false); | |
| 82 // This GetSaveInfo() calls save_package_->Init() in the background. | |
| 83 save_package_->GetSaveInfo(); | |
| 84 return tab_contents()->GetTitle(); | |
| 85 } | |
| 86 | |
| 87 void DownloadTabHelper::ChangeSaveDirectoryPrefs( | |
| 88 const FilePath& website_save_dir, | |
| 89 const FilePath& download_save_dir, | |
| 90 const FilePath& default_downloads_dir, | |
| 91 const SavePackage::SavePackageType save_type) { | |
| 92 PrefService* prefs = tab_contents()->profile()->GetPrefs(); | |
| 93 | |
| 94 DCHECK(prefs->FindPreference(prefs::kDownloadDefaultDirectory)); | |
| 95 prev_download_save_dir_ = prefs->GetFilePath( | |
| 96 prefs::kDownloadDefaultDirectory); | |
| 97 | |
| 98 // Check whether the preference has the default folder for saving HTML. | |
| 99 // If not, initialize it with the default folder for downloaded files. | |
| 100 if (!prefs->FindPreference(prefs::kSaveFileDefaultDirectory)) { | |
| 101 prefs->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory, | |
| 102 prev_download_save_dir_, | |
| 103 PrefService::UNSYNCABLE_PREF); | |
| 104 } | |
| 105 prev_website_save_dir_ = prefs->GetFilePath( | |
| 106 prefs::kSaveFileDefaultDirectory); | |
| 107 | |
| 108 if (!PathService::Get( | |
| 109 chrome::DIR_DEFAULT_DOWNLOADS, &prev_default_downloads_dir_)) { | |
| 110 LOG(ERROR) << "Cannot find the user's \"Downloads\" folder."; | |
| 111 prev_default_downloads_dir_.clear(); | |
| 112 } | |
| 113 | |
| 114 DownloadPrefs* download_prefs = | |
| 115 tab_contents()->profile()->GetDownloadManager()->download_prefs(); | |
| 116 prev_save_type_ = | |
| 117 static_cast<SavePackage::SavePackageType> | |
| 118 (download_prefs->save_file_type()); | |
| 119 | |
| 120 prefs->SetFilePath(prefs::kSaveFileDefaultDirectory, website_save_dir); | |
| 121 prefs->SetFilePath(prefs::kDownloadDefaultDirectory, download_save_dir); | |
| 122 PathService::Set(chrome::DIR_DEFAULT_DOWNLOADS, default_downloads_dir); | |
| 123 prefs->SetInteger(prefs::kSaveFileType, save_type); | |
|
Randy Smith (Not in Mondays)
2011/06/02 19:13:57
It looks to me as if everything in this function c
haraken1
2011/06/03 06:50:27
Makes sense. Done.
| |
| 124 } | |
| 125 | |
| 126 void DownloadTabHelper::RestoreSaveDirectoryPrefs() { | |
| 127 PrefService* prefs = tab_contents()->profile()->GetPrefs(); | |
| 128 prefs->SetFilePath(prefs::kSaveFileDefaultDirectory, prev_website_save_dir_); | |
| 129 prefs->SetFilePath(prefs::kDownloadDefaultDirectory, prev_download_save_dir_); | |
| 130 // Restores DIR_DEFAULT_DOWNLOADS only when we could get | |
| 131 // |prev_default_downloads_dir_| successfully in ChangeSaveDirectoryPrefs(). | |
| 132 if (!prev_default_downloads_dir_.empty()) | |
| 133 PathService::Set( | |
| 134 chrome::DIR_DEFAULT_DOWNLOADS, prev_default_downloads_dir_); | |
| 135 prefs->SetInteger(prefs::kSaveFileType, prev_save_type_); | |
| 136 } | |
| 137 | |
| 71 bool DownloadTabHelper::CanDownload(int request_id) { | 138 bool DownloadTabHelper::CanDownload(int request_id) { |
| 72 if (delegate_) | 139 if (delegate_) |
| 73 return delegate_->CanDownload(request_id); | 140 return delegate_->CanDownload(request_id); |
| 74 return true; | 141 return true; |
| 75 } | 142 } |
| 76 | 143 |
| 77 void DownloadTabHelper::OnStartDownload(DownloadItem* download) { | 144 void DownloadTabHelper::OnStartDownload(DownloadItem* download) { |
| 78 DCHECK(download); | 145 DCHECK(download); |
| 79 | 146 |
| 80 BlockedContentTabHelperDelegate* blocked_content_delegate = | 147 BlockedContentTabHelperDelegate* blocked_content_delegate = |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 102 | 169 |
| 103 return handled; | 170 return handled; |
| 104 } | 171 } |
| 105 | 172 |
| 106 void DownloadTabHelper::DidGetUserGesture() { | 173 void DownloadTabHelper::DidGetUserGesture() { |
| 107 DownloadRequestLimiter* limiter = | 174 DownloadRequestLimiter* limiter = |
| 108 g_browser_process->download_request_limiter(); | 175 g_browser_process->download_request_limiter(); |
| 109 if (limiter) | 176 if (limiter) |
| 110 limiter->OnUserGesture(tab_contents()); | 177 limiter->OnUserGesture(tab_contents()); |
| 111 } | 178 } |
| OLD | NEW |