Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: chrome/browser/download/chrome_download_manager_delegate.cc

Issue 10263019: DownloadManagerDelegate::ShouldCompleteDownload(callback) (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/download/chrome_download_manager_delegate.h" 5 #include "chrome/browser/download/chrome_download_manager_delegate.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 CheckDownloadUrlDone(download_id, DownloadProtectionService::SAFE); 147 CheckDownloadUrlDone(download_id, DownloadProtectionService::SAFE);
148 return false; 148 return false;
149 } 149 }
150 150
151 void ChromeDownloadManagerDelegate::ChooseDownloadPath( 151 void ChromeDownloadManagerDelegate::ChooseDownloadPath(
152 WebContents* web_contents, 152 WebContents* web_contents,
153 const FilePath& suggested_path, 153 const FilePath& suggested_path,
154 int32 download_id) { 154 int32 download_id) {
155 // Deletes itself. 155 // Deletes itself.
156 #if defined(OS_CHROMEOS) 156 #if defined(OS_CHROMEOS)
157 new DownloadFilePickerChromeOS( 157 new DownloadFilePickerChromeOS
158 #else 158 #else
159 new DownloadFilePicker( 159 new DownloadFilePicker
160 #endif 160 #endif
161 download_manager_, web_contents, suggested_path, download_id); 161 (download_manager_, web_contents, suggested_path, download_id);
162 } 162 }
163 163
164 FilePath ChromeDownloadManagerDelegate::GetIntermediatePath( 164 FilePath ChromeDownloadManagerDelegate::GetIntermediatePath(
165 const FilePath& suggested_path) { 165 const FilePath& suggested_path) {
166 return download_util::GetCrDownloadPath(suggested_path); 166 return download_util::GetCrDownloadPath(suggested_path);
167 } 167 }
168 168
169 WebContents* ChromeDownloadManagerDelegate:: 169 WebContents* ChromeDownloadManagerDelegate::
170 GetAlternativeWebContentsToNotifyForDownload() { 170 GetAlternativeWebContentsToNotifyForDownload() {
171 #if defined(OS_ANDROID) 171 #if defined(OS_ANDROID)
(...skipping 14 matching lines...) Expand all
186 FilePath::StringType extension = path.Extension(); 186 FilePath::StringType extension = path.Extension();
187 if (extension.empty()) 187 if (extension.empty())
188 return false; 188 return false;
189 if (Extension::IsExtension(path)) 189 if (Extension::IsExtension(path))
190 return false; 190 return false;
191 DCHECK(extension[0] == FilePath::kExtensionSeparator); 191 DCHECK(extension[0] == FilePath::kExtensionSeparator);
192 extension.erase(0, 1); 192 extension.erase(0, 1);
193 return download_prefs_->IsAutoOpenEnabledForExtension(extension); 193 return download_prefs_->IsAutoOpenEnabledForExtension(extension);
194 } 194 }
195 195
196 bool ChromeDownloadManagerDelegate::ShouldCompleteDownload(DownloadItem* item) { 196 bool ChromeDownloadManagerDelegate::ShouldCompleteDownload(
197 DownloadItem* item,
198 const base::Closure& maybe_complete_download) {
197 #if defined(ENABLE_SAFE_BROWSING) 199 #if defined(ENABLE_SAFE_BROWSING)
198 // See if there is already a pending SafeBrowsing check for that download. 200 // See if there is already a pending SafeBrowsing check for that download.
199 SafeBrowsingState* state = static_cast<SafeBrowsingState*>( 201 SafeBrowsingState* state = static_cast<SafeBrowsingState*>(
200 item->GetExternalData(&safe_browsing_id)); 202 item->GetExternalData(&safe_browsing_id));
201 if (state) 203 if (state)
202 // Don't complete the download until we have an answer. 204 // Don't complete the download until we have an answer.
203 return !state->pending; 205 return !state->pending;
204 206
205 // Begin the safe browsing download protection check. 207 // Begin the safe browsing download protection check.
206 DownloadProtectionService* service = GetDownloadProtectionService(); 208 DownloadProtectionService* service = GetDownloadProtectionService();
207 if (service) { 209 if (service) {
208 VLOG(2) << __FUNCTION__ << "() Start SB download check for download = " 210 VLOG(2) << __FUNCTION__ << "() Start SB download check for download = "
209 << item->DebugString(false); 211 << item->DebugString(false);
210 state = new SafeBrowsingState(); 212 state = new SafeBrowsingState();
211 state->pending = true; 213 state->pending = true;
212 state->verdict = DownloadProtectionService::SAFE; 214 state->verdict = DownloadProtectionService::SAFE;
asanka 2012/05/01 15:54:10 Also store the Closure in |state| and invoke it fr
benjhayden 2012/05/01 18:02:52 Done.
213 item->SetExternalData(&safe_browsing_id, state); 215 item->SetExternalData(&safe_browsing_id, state);
214 service->CheckClientDownload( 216 service->CheckClientDownload(
215 DownloadProtectionService::DownloadInfo::FromDownloadItem(*item), 217 DownloadProtectionService::DownloadInfo::FromDownloadItem(*item),
216 base::Bind( 218 base::Bind(
217 &ChromeDownloadManagerDelegate::CheckClientDownloadDone, 219 &ChromeDownloadManagerDelegate::CheckClientDownloadDone,
218 this, 220 this,
219 item->GetId())); 221 item->GetId()));
220 return false; 222 return false;
221 } 223 }
222 #endif 224 #endif
223 #if defined(OS_CHROMEOS) 225 #if defined(OS_CHROMEOS)
224 // If there's a GData upload associated with this download, we wait until that 226 // If there's a GData upload associated with this download, we wait until that
225 // is complete before allowing the download item to complete. 227 // is complete before allowing the download item to complete.
226 if (!gdata::GDataDownloadObserver::IsReadyToComplete(item)) 228 if (!gdata::GDataDownloadObserver::IsReadyToComplete(
229 item, maybe_complete_download))
227 return false; 230 return false;
228 #endif 231 #endif
229 return true; 232 return true;
230 } 233 }
231 234
232 bool ChromeDownloadManagerDelegate::ShouldOpenDownload(DownloadItem* item) { 235 bool ChromeDownloadManagerDelegate::ShouldOpenDownload(DownloadItem* item) {
233 if (IsExtensionDownload(item)) { 236 if (IsExtensionDownload(item)) {
234 scoped_refptr<CrxInstaller> crx_installer = 237 scoped_refptr<CrxInstaller> crx_installer =
235 download_crx_util::OpenChromeExtension(profile_, *item); 238 download_crx_util::OpenChromeExtension(profile_, *item);
236 239
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 int32 download_id, int64 db_handle) { 703 int32 download_id, int64 db_handle) {
701 // It's not immediately obvious, but HistoryBackend::CreateDownload() can 704 // It's not immediately obvious, but HistoryBackend::CreateDownload() can
702 // call this function with an invalid |db_handle|. For instance, this can 705 // call this function with an invalid |db_handle|. For instance, this can
703 // happen when the history database is offline. We cannot have multiple 706 // happen when the history database is offline. We cannot have multiple
704 // DownloadItems with the same invalid db_handle, so we need to assign a 707 // DownloadItems with the same invalid db_handle, so we need to assign a
705 // unique |db_handle| here. 708 // unique |db_handle| here.
706 if (db_handle == DownloadItem::kUninitializedHandle) 709 if (db_handle == DownloadItem::kUninitializedHandle)
707 db_handle = download_history_->GetNextFakeDbHandle(); 710 db_handle = download_history_->GetNextFakeDbHandle();
708 download_manager_->OnItemAddedToPersistentStore(download_id, db_handle); 711 download_manager_->OnItemAddedToPersistentStore(download_id, db_handle);
709 } 712 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698