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

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

Issue 8503018: Split DownloadItem into an ABC, an Impl, and a Mock. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: CamelCase Created 9 years, 1 month 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) 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/download/chrome_download_manager_delegate.h" 5 #include "chrome/browser/download/chrome_download_manager_delegate.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile) 45 ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile)
46 : profile_(profile), 46 : profile_(profile),
47 download_prefs_(new DownloadPrefs(profile->GetPrefs())) { 47 download_prefs_(new DownloadPrefs(profile->GetPrefs())) {
48 } 48 }
49 49
50 ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() { 50 ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() {
51 } 51 }
52 52
53 bool ChromeDownloadManagerDelegate::IsExtensionDownload( 53 bool ChromeDownloadManagerDelegate::IsExtensionDownload(
54 const DownloadItem* item) { 54 const DownloadItem* item) {
55 if (item->prompt_user_for_save_location()) 55 if (item->PromptUserForSaveLocation())
56 return false; 56 return false;
57 57
58 return (item->mime_type() == Extension::kMimeType) || 58 return (item->GetMimeType() == Extension::kMimeType) ||
59 UserScript::IsURLUserScript(item->GetURL(), item->mime_type()); 59 UserScript::IsURLUserScript(item->GetURL(), item->GetMimeType());
60 } 60 }
61 61
62 void ChromeDownloadManagerDelegate::SetDownloadManager(DownloadManager* dm) { 62 void ChromeDownloadManagerDelegate::SetDownloadManager(DownloadManager* dm) {
63 download_manager_ = dm; 63 download_manager_ = dm;
64 download_history_.reset(new DownloadHistory(profile_)); 64 download_history_.reset(new DownloadHistory(profile_));
65 download_history_->Load( 65 download_history_->Load(
66 base::Bind(&DownloadManager::OnPersistentStoreQueryComplete, 66 base::Bind(&DownloadManager::OnPersistentStoreQueryComplete,
67 base::Unretained(dm))); 67 base::Unretained(dm)));
68 } 68 }
69 69
(...skipping 12 matching lines...) Expand all
82 // thread. 82 // thread.
83 DownloadItem* download = 83 DownloadItem* download =
84 download_manager_->GetActiveDownloadItem(download_id); 84 download_manager_->GetActiveDownloadItem(download_id);
85 if (!download) 85 if (!download)
86 return false; 86 return false;
87 87
88 #if defined(ENABLE_SAFE_BROWSING) 88 #if defined(ENABLE_SAFE_BROWSING)
89 // Create a client to verify download URL with safebrowsing. 89 // Create a client to verify download URL with safebrowsing.
90 // It deletes itself after the callback. 90 // It deletes itself after the callback.
91 scoped_refptr<DownloadSBClient> sb_client = new DownloadSBClient( 91 scoped_refptr<DownloadSBClient> sb_client = new DownloadSBClient(
92 download_id, download->url_chain(), download->referrer_url(), 92 download_id, download->GetUrlChain(), download->GetReferrerUrl(),
93 profile_->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)); 93 profile_->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled));
94 sb_client->CheckDownloadUrl( 94 sb_client->CheckDownloadUrl(
95 base::Bind(&ChromeDownloadManagerDelegate::CheckDownloadUrlDone, 95 base::Bind(&ChromeDownloadManagerDelegate::CheckDownloadUrlDone,
96 base::Unretained(this))); 96 base::Unretained(this)));
97 #else 97 #else
98 CheckDownloadUrlDone(download_id, false); 98 CheckDownloadUrlDone(download_id, false);
99 #endif 99 #endif
100 return false; 100 return false;
101 } 101 }
102 102
(...skipping 11 matching lines...) Expand all
114 FilePath* intermediate_path) { 114 FilePath* intermediate_path) {
115 if (item->IsDangerous()) { 115 if (item->IsDangerous()) {
116 // The download is not safe. It's name is already set to an intermediate 116 // The download is not safe. It's name is already set to an intermediate
117 // name, so no need to override. 117 // name, so no need to override.
118 return false; 118 return false;
119 } 119 }
120 120
121 // The download is a safe download. We need to rename it to its intermediate 121 // The download is a safe download. We need to rename it to its intermediate
122 // '.crdownload' path. The final name after user confirmation will be set 122 // '.crdownload' path. The final name after user confirmation will be set
123 // from DownloadItem::OnDownloadCompleting. 123 // from DownloadItem::OnDownloadCompleting.
124 *intermediate_path = download_util::GetCrDownloadPath(item->full_path()); 124 *intermediate_path = download_util::GetCrDownloadPath(item->GetFullPath());
125 return true; 125 return true;
126 } 126 }
127 127
128 TabContents* ChromeDownloadManagerDelegate:: 128 TabContents* ChromeDownloadManagerDelegate::
129 GetAlternativeTabContentsToNotifyForDownload() { 129 GetAlternativeTabContentsToNotifyForDownload() {
130 // Start the download in the last active browser. This is not ideal but better 130 // Start the download in the last active browser. This is not ideal but better
131 // than fully hiding the download from the user. 131 // than fully hiding the download from the user.
132 Browser* last_active = BrowserList::GetLastActiveWithProfile(profile_); 132 Browser* last_active = BrowserList::GetLastActiveWithProfile(profile_);
133 return last_active ? last_active->GetSelectedTabContents() : NULL; 133 return last_active ? last_active->GetSelectedTabContents() : NULL;
134 } 134 }
(...skipping 21 matching lines...) Expand all
156 // Begin the safe browsing download protection check. 156 // Begin the safe browsing download protection check.
157 SafeBrowsingService* sb_service = 157 SafeBrowsingService* sb_service =
158 g_browser_process->safe_browsing_service(); 158 g_browser_process->safe_browsing_service();
159 if (sb_service && sb_service->download_protection_service() && 159 if (sb_service && sb_service->download_protection_service() &&
160 profile_->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) { 160 profile_->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) {
161 using safe_browsing::DownloadProtectionService; 161 using safe_browsing::DownloadProtectionService;
162 sb_service->download_protection_service()->CheckClientDownload( 162 sb_service->download_protection_service()->CheckClientDownload(
163 DownloadProtectionService::DownloadInfo::FromDownloadItem(*item), 163 DownloadProtectionService::DownloadInfo::FromDownloadItem(*item),
164 base::Bind( 164 base::Bind(
165 &ChromeDownloadManagerDelegate::CheckClientDownloadDone, 165 &ChromeDownloadManagerDelegate::CheckClientDownloadDone,
166 this, item->id())); 166 this, item->GetId()));
167 // For now, we won't delay the download for this. 167 // For now, we won't delay the download for this.
168 } 168 }
169 #else 169 #else
170 // Assume safe. 170 // Assume safe.
171 #endif 171 #endif
172 172
173 return true; 173 return true;
174 } 174 }
175 175
176 scoped_refptr<CrxInstaller> crx_installer = 176 scoped_refptr<CrxInstaller> crx_installer =
177 download_crx_util::OpenChromeExtension(profile_, *item); 177 download_crx_util::OpenChromeExtension(profile_, *item);
178 178
179 // CRX_INSTALLER_DONE will fire when the install completes. Observe() 179 // CRX_INSTALLER_DONE will fire when the install completes. Observe()
180 // will call DelayedDownloadOpened() on this item. If this DownloadItem is 180 // will call DelayedDownloadOpened() on this item. If this DownloadItem is
181 // not around when CRX_INSTALLER_DONE fires, Complete() will not be called. 181 // not around when CRX_INSTALLER_DONE fires, Complete() will not be called.
182 registrar_.Add(this, 182 registrar_.Add(this,
183 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 183 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
184 content::Source<CrxInstaller>(crx_installer.get())); 184 content::Source<CrxInstaller>(crx_installer.get()));
185 185
186 crx_installers_[crx_installer.get()] = item->id(); 186 crx_installers_[crx_installer.get()] = item->GetId();
187 // The status text and percent complete indicator will change now 187 // The status text and percent complete indicator will change now
188 // that we are installing a CRX. Update observers so that they pick 188 // that we are installing a CRX. Update observers so that they pick
189 // up the change. 189 // up the change.
190 item->UpdateObservers(); 190 item->UpdateObservers();
191 return false; 191 return false;
192 } 192 }
193 193
194 bool ChromeDownloadManagerDelegate::GenerateFileHash() { 194 bool ChromeDownloadManagerDelegate::GenerateFileHash() {
195 #if defined(ENABLE_SAFE_BROWSING) 195 #if defined(ENABLE_SAFE_BROWSING)
196 return profile_->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled) && 196 return profile_->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled) &&
197 g_browser_process->safe_browsing_service()->DownloadBinHashNeeded(); 197 g_browser_process->safe_browsing_service()->DownloadBinHashNeeded();
198 #else 198 #else
199 return false; 199 return false;
200 #endif 200 #endif
201 } 201 }
202 202
203 void ChromeDownloadManagerDelegate::OnResponseCompleted(DownloadItem* item) { 203 void ChromeDownloadManagerDelegate::OnResponseCompleted(DownloadItem* item) {
204 #if defined(ENABLE_SAFE_BROWSING) 204 #if defined(ENABLE_SAFE_BROWSING)
205 // When hash is not available, it means either it is not calculated 205 // When hash is not available, it means either it is not calculated
206 // or there is error while it is calculated. We will skip the download hash 206 // or there is error while it is calculated. We will skip the download hash
207 // check in that case. 207 // check in that case.
208 if (item->hash().empty()) 208 if (item->GetHash().empty())
209 return; 209 return;
210 210
211 scoped_refptr<DownloadSBClient> sb_client = 211 scoped_refptr<DownloadSBClient> sb_client =
212 new DownloadSBClient(item->id(), 212 new DownloadSBClient(item->GetId(),
213 item->url_chain(), 213 item->GetUrlChain(),
214 item->referrer_url(), 214 item->GetReferrerUrl(),
215 profile_->GetPrefs()->GetBoolean( 215 profile_->GetPrefs()->GetBoolean(
216 prefs::kSafeBrowsingEnabled)); 216 prefs::kSafeBrowsingEnabled));
217 sb_client->CheckDownloadHash( 217 sb_client->CheckDownloadHash(
218 item->hash(), 218 item->GetHash(),
219 base::Bind(&ChromeDownloadManagerDelegate::CheckDownloadHashDone, 219 base::Bind(&ChromeDownloadManagerDelegate::CheckDownloadHashDone,
220 base::Unretained(this))); 220 base::Unretained(this)));
221 #endif 221 #endif
222 } 222 }
223 223
224 void ChromeDownloadManagerDelegate::AddItemToPersistentStore( 224 void ChromeDownloadManagerDelegate::AddItemToPersistentStore(
225 DownloadItem* item) { 225 DownloadItem* item) {
226 download_history_->AddEntry(item, 226 download_history_->AddEntry(item,
227 base::Bind(&ChromeDownloadManagerDelegate::OnItemAddedToPersistentStore, 227 base::Bind(&ChromeDownloadManagerDelegate::OnItemAddedToPersistentStore,
228 base::Unretained(this))); 228 base::Unretained(this)));
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 311
312 DownloadItem* download = 312 DownloadItem* download =
313 download_manager_->GetActiveDownloadItem(download_id); 313 download_manager_->GetActiveDownloadItem(download_id);
314 if (!download) 314 if (!download)
315 return; 315 return;
316 316
317 if (is_dangerous_url) 317 if (is_dangerous_url)
318 download->MarkUrlDangerous(); 318 download->MarkUrlDangerous();
319 319
320 download_history_->CheckVisitedReferrerBefore( 320 download_history_->CheckVisitedReferrerBefore(
321 download_id, download->referrer_url(), 321 download_id, download->GetReferrerUrl(),
322 base::Bind(&ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone, 322 base::Bind(&ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone,
323 base::Unretained(this))); 323 base::Unretained(this)));
324 } 324 }
325 325
326 // content::NotificationObserver implementation. 326 // content::NotificationObserver implementation.
327 void ChromeDownloadManagerDelegate::Observe( 327 void ChromeDownloadManagerDelegate::Observe(
328 int type, 328 int type,
329 const content::NotificationSource& source, 329 const content::NotificationSource& source,
330 const content::NotificationDetails& details) { 330 const content::NotificationDetails& details) {
331 DCHECK(type == chrome::NOTIFICATION_CRX_INSTALLER_DONE); 331 DCHECK(type == chrome::NOTIFICATION_CRX_INSTALLER_DONE);
(...skipping 16 matching lines...) Expand all
348 bool visited_referrer_before) { 348 bool visited_referrer_before) {
349 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 349 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
350 350
351 DownloadItem* download = 351 DownloadItem* download =
352 download_manager_->GetActiveDownloadItem(download_id); 352 download_manager_->GetActiveDownloadItem(download_id);
353 if (!download) 353 if (!download)
354 return; 354 return;
355 355
356 // Check whether this download is for an extension install or not. 356 // Check whether this download is for an extension install or not.
357 // Allow extensions to be explicitly saved. 357 // Allow extensions to be explicitly saved.
358 DownloadStateInfo state = download->state_info(); 358 DownloadStateInfo state = download->GetStateInfo();
359 359
360 if (state.force_file_name.empty()) { 360 if (state.force_file_name.empty()) {
361 FilePath generated_name; 361 FilePath generated_name;
362 download_util::GenerateFileNameFromRequest(*download, 362 download_util::GenerateFileNameFromRequest(*download,
363 &generated_name); 363 &generated_name);
364 364
365 // Freeze the user's preference for showing a Save As dialog. We're going 365 // Freeze the user's preference for showing a Save As dialog. We're going
366 // to bounce around a bunch of threads and we don't want to worry about race 366 // to bounce around a bunch of threads and we don't want to worry about race
367 // conditions where the user changes this pref out from under us. 367 // conditions where the user changes this pref out from under us.
368 if (download_prefs_->PromptForDownload()) { 368 if (download_prefs_->PromptForDownload()) {
(...skipping 30 matching lines...) Expand all
399 IsDangerousFile(*download, state, visited_referrer_before); 399 IsDangerousFile(*download, state, visited_referrer_before);
400 } 400 }
401 401
402 // We need to move over to the download thread because we don't want to stat 402 // We need to move over to the download thread because we don't want to stat
403 // the suggested path on the UI thread. 403 // the suggested path on the UI thread.
404 // We can only access preferences on the UI thread, so check the download path 404 // We can only access preferences on the UI thread, so check the download path
405 // now and pass the value to the FILE thread. 405 // now and pass the value to the FILE thread.
406 BrowserThread::PostTask( 406 BrowserThread::PostTask(
407 BrowserThread::FILE, FROM_HERE, 407 BrowserThread::FILE, FROM_HERE,
408 base::Bind(&ChromeDownloadManagerDelegate::CheckIfSuggestedPathExists, 408 base::Bind(&ChromeDownloadManagerDelegate::CheckIfSuggestedPathExists,
409 this, download->id(), state, 409 this, download->GetId(), state,
410 download_prefs_->download_path())); 410 download_prefs_->download_path()));
411 } 411 }
412 412
413 void ChromeDownloadManagerDelegate::CheckIfSuggestedPathExists( 413 void ChromeDownloadManagerDelegate::CheckIfSuggestedPathExists(
414 int32 download_id, 414 int32 download_id,
415 DownloadStateInfo state, 415 DownloadStateInfo state,
416 const FilePath& default_path) { 416 const FilePath& default_path) {
417 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 417 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
418 418
419 // Make sure the default download directory exists. 419 // Make sure the default download directory exists.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 517 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
518 518
519 // Anything loaded directly from the address bar is OK. 519 // Anything loaded directly from the address bar is OK.
520 if (state.transition_type & content::PAGE_TRANSITION_FROM_ADDRESS_BAR) 520 if (state.transition_type & content::PAGE_TRANSITION_FROM_ADDRESS_BAR)
521 return false; 521 return false;
522 522
523 // Extensions that are not from the gallery are considered dangerous. 523 // Extensions that are not from the gallery are considered dangerous.
524 if (IsExtensionDownload(&download)) { 524 if (IsExtensionDownload(&download)) {
525 ExtensionService* service = profile_->GetExtensionService(); 525 ExtensionService* service = profile_->GetExtensionService();
526 if (!service || !service->IsDownloadFromGallery(download.GetURL(), 526 if (!service || !service->IsDownloadFromGallery(download.GetURL(),
527 download.referrer_url())) 527 download.GetReferrerUrl()))
528 return true; 528 return true;
529 } 529 }
530 530
531 // Anything the user has marked auto-open is OK if it's user-initiated. 531 // Anything the user has marked auto-open is OK if it's user-initiated.
532 if (ShouldOpenFileBasedOnExtension(state.suggested_path) && 532 if (ShouldOpenFileBasedOnExtension(state.suggested_path) &&
533 state.has_user_gesture) 533 state.has_user_gesture)
534 return false; 534 return false;
535 535
536 // "Allow on user gesture" is OK when we have a user gesture and the hosting 536 // "Allow on user gesture" is OK when we have a user gesture and the hosting
537 // page has been visited before today. 537 // page has been visited before today.
(...skipping 20 matching lines...) Expand all
558 // TODO(noelutz): This function currently works as a callback place holder. 558 // TODO(noelutz): This function currently works as a callback place holder.
559 // Once we decide the hash check is reliable, we could move the 559 // Once we decide the hash check is reliable, we could move the
560 // MaybeCompleteDownload in OnAllDataSaved to this function. 560 // MaybeCompleteDownload in OnAllDataSaved to this function.
561 void ChromeDownloadManagerDelegate::CheckDownloadHashDone( 561 void ChromeDownloadManagerDelegate::CheckDownloadHashDone(
562 int32 download_id, 562 int32 download_id,
563 bool is_dangerous_hash) { 563 bool is_dangerous_hash) {
564 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 564 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
565 DVLOG(1) << "CheckDownloadHashDone, download_id: " << download_id 565 DVLOG(1) << "CheckDownloadHashDone, download_id: " << download_id
566 << " is dangerous_hash: " << is_dangerous_hash; 566 << " is dangerous_hash: " << is_dangerous_hash;
567 } 567 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698