Chromium Code Reviews| 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 e7bb16d394091497f29e49249c936900a0a26001..b9ed8a9b285d863546eae8a74081a58af5e84964 100644 |
| --- a/chrome/browser/download/download_target_determiner.cc |
| +++ b/chrome/browser/download/download_target_determiner.cc |
| @@ -27,6 +27,10 @@ |
| #include "net/base/mime_util.h" |
| #include "ui/base/l10n/l10n_util.h" |
| +#if defined(OS_WIN) |
| +#include "chrome/browser/ui/pdf/adobe_reader_info_win.h" |
| +#endif |
| + |
| #if defined(ENABLE_PLUGINS) |
| #include "chrome/browser/plugins/plugin_prefs.h" |
| #include "content/public/browser/plugin_service.h" |
| @@ -56,7 +60,12 @@ void VisitCountsToVisitedBefore( |
| (first_visit.LocalMidnight() < base::Time::Now().LocalMidnight())); |
| } |
| -} // namespace |
| +#if defined(OS_WIN) |
| +// Keeps track of whether Adobe Reader is up to date. |
| +bool g_is_adobe_reader_up_to_date_ = false; |
| +#endif |
| + |
| +} // namespace |
| DownloadTargetInfo::DownloadTargetInfo() |
| : is_filetype_handled_safely(false) {} |
| @@ -131,6 +140,9 @@ void DownloadTargetDeterminer::DoLoop() { |
| case STATE_DETERMINE_IF_HANDLED_SAFELY_BY_BROWSER: |
| result = DoDetermineIfHandledSafely(); |
| break; |
| + case STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE: |
| + result = DoDetermineIfAdobeReaderUpToDate(); |
| + break; |
| case STATE_CHECK_DOWNLOAD_URL: |
| result = DoCheckDownloadUrl(); |
| break; |
| @@ -447,8 +459,8 @@ void IsHandledBySafePlugin(content::ResourceContext* resource_context, |
| BrowserThread::UI, FROM_HERE, base::Bind(callback, is_handled_safely)); |
| } |
| -} // namespace |
| -#endif // ENABLE_PLUGINS |
| +} // namespace |
| +#endif // defined(ENABLE_PLUGINS) |
| DownloadTargetDeterminer::Result |
| DownloadTargetDeterminer::DoDetermineIfHandledSafely() { |
| @@ -457,7 +469,7 @@ DownloadTargetDeterminer::Result |
| DCHECK(!local_path_.empty()); |
| DCHECK(!is_filetype_handled_safely_); |
| - next_state_ = STATE_CHECK_DOWNLOAD_URL; |
| + next_state_ = STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE; |
| if (mime_type_.empty()) |
| return CONTINUE; |
| @@ -485,14 +497,51 @@ DownloadTargetDeterminer::Result |
| #endif |
| } |
| +#if defined(ENABLE_PLUGINS) |
| void DownloadTargetDeterminer::DetermineIfHandledSafelyDone( |
| bool is_handled_safely) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| DVLOG(20) << "Is file type handled safely: " << is_filetype_handled_safely_; |
| - DCHECK_EQ(STATE_CHECK_DOWNLOAD_URL, next_state_); |
| + DCHECK_EQ(STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE, next_state_); |
| is_filetype_handled_safely_ = is_handled_safely; |
| DoLoop(); |
| } |
| +#endif |
| + |
| +DownloadTargetDeterminer::Result |
| + DownloadTargetDeterminer::DoDetermineIfAdobeReaderUpToDate() { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| + next_state_ = STATE_CHECK_DOWNLOAD_URL; |
| + |
| +#if defined(OS_WIN) |
| + if (local_path_.Extension() == FILE_PATH_LITERAL(".pdf")) |
|
asanka
2014/07/01 19:55:14
Also, local_path_.MatchesExtension(...) rather tha
asanka
2014/07/01 19:55:14
Why skip the check if we are looking at a .pdf?
Lei Zhang
2014/07/01 20:47:56
Whoops, meant to only check for PDFs.
Lei Zhang
2014/07/01 20:47:57
Done.
|
| + return CONTINUE; |
| + if (!IsAdobeReaderDefaultPDFViewer()) |
| + return CONTINUE; |
| + |
| + base::PostTaskAndReplyWithResult( |
| + BrowserThread::GetBlockingPool(), |
| + FROM_HERE, |
| + base::Bind(&::IsAdobeReaderUpToDate), |
| + base::Bind(&DownloadTargetDeterminer::DetermineIfAdobeReaderUpToDateDone, |
| + weak_ptr_factory_.GetWeakPtr())); |
| + return QUIT_DOLOOP; |
| +#else |
| + return CONTINUE; |
| +#endif |
| +} |
| + |
| +#if defined(OS_WIN) |
| +void DownloadTargetDeterminer::DetermineIfAdobeReaderUpToDateDone( |
| + bool adobe_reader_up_to_date) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + DVLOG(20) << "Is Adobe Reader Up To Date: " << adobe_reader_up_to_date; |
| + DCHECK_EQ(STATE_CHECK_DOWNLOAD_URL, next_state_); |
| + g_is_adobe_reader_up_to_date_ = adobe_reader_up_to_date; |
| + DoLoop(); |
| +} |
| +#endif |
| DownloadTargetDeterminer::Result |
| DownloadTargetDeterminer::DoCheckDownloadUrl() { |
| @@ -821,3 +870,10 @@ base::FilePath DownloadTargetDeterminer::GetCrDownloadPath( |
| const base::FilePath& suggested_path) { |
| return base::FilePath(suggested_path.value() + kCrdownloadSuffix); |
| } |
| + |
| +#if defined(OS_WIN) |
| +// static |
| +bool DownloadTargetDeterminer::IsAdobeReaderUpToDate() { |
| + return g_is_adobe_reader_up_to_date_; |
| +} |
| +#endif |