Index: chrome/browser/download/download_target_determiner.cc |
diff --git a/chrome/browser/download/download_target_determiner.cc b/chrome/browser/download/download_target_determiner.cc |
index 836d4ce92dc8487af37caeff2785d9852934e33e..c0f44b69812d5b0e3b7071e423fd57a8084fcb36 100644 |
--- a/chrome/browser/download/download_target_determiner.cc |
+++ b/chrome/browser/download/download_target_determiner.cc |
@@ -89,6 +89,7 @@ DownloadTargetDeterminer::DownloadTargetDeterminer( |
create_target_directory_(false), |
conflict_action_(DownloadPathReservationTracker::OVERWRITE), |
danger_type_(download->GetDangerType()), |
+ is_dangerous_file_(false), |
virtual_path_(initial_virtual_path), |
is_filetype_handled_safely_(false), |
download_(download), |
@@ -576,10 +577,9 @@ DownloadTargetDeterminer::Result |
next_state_ = STATE_DETERMINE_INTERMEDIATE_PATH; |
// Checking if there are prior visits to the referrer is only necessary if the |
- // danger level of the download depends on the file type. This excludes cases |
- // where the download has already been deemed dangerous, or where the user is |
- // going to be prompted or where this is a programmatic download. |
- if (danger_type_ != content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS) |
+ // danger level of the download depends on the file type. |
+ if (danger_type_ != content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS && |
+ danger_type_ != content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT) |
return CONTINUE; |
// Assume that: |
@@ -610,7 +610,9 @@ DownloadTargetDeterminer::Result |
// If the danger level doesn't depend on having visited the refererrer URL |
// or if original profile doesn't have a HistoryService or the referrer url |
// is invalid, then assume the referrer has not been visited before. |
- danger_type_ = content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE; |
+ is_dangerous_file_ = true; |
+ if (danger_type_ == content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS) |
+ danger_type_ = content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE; |
} |
return CONTINUE; |
} |
@@ -619,9 +621,12 @@ void DownloadTargetDeterminer::CheckVisitedReferrerBeforeDone( |
bool visited_referrer_before) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK_EQ(STATE_DETERMINE_INTERMEDIATE_PATH, next_state_); |
- if (IsDangerousFile( |
- visited_referrer_before ? VISITED_REFERRER : NO_VISITS_TO_REFERRER)) |
- danger_type_ = content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE; |
+ if (IsDangerousFile(visited_referrer_before ? VISITED_REFERRER |
+ : NO_VISITS_TO_REFERRER)) { |
+ is_dangerous_file_ = true; |
+ if (danger_type_ == content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS) |
+ danger_type_ = content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE; |
+ } |
DoLoop(); |
} |
@@ -707,7 +712,8 @@ void DownloadTargetDeterminer::ScheduleCallbackAndDeleteSelf() { |
<< " Local:" << local_path_.AsUTF8Unsafe() |
<< " Intermediate:" << intermediate_path_.AsUTF8Unsafe() |
<< " Should prompt:" << should_prompt_ |
- << " Danger type:" << danger_type_; |
+ << " Danger type:" << danger_type_ |
+ << " Is dangerous file:" << is_dangerous_file_; |
scoped_ptr<DownloadTargetInfo> target_info(new DownloadTargetInfo); |
target_info->target_path = local_path_; |
@@ -716,6 +722,7 @@ void DownloadTargetDeterminer::ScheduleCallbackAndDeleteSelf() { |
? DownloadItem::TARGET_DISPOSITION_PROMPT |
: DownloadItem::TARGET_DISPOSITION_OVERWRITE); |
target_info->danger_type = danger_type_; |
+ target_info->is_dangerous_file = is_dangerous_file_; |
target_info->intermediate_path = intermediate_path_; |
target_info->mime_type = mime_type_; |
target_info->is_filetype_handled_safely = is_filetype_handled_safely_; |