Chromium Code Reviews| Index: chrome/browser/download/chrome_download_manager_delegate.cc |
| =================================================================== |
| --- chrome/browser/download/chrome_download_manager_delegate.cc (revision 97032) |
| +++ chrome/browser/download/chrome_download_manager_delegate.cc (working copy) |
| @@ -133,7 +133,8 @@ |
| } |
| void ChromeDownloadManagerDelegate::CheckDownloadUrlDone( |
| - int32 download_id, bool is_dangerous_url) { |
| + int32 download_id, |
| + bool is_dangerous_url) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| DownloadItem* download = |
| @@ -144,11 +145,9 @@ |
| if (is_dangerous_url) |
| download->MarkUrlDangerous(); |
| - download_manager_->download_history()->CheckVisitedReferrerBefore( |
| - download_id, |
| - download->referrer_url(), |
| - NewCallback(this, |
| - &ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone)); |
| + download_manager_->download_history()->CheckVisitedReferrerBefore(download_id, |
| + download->referrer_url(), NewCallback(this, |
| + &ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone)); |
|
ahendrickson
2011/08/19 15:51:47
Nit: I think the indentation is wrong here.
Peter Kasting
2011/08/19 17:27:38
I'll indent the last line 4 more. I asked Brett w
|
| } |
| void ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone( |
| @@ -338,24 +337,30 @@ |
| bool visited_referrer_before) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - bool auto_open = ShouldOpenFileBasedOnExtension(state.suggested_path); |
| - download_util::DownloadDangerLevel danger_level = |
| - download_util::GetFileDangerLevel(state.suggested_path.BaseName()); |
| + // Anything loaded directly from the address bar is OK. |
| + if (state.transition_type & PageTransition::FROM_ADDRESS_BAR) |
| + return false; |
| - if (danger_level == download_util::Dangerous) |
| - return !(auto_open && state.has_user_gesture); |
| - |
| - if (danger_level == download_util::AllowOnUserGesture && |
| - (!state.has_user_gesture || !visited_referrer_before)) |
| - return true; |
| - |
| + // Extensions that are not from the gallery are considered dangerous. |
| if (state.is_extension_install) { |
| - // Extensions that are not from the gallery are considered dangerous. |
| ExtensionService* service = |
| download_manager_->profile()->GetExtensionService(); |
| if (!service || !service->IsDownloadFromGallery(download.GetURL(), |
| download.referrer_url())) |
| return true; |
| } |
| - return false; |
| + |
| + // Anything the user has marked auto-open is OK if it's user-initiated. |
| + if (ShouldOpenFileBasedOnExtension(state.suggested_path) && |
| + state.has_user_gesture) |
| + return false; |
| + |
| + // "Allow on user gesture" is OK when we have a user gesture and the hosting |
| + // page has been visited before today. |
| + download_util::DownloadDangerLevel danger_level = |
| + download_util::GetFileDangerLevel(state.suggested_path.BaseName()); |
| + if (danger_level == download_util::AllowOnUserGesture) |
| + return !state.has_user_gesture || !visited_referrer_before; |
| + |
| + return danger_level == download_util::Dangerous; |
| } |