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 |