OLD | NEW |
---|---|
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 "content/browser/download/download_manager_impl.h" | 5 #include "content/browser/download/download_manager_impl.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 browser_context_(browser_context), | 240 browser_context_(browser_context), |
241 delegate_(NULL), | 241 delegate_(NULL), |
242 net_log_(net_log) { | 242 net_log_(net_log) { |
243 DCHECK(browser_context); | 243 DCHECK(browser_context); |
244 } | 244 } |
245 | 245 |
246 DownloadManagerImpl::~DownloadManagerImpl() { | 246 DownloadManagerImpl::~DownloadManagerImpl() { |
247 DCHECK(!shutdown_needed_); | 247 DCHECK(!shutdown_needed_); |
248 } | 248 } |
249 | 249 |
250 void DownloadManagerImpl::CreateActiveItem( | |
251 DownloadId id, const DownloadCreateInfo& info) { | |
252 net::BoundNetLog bound_net_log = | |
253 net::BoundNetLog::Make(net_log_, net::NetLog::SOURCE_DOWNLOAD); | |
254 downloads_[id.local()] = | |
255 item_factory_->CreateActiveItem(this, id, info, bound_net_log); | |
256 } | |
257 | |
258 DownloadId DownloadManagerImpl::GetNextId() { | 250 DownloadId DownloadManagerImpl::GetNextId() { |
259 DownloadId id; | 251 DownloadId id; |
260 if (delegate_) | 252 if (delegate_) |
261 id = delegate_->GetNextId(); | 253 id = delegate_->GetNextId(); |
262 if (!id.IsValid()) { | 254 if (!id.IsValid()) { |
263 static int next_id; | 255 static int next_id; |
264 id = DownloadId(browser_context_, ++next_id); | 256 id = DownloadId(browser_context_, ++next_id); |
265 } | 257 } |
266 | 258 |
267 return id; | 259 return id; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
370 if (delegate_) | 362 if (delegate_) |
371 delegate_->Shutdown(); | 363 delegate_->Shutdown(); |
372 delegate_ = NULL; | 364 delegate_ = NULL; |
373 } | 365 } |
374 | 366 |
375 DownloadItem* DownloadManagerImpl::StartDownload( | 367 DownloadItem* DownloadManagerImpl::StartDownload( |
376 scoped_ptr<DownloadCreateInfo> info, | 368 scoped_ptr<DownloadCreateInfo> info, |
377 scoped_ptr<ByteStreamReader> stream) { | 369 scoped_ptr<ByteStreamReader> stream) { |
378 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 370 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
379 | 371 |
372 DownloadId id(info->download_id); | |
373 bool new_download = !id.IsValid(); | |
374 DownloadItemImpl* download = NULL; | |
375 | |
376 if (new_download) { | |
377 id = GetNextId(); | |
378 net::BoundNetLog bound_net_log = | |
379 net::BoundNetLog::Make(net_log_, net::NetLog::SOURCE_DOWNLOAD); | |
380 download = item_factory_->CreateActiveItem(this, id, *info, bound_net_log); | |
381 downloads_[id.local()] = download; | |
382 } else { | |
383 // Trying to resume an interrupted download. | |
384 if (!ContainsKey(downloads_, id.local())) { | |
385 // If the download is no longer known to the DownloadManager, then it was | |
386 // removed after it was resumed. Ignore. | |
387 info->request_handle.CancelRequest(); | |
388 return NULL; | |
389 } | |
390 download = downloads_[id.local()]; | |
Randy Smith (Not in Mondays)
2013/05/13 15:59:26
I'm tempted to suggest you explicitly look up the
asanka
2013/05/13 19:19:01
Done.
| |
391 DCHECK(download->IsInterrupted()); | |
392 } | |
393 | |
380 base::FilePath default_download_directory; | 394 base::FilePath default_download_directory; |
381 if (delegate_) { | 395 if (delegate_) { |
382 base::FilePath website_save_directory; // Unused | 396 base::FilePath website_save_directory; // Unused |
383 bool skip_dir_check = false; // Unused | 397 bool skip_dir_check = false; // Unused |
384 delegate_->GetSaveDir(GetBrowserContext(), &website_save_directory, | 398 delegate_->GetSaveDir(GetBrowserContext(), &website_save_directory, |
385 &default_download_directory, &skip_dir_check); | 399 &default_download_directory, &skip_dir_check); |
386 } | 400 } |
387 | 401 |
388 // If we don't have a valid id, that's a signal to generate one. | |
389 DownloadId id(info->download_id); | |
390 if (!id.IsValid()) | |
391 id = GetNextId(); | |
392 | |
393 // Create a new download item if this isn't a resumption. | |
394 bool new_download(!ContainsKey(downloads_, id.local())); | |
395 if (new_download) | |
396 CreateActiveItem(id, *info); | |
397 | |
398 DownloadItemImpl* download(downloads_[id.local()]); | |
399 DCHECK(download); | |
400 DCHECK(new_download || download->IsInterrupted()); | |
401 | |
402 // Create the download file and start the download. | 402 // Create the download file and start the download. |
403 scoped_ptr<DownloadFile> download_file( | 403 scoped_ptr<DownloadFile> download_file( |
404 file_factory_->CreateFile( | 404 file_factory_->CreateFile( |
405 info->save_info.Pass(), default_download_directory, | 405 info->save_info.Pass(), default_download_directory, |
406 info->url(), info->referrer_url, | 406 info->url(), info->referrer_url, |
407 delegate_->GenerateFileHash(), | 407 delegate_->GenerateFileHash(), |
408 stream.Pass(), download->GetBoundNetLog(), | 408 stream.Pass(), download->GetBoundNetLog(), |
409 download->DestinationObserverAsWeakPtr())); | 409 download->DestinationObserverAsWeakPtr())); |
410 scoped_ptr<DownloadRequestHandleInterface> req_handle( | 410 scoped_ptr<DownloadRequestHandleInterface> req_handle( |
411 new DownloadRequestHandle(info->request_handle)); | 411 new DownloadRequestHandle(info->request_handle)); |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
655 if (delegate_) | 655 if (delegate_) |
656 delegate_->OpenDownload(download); | 656 delegate_->OpenDownload(download); |
657 } | 657 } |
658 | 658 |
659 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { | 659 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { |
660 if (delegate_) | 660 if (delegate_) |
661 delegate_->ShowDownloadInShell(download); | 661 delegate_->ShowDownloadInShell(download); |
662 } | 662 } |
663 | 663 |
664 } // namespace content | 664 } // namespace content |
OLD | NEW |