| Index: chrome/browser/download/download_target_determiner.cc
|
| ===================================================================
|
| --- chrome/browser/download/download_target_determiner.cc (revision 283043)
|
| +++ chrome/browser/download/download_target_determiner.cc (working copy)
|
| @@ -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,8 +60,13 @@
|
| (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 @@
|
| 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 @@
|
| 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 @@
|
| 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,16 +497,53 @@
|
| #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() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(!virtual_path_.empty());
|
| @@ -821,3 +870,10 @@
|
| 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
|
|
|