diff options
Diffstat (limited to 'chrome/browser/download/download_target_determiner.cc')
-rw-r--r-- | chrome/browser/download/download_target_determiner.cc | 66 |
1 files changed, 61 insertions, 5 deletions
diff --git a/chrome/browser/download/download_target_determiner.cc b/chrome/browser/download/download_target_determiner.cc index e7bb16d..971a904 100644 --- a/chrome/browser/download/download_target_determiner.cc +++ b/chrome/browser/download/download_target_determiner.cc @@ -33,6 +33,10 @@ #include "content/public/common/webplugininfo.h" #endif +#if defined(OS_WIN) +#include "chrome/browser/ui/pdf/adobe_reader_info_win.h" +#endif + using content::BrowserThread; using content::DownloadItem; @@ -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_.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) + 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 |