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

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

Issue 8468020: Propagate the SafeBrowsing download protection verdict to the DownloadItem. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Add missing file and fix some unit-tests 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 "content/browser/download/download_item.h" 5 #include "content/browser/download/download_item.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 return "REMOVING"; 85 return "REMOVING";
86 case DownloadItem::INTERRUPTED: 86 case DownloadItem::INTERRUPTED:
87 return "INTERRUPTED"; 87 return "INTERRUPTED";
88 default: 88 default:
89 NOTREACHED() << "Unknown download state " << state; 89 NOTREACHED() << "Unknown download state " << state;
90 return "unknown"; 90 return "unknown";
91 }; 91 };
92 } 92 }
93 93
94 DownloadItem::SafetyState GetSafetyState(bool dangerous_file, 94 DownloadItem::SafetyState GetSafetyState(bool dangerous_file,
95 bool dangerous_url) { 95 bool dangerous_url,
96 bool dangerous_content) {
97 // TODO(noelutz): At this point we can't mark the download as dangerous
98 // if it's content is dangerous because the UI doesn't yet support it.
99 // Once the UI has been changed we should return DANGEROUS when
100 // |dangerous_content| is true.
96 return (dangerous_url || dangerous_file) ? 101 return (dangerous_url || dangerous_file) ?
97 DownloadItem::DANGEROUS : DownloadItem::SAFE; 102 DownloadItem::DANGEROUS : DownloadItem::SAFE;
98 } 103 }
99 104
100 // Note: When a download has both |dangerous_file| and |dangerous_url| set, 105 // Note: |dangerous_url| takes precedence over both |dangerous_content| and
101 // danger type is set to DANGEROUS_URL since the risk of dangerous URL 106 // |dangerous_content| and |dangerous_url| takes precedence over
102 // overweights that of dangerous file type. 107 // |dangerous_content|.
103 DownloadItem::DangerType GetDangerType(bool dangerous_file, 108 DownloadItem::DangerType GetDangerType(bool dangerous_file,
104 bool dangerous_url) { 109 bool dangerous_url,
105 if (dangerous_url) { 110 bool dangerous_content) {
106 // dangerous URL overweights dangerous file. We check dangerous URL first. 111 if (dangerous_url)
107 return DownloadItem::DANGEROUS_URL; 112 return DownloadItem::DANGEROUS_URL;
108 } 113 if (dangerous_content)
114 return DownloadItem::DANGEROUS_CONTENT;
109 return dangerous_file ? 115 return dangerous_file ?
110 DownloadItem::DANGEROUS_FILE : DownloadItem::NOT_DANGEROUS; 116 DownloadItem::DANGEROUS_FILE : DownloadItem::NOT_DANGEROUS;
111 } 117 }
112 118
113 } // namespace 119 } // namespace
114 120
115 // Our download table ID starts at 1, so we use 0 to represent a download that 121 // Our download table ID starts at 1, so we use 0 to represent a download that
116 // has started, but has not yet had its data persisted in the table. We use fake 122 // has started, but has not yet had its data persisted in the table. We use fake
117 // database handles in incognito mode starting at -1 and progressively getting 123 // database handles in incognito mode starting at -1 and progressively getting
118 // more negative. 124 // more negative.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 } 161 }
156 162
157 // Constructing for a regular download: 163 // Constructing for a regular download:
158 DownloadItem::DownloadItem(DownloadManager* download_manager, 164 DownloadItem::DownloadItem(DownloadManager* download_manager,
159 const DownloadCreateInfo& info, 165 const DownloadCreateInfo& info,
160 DownloadRequestHandleInterface* request_handle, 166 DownloadRequestHandleInterface* request_handle,
161 bool is_otr) 167 bool is_otr)
162 : state_info_(info.original_name, info.save_info.file_path, 168 : state_info_(info.original_name, info.save_info.file_path,
163 info.has_user_gesture, info.transition_type, 169 info.has_user_gesture, info.transition_type,
164 info.prompt_user_for_save_location, info.path_uniquifier, 170 info.prompt_user_for_save_location, info.path_uniquifier,
165 false, false), 171 false, false, false, false),
166 request_handle_(request_handle), 172 request_handle_(request_handle),
167 download_id_(info.download_id), 173 download_id_(info.download_id),
168 full_path_(info.path), 174 full_path_(info.path),
169 url_chain_(info.url_chain), 175 url_chain_(info.url_chain),
170 referrer_url_(info.referrer_url), 176 referrer_url_(info.referrer_url),
171 suggested_filename_(UTF16ToUTF8(info.save_info.suggested_name)), 177 suggested_filename_(UTF16ToUTF8(info.save_info.suggested_name)),
172 content_disposition_(info.content_disposition), 178 content_disposition_(info.content_disposition),
173 mime_type_(info.mime_type), 179 mime_type_(info.mime_type),
174 original_mime_type_(info.original_mime_type), 180 original_mime_type_(info.original_mime_type),
175 referrer_charset_(info.referrer_charset), 181 referrer_charset_(info.referrer_charset),
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 if (state_ == new_state) 437 if (state_ == new_state)
432 return; 438 return;
433 439
434 state_ = new_state; 440 state_ = new_state;
435 UpdateObservers(); 441 UpdateObservers();
436 } 442 }
437 443
438 void DownloadItem::UpdateSafetyState() { 444 void DownloadItem::UpdateSafetyState() {
439 SafetyState updated_value( 445 SafetyState updated_value(
440 GetSafetyState(state_info_.is_dangerous_file, 446 GetSafetyState(state_info_.is_dangerous_file,
441 state_info_.is_dangerous_url)); 447 state_info_.is_dangerous_url,
448 state_info_.is_dangerous_content));
442 if (updated_value != safety_state_) { 449 if (updated_value != safety_state_) {
443 safety_state_ = updated_value; 450 safety_state_ = updated_value;
444 UpdateObservers(); 451 UpdateObservers();
445 } 452 }
446 } 453 }
447 454
448 void DownloadItem::UpdateTarget() { 455 void DownloadItem::UpdateTarget() {
449 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 456 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
450 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 457 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
451 458
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 647
641 VLOG(20) << " " << __FUNCTION__ << "()" << " this = " << DebugString(true); 648 VLOG(20) << " " << __FUNCTION__ << "()" << " this = " << DebugString(true);
642 state_info_ = state; 649 state_info_ = state;
643 VLOG(20) << " " << __FUNCTION__ << "()" << " this = " << DebugString(true); 650 VLOG(20) << " " << __FUNCTION__ << "()" << " this = " << DebugString(true);
644 651
645 UpdateSafetyState(); 652 UpdateSafetyState();
646 } 653 }
647 654
648 DownloadItem::DangerType DownloadItem::GetDangerType() const { 655 DownloadItem::DangerType DownloadItem::GetDangerType() const {
649 return ::GetDangerType(state_info_.is_dangerous_file, 656 return ::GetDangerType(state_info_.is_dangerous_file,
650 state_info_.is_dangerous_url); 657 state_info_.is_dangerous_url,
658 state_info_.is_dangerous_content);
651 } 659 }
652 660
653 bool DownloadItem::IsDangerous() const { 661 bool DownloadItem::IsDangerous() const {
654 return GetDangerType() != DownloadItem::NOT_DANGEROUS; 662 return GetDangerType() != DownloadItem::NOT_DANGEROUS;
655 } 663 }
656 664
657 void DownloadItem::MarkFileDangerous() { 665 void DownloadItem::MarkFileDangerous() {
658 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 666 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
659 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 667 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
660 668
661 state_info_.is_dangerous_file = true; 669 state_info_.is_dangerous_file = true;
662 UpdateSafetyState(); 670 UpdateSafetyState();
663 } 671 }
664 672
665 void DownloadItem::MarkUrlDangerous() { 673 void DownloadItem::MarkUrlDangerous() {
666 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 674 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
667 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 675 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
668 676
669 state_info_.is_dangerous_url = true; 677 state_info_.is_dangerous_url = true;
670 UpdateSafetyState(); 678 UpdateSafetyState();
671 } 679 }
672 680
681 void DownloadItem::MarkContentDangerous() {
682 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
683 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
684
685 state_info_.is_dangerous_content = true;
686 UpdateSafetyState();
687 }
688
673 DownloadPersistentStoreInfo DownloadItem::GetPersistentStoreInfo() const { 689 DownloadPersistentStoreInfo DownloadItem::GetPersistentStoreInfo() const {
674 return DownloadPersistentStoreInfo(full_path(), 690 return DownloadPersistentStoreInfo(full_path(),
675 GetURL(), 691 GetURL(),
676 referrer_url(), 692 referrer_url(),
677 start_time(), 693 start_time(),
678 end_time(), 694 end_time(),
679 received_bytes(), 695 received_bytes(),
680 total_bytes(), 696 total_bytes(),
681 state(), 697 state(),
682 db_handle(), 698 db_handle(),
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 state_info_.target_name.value().c_str(), 813 state_info_.target_name.value().c_str(),
798 full_path().value().c_str()); 814 full_path().value().c_str());
799 } else { 815 } else {
800 description += base::StringPrintf(" url = \"%s\"", url_list.c_str()); 816 description += base::StringPrintf(" url = \"%s\"", url_list.c_str());
801 } 817 }
802 818
803 description += " }"; 819 description += " }";
804 820
805 return description; 821 return description;
806 } 822 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698