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 |