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

Side by Side Diff: content/browser/download/download_item_impl.cc

Issue 134373003: Return error to chrome.downloads.removeFile (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 11 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 // File method ordering: Methods in this file are in the same order as 5 // File method ordering: Methods in this file are in the same order as
6 // in download_item_impl.h, with the following exception: The public 6 // in download_item_impl.h, with the following exception: The public
7 // interface Start is placed in chronological order with the other 7 // interface Start is placed in chronological order with the other
8 // (private) routines that together define a DownloadItem's state 8 // (private) routines that together define a DownloadItem's state
9 // transitions as the download progresses. See "Download progression 9 // transitions as the download progresses. See "Download progression
10 // cascade" later in this file. 10 // cascade" later in this file.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 bool DeleteDownloadedFile(const base::FilePath& path) { 60 bool DeleteDownloadedFile(const base::FilePath& path) {
61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
62 62
63 // Make sure we only delete files. 63 // Make sure we only delete files.
64 if (base::DirectoryExists(path)) 64 if (base::DirectoryExists(path))
65 return true; 65 return true;
66 return base::DeleteFile(path, false); 66 return base::DeleteFile(path, false);
67 } 67 }
68 68
69 void DeleteDownloadedFileDone(
70 base::WeakPtr<DownloadItemImpl> item,
71 const base::Callback<void(bool)>& callback,
72 bool success) {
73 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
74 if (success && item.get())
75 item->OnDownloadedFileRemoved();
76 callback.Run(success);
77 }
78
69 // Wrapper around DownloadFile::Detach and DownloadFile::Cancel that 79 // Wrapper around DownloadFile::Detach and DownloadFile::Cancel that
70 // takes ownership of the DownloadFile and hence implicitly destroys it 80 // takes ownership of the DownloadFile and hence implicitly destroys it
71 // at the end of the function. 81 // at the end of the function.
72 static base::FilePath DownloadFileDetach( 82 static base::FilePath DownloadFileDetach(
73 scoped_ptr<DownloadFile> download_file) { 83 scoped_ptr<DownloadFile> download_file) {
74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
75 base::FilePath full_path = download_file->FullPath(); 85 base::FilePath full_path = download_file->FullPath();
76 download_file->Detach(); 86 download_file->Detach();
77 return full_path; 87 return full_path;
78 } 88 }
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 } 619 }
610 620
611 const std::string& DownloadItemImpl::GetHashState() const { 621 const std::string& DownloadItemImpl::GetHashState() const {
612 return hash_state_; 622 return hash_state_;
613 } 623 }
614 624
615 bool DownloadItemImpl::GetFileExternallyRemoved() const { 625 bool DownloadItemImpl::GetFileExternallyRemoved() const {
616 return file_externally_removed_; 626 return file_externally_removed_;
617 } 627 }
618 628
619 void DownloadItemImpl::DeleteFile() { 629 void DownloadItemImpl::DeleteFile(const base::Callback<void(bool)>& callback) {
620 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 630 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
621 if ((GetState() != DownloadItem::COMPLETE) || 631 if (GetState() != DownloadItem::COMPLETE) {
622 file_externally_removed_) { 632 // Pass a null WeakPtr so it doesn't call OnDownloadedFileRemoved.
633 BrowserThread::PostTask(
634 BrowserThread::UI, FROM_HERE,
635 base::Bind(&DeleteDownloadedFileDone,
636 base::WeakPtr<DownloadItemImpl>(), callback, false));
637 return;
638 }
639 if (current_path_.empty() || file_externally_removed_) {
640 // Pass a null WeakPtr so it doesn't call OnDownloadedFileRemoved.
641 BrowserThread::PostTask(
642 BrowserThread::UI, FROM_HERE,
643 base::Bind(&DeleteDownloadedFileDone,
644 base::WeakPtr<DownloadItemImpl>(), callback, true));
623 return; 645 return;
624 } 646 }
625 BrowserThread::PostTaskAndReplyWithResult( 647 BrowserThread::PostTaskAndReplyWithResult(
626 BrowserThread::FILE, FROM_HERE, 648 BrowserThread::FILE, FROM_HERE,
627 base::Bind(&DeleteDownloadedFile, current_path_), 649 base::Bind(&DeleteDownloadedFile, current_path_),
628 base::Bind(&DownloadItemImpl::OnDownloadedFileRemoved, 650 base::Bind(&DeleteDownloadedFileDone,
629 weak_ptr_factory_.GetWeakPtr())); 651 weak_ptr_factory_.GetWeakPtr(), callback));
630 current_path_.clear(); 652 current_path_.clear();
631 } 653 }
632 654
633 bool DownloadItemImpl::IsDangerous() const { 655 bool DownloadItemImpl::IsDangerous() const {
634 #if defined(OS_WIN) 656 #if defined(OS_WIN)
635 // TODO(noelutz): At this point only the windows views UI supports 657 // TODO(noelutz): At this point only the windows views UI supports
636 // warnings based on dangerous content. 658 // warnings based on dangerous content.
637 return (danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE || 659 return (danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE ||
638 danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_URL || 660 danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_URL ||
639 danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT || 661 danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT ||
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 962
941 // Don't update observers. This method is expected to be called just before a 963 // Don't update observers. This method is expected to be called just before a
942 // DownloadFile is created and Start() is called. The observers will be 964 // DownloadFile is created and Start() is called. The observers will be
943 // notified when the download transitions to the IN_PROGRESS state. 965 // notified when the download transitions to the IN_PROGRESS state.
944 } 966 }
945 967
946 void DownloadItemImpl::NotifyRemoved() { 968 void DownloadItemImpl::NotifyRemoved() {
947 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadRemoved(this)); 969 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadRemoved(this));
948 } 970 }
949 971
950 void DownloadItemImpl::OnDownloadedFileRemoved(bool success) { 972 void DownloadItemImpl::OnDownloadedFileRemoved() {
951 if (!success)
952 return;
953 file_externally_removed_ = true; 973 file_externally_removed_ = true;
954 VLOG(20) << __FUNCTION__ << " download=" << DebugString(true); 974 VLOG(20) << __FUNCTION__ << " download=" << DebugString(true);
955 UpdateObservers(); 975 UpdateObservers();
956 } 976 }
957 977
958 base::WeakPtr<DownloadDestinationObserver> 978 base::WeakPtr<DownloadDestinationObserver>
959 DownloadItemImpl::DestinationObserverAsWeakPtr() { 979 DownloadItemImpl::DestinationObserverAsWeakPtr() {
960 return weak_ptr_factory_.GetWeakPtr(); 980 return weak_ptr_factory_.GetWeakPtr();
961 } 981 }
962 982
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
1762 case RESUME_MODE_USER_CONTINUE: 1782 case RESUME_MODE_USER_CONTINUE:
1763 return "USER_CONTINUE"; 1783 return "USER_CONTINUE";
1764 case RESUME_MODE_USER_RESTART: 1784 case RESUME_MODE_USER_RESTART:
1765 return "USER_RESTART"; 1785 return "USER_RESTART";
1766 } 1786 }
1767 NOTREACHED() << "Unknown resume mode " << mode; 1787 NOTREACHED() << "Unknown resume mode " << mode;
1768 return "unknown"; 1788 return "unknown";
1769 } 1789 }
1770 1790
1771 } // namespace content 1791 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_item_impl.h ('k') | content/browser/download/download_item_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698