OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/download/chrome_download_manager_delegate.h" | 5 #include "chrome/browser/download/chrome_download_manager_delegate.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
177 | 177 |
178 #endif // FULL_SAFE_BROWSING | 178 #endif // FULL_SAFE_BROWSING |
179 | 179 |
180 // Called on the blocking pool to determine the MIME type for |path|. | 180 // Called on the blocking pool to determine the MIME type for |path|. |
181 std::string GetMimeType(const base::FilePath& path) { | 181 std::string GetMimeType(const base::FilePath& path) { |
182 std::string mime_type; | 182 std::string mime_type; |
183 net::GetMimeTypeFromFile(path, &mime_type); | 183 net::GetMimeTypeFromFile(path, &mime_type); |
184 return mime_type; | 184 return mime_type; |
185 } | 185 } |
186 | 186 |
187 bool IsOpenInBrowserPreferreredForFile(const base::FilePath& path) { | |
188 // On Android, always prefer opening with an external app. On ChromeOS, there | |
189 // are no external apps so just allow all opens to be handled by the "System." | |
190 #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS) && defined(ENABLE_PLUGINS) | |
191 // TODO(asanka): Consider other file types and MIME types. | |
192 // http://crbug.com/323561 | |
193 if (path.MatchesExtension(FILE_PATH_LITERAL(".pdf")) || | |
194 path.MatchesExtension(FILE_PATH_LITERAL(".htm")) || | |
195 path.MatchesExtension(FILE_PATH_LITERAL(".html")) || | |
196 path.MatchesExtension(FILE_PATH_LITERAL(".shtm")) || | |
197 path.MatchesExtension(FILE_PATH_LITERAL(".shtml")) || | |
198 path.MatchesExtension(FILE_PATH_LITERAL(".svg")) || | |
199 path.MatchesExtension(FILE_PATH_LITERAL(".xht")) || | |
200 path.MatchesExtension(FILE_PATH_LITERAL(".xhtm")) || | |
201 path.MatchesExtension(FILE_PATH_LITERAL(".xhtml")) || | |
202 path.MatchesExtension(FILE_PATH_LITERAL(".xsl")) || | |
203 path.MatchesExtension(FILE_PATH_LITERAL(".xslt"))) { | |
204 return true; | |
205 } | |
206 #endif | |
207 return false; | |
208 } | |
209 | |
210 } // namespace | 187 } // namespace |
211 | 188 |
212 ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile) | 189 ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile) |
213 : profile_(profile), | 190 : profile_(profile), |
214 next_download_id_(content::DownloadItem::kInvalidId), | 191 next_download_id_(content::DownloadItem::kInvalidId), |
215 download_prefs_(new DownloadPrefs(profile)), | 192 download_prefs_(new DownloadPrefs(profile)), |
216 weak_ptr_factory_(this) { | 193 weak_ptr_factory_(this) { |
217 } | 194 } |
218 | 195 |
219 ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() { | 196 ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() { |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
715 DownloadItem* item = download_manager_->GetDownload(download_id); | 692 DownloadItem* item = download_manager_->GetDownload(download_id); |
716 if (!target_info->target_path.empty() && item && | 693 if (!target_info->target_path.empty() && item && |
717 IsOpenInBrowserPreferreredForFile(target_info->target_path) && | 694 IsOpenInBrowserPreferreredForFile(target_info->target_path) && |
718 target_info->is_filetype_handled_safely) | 695 target_info->is_filetype_handled_safely) |
719 DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true); | 696 DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true); |
720 callback.Run(target_info->target_path, | 697 callback.Run(target_info->target_path, |
721 target_info->target_disposition, | 698 target_info->target_disposition, |
722 target_info->danger_type, | 699 target_info->danger_type, |
723 target_info->intermediate_path); | 700 target_info->intermediate_path); |
724 } | 701 } |
702 | |
703 bool ChromeDownloadManagerDelegate::IsOpenInBrowserPreferreredForFile( | |
704 const base::FilePath& path) { | |
705 // On Windows, PDFs should open in Acrobat Reader if the user chooses. | |
706 #if defined(OS_WIN) | |
707 if (path.MatchesExtension(FILE_PATH_LITERAL(".pdf")) && | |
708 DownloadPrefs::IsAdobeReaderUpToDate()) { | |
709 DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile_); | |
asanka
2014/06/25 03:55:07
Now that this is a method of CDMD, you can just us
Lei Zhang
2014/06/26 08:06:12
Done.
| |
710 return !prefs->ShouldOpenPdfInAdobeReader(); | |
711 } | |
712 #endif | |
713 | |
714 // On Android, always prefer opening with an external app. On ChromeOS, there | |
715 // are no external apps so just allow all opens to be handled by the "System." | |
716 #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS) && defined(ENABLE_PLUGINS) | |
717 // TODO(asanka): Consider other file types and MIME types. | |
718 // http://crbug.com/323561 | |
719 if (path.MatchesExtension(FILE_PATH_LITERAL(".pdf")) || | |
720 path.MatchesExtension(FILE_PATH_LITERAL(".htm")) || | |
721 path.MatchesExtension(FILE_PATH_LITERAL(".html")) || | |
722 path.MatchesExtension(FILE_PATH_LITERAL(".shtm")) || | |
723 path.MatchesExtension(FILE_PATH_LITERAL(".shtml")) || | |
724 path.MatchesExtension(FILE_PATH_LITERAL(".svg")) || | |
725 path.MatchesExtension(FILE_PATH_LITERAL(".xht")) || | |
726 path.MatchesExtension(FILE_PATH_LITERAL(".xhtm")) || | |
727 path.MatchesExtension(FILE_PATH_LITERAL(".xhtml")) || | |
728 path.MatchesExtension(FILE_PATH_LITERAL(".xsl")) || | |
729 path.MatchesExtension(FILE_PATH_LITERAL(".xslt"))) { | |
730 return true; | |
731 } | |
732 #endif | |
733 return false; | |
734 } | |
OLD | NEW |