summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download/download_target_determiner.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/download/download_target_determiner.cc')
-rw-r--r--chrome/browser/download/download_target_determiner.cc66
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