| OLD | NEW | 
|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/download_target_determiner.h" | 5 #include "chrome/browser/download/download_target_determiner.h" | 
| 6 | 6 | 
| 7 #include "base/location.h" | 7 #include "base/location.h" | 
| 8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" | 
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" | 
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 21 #include "chrome/grit/generated_resources.h" | 21 #include "chrome/grit/generated_resources.h" | 
| 22 #include "components/history/core/browser/history_service.h" | 22 #include "components/history/core/browser/history_service.h" | 
| 23 #include "components/mime_util/mime_util.h" | 23 #include "components/mime_util/mime_util.h" | 
| 24 #include "components/prefs/pref_service.h" | 24 #include "components/prefs/pref_service.h" | 
| 25 #include "content/public/browser/browser_context.h" | 25 #include "content/public/browser/browser_context.h" | 
| 26 #include "content/public/browser/browser_thread.h" | 26 #include "content/public/browser/browser_thread.h" | 
| 27 #include "content/public/browser/download_interrupt_reasons.h" | 27 #include "content/public/browser/download_interrupt_reasons.h" | 
| 28 #include "extensions/common/constants.h" | 28 #include "extensions/common/constants.h" | 
| 29 #include "extensions/features/features.h" | 29 #include "extensions/features/features.h" | 
| 30 #include "net/base/filename_util.h" | 30 #include "net/base/filename_util.h" | 
|  | 31 #include "ppapi/features/features.h" | 
| 31 #include "ui/base/l10n/l10n_util.h" | 32 #include "ui/base/l10n/l10n_util.h" | 
| 32 #include "url/origin.h" | 33 #include "url/origin.h" | 
| 33 | 34 | 
| 34 #if BUILDFLAG(ENABLE_EXTENSIONS) | 35 #if BUILDFLAG(ENABLE_EXTENSIONS) | 
| 35 #include "chrome/browser/extensions/webstore_installer.h" | 36 #include "chrome/browser/extensions/webstore_installer.h" | 
| 36 #include "extensions/common/feature_switch.h" | 37 #include "extensions/common/feature_switch.h" | 
| 37 #endif | 38 #endif | 
| 38 | 39 | 
| 39 #if defined(ENABLE_PLUGINS) | 40 #if BUILDFLAG(ENABLE_PLUGINS) | 
| 40 #include "chrome/browser/plugins/plugin_prefs.h" | 41 #include "chrome/browser/plugins/plugin_prefs.h" | 
| 41 #include "content/public/browser/plugin_service.h" | 42 #include "content/public/browser/plugin_service.h" | 
| 42 #include "content/public/common/webplugininfo.h" | 43 #include "content/public/common/webplugininfo.h" | 
| 43 #endif | 44 #endif | 
| 44 | 45 | 
| 45 #if defined(OS_ANDROID) | 46 #if defined(OS_ANDROID) | 
| 46 #include "chrome/browser/android/download/download_controller.h" | 47 #include "chrome/browser/android/download/download_controller.h" | 
| 47 #include "chrome/browser/android/download/download_manager_service.h" | 48 #include "chrome/browser/android/download/download_manager_service.h" | 
| 48 #endif | 49 #endif | 
| 49 | 50 | 
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 437 void DownloadTargetDeterminer::DetermineMimeTypeDone( | 438 void DownloadTargetDeterminer::DetermineMimeTypeDone( | 
| 438     const std::string& mime_type) { | 439     const std::string& mime_type) { | 
| 439   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 440   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| 440   DVLOG(20) << "MIME type: " << mime_type; | 441   DVLOG(20) << "MIME type: " << mime_type; | 
| 441   DCHECK_EQ(STATE_DETERMINE_IF_HANDLED_SAFELY_BY_BROWSER, next_state_); | 442   DCHECK_EQ(STATE_DETERMINE_IF_HANDLED_SAFELY_BY_BROWSER, next_state_); | 
| 442 | 443 | 
| 443   mime_type_ = mime_type; | 444   mime_type_ = mime_type; | 
| 444   DoLoop(); | 445   DoLoop(); | 
| 445 } | 446 } | 
| 446 | 447 | 
| 447 #if defined(ENABLE_PLUGINS) | 448 #if BUILDFLAG(ENABLE_PLUGINS) | 
| 448 // The code below is used by DoDetermineIfHandledSafely to determine if the | 449 // The code below is used by DoDetermineIfHandledSafely to determine if the | 
| 449 // file type is handled by a sandboxed plugin. | 450 // file type is handled by a sandboxed plugin. | 
| 450 namespace { | 451 namespace { | 
| 451 | 452 | 
| 452 void InvokeClosureAfterGetPluginCallback( | 453 void InvokeClosureAfterGetPluginCallback( | 
| 453     const base::Closure& closure, | 454     const base::Closure& closure, | 
| 454     const std::vector<content::WebPluginInfo>& unused) { | 455     const std::vector<content::WebPluginInfo>& unused) { | 
| 455   closure.Run(); | 456   closure.Run(); | 
| 456 } | 457 } | 
| 457 | 458 | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 497   bool is_handled_safely = | 498   bool is_handled_safely = | 
| 498       plugin_found && | 499       plugin_found && | 
| 499       (plugin_info.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_IN_PROCESS || | 500       (plugin_info.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_IN_PROCESS || | 
| 500        plugin_info.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS || | 501        plugin_info.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS || | 
| 501        plugin_info.type == WebPluginInfo::PLUGIN_TYPE_BROWSER_PLUGIN); | 502        plugin_info.type == WebPluginInfo::PLUGIN_TYPE_BROWSER_PLUGIN); | 
| 502   BrowserThread::PostTask( | 503   BrowserThread::PostTask( | 
| 503       BrowserThread::UI, FROM_HERE, base::Bind(callback, is_handled_safely)); | 504       BrowserThread::UI, FROM_HERE, base::Bind(callback, is_handled_safely)); | 
| 504 } | 505 } | 
| 505 | 506 | 
| 506 }  // namespace | 507 }  // namespace | 
| 507 #endif  // defined(ENABLE_PLUGINS) | 508 #endif  // BUILDFLAG(ENABLE_PLUGINS) | 
| 508 | 509 | 
| 509 DownloadTargetDeterminer::Result | 510 DownloadTargetDeterminer::Result | 
| 510     DownloadTargetDeterminer::DoDetermineIfHandledSafely() { | 511     DownloadTargetDeterminer::DoDetermineIfHandledSafely() { | 
| 511   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 512   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| 512   DCHECK(!virtual_path_.empty()); | 513   DCHECK(!virtual_path_.empty()); | 
| 513   DCHECK(!local_path_.empty()); | 514   DCHECK(!local_path_.empty()); | 
| 514   DCHECK(!is_filetype_handled_safely_); | 515   DCHECK(!is_filetype_handled_safely_); | 
| 515 | 516 | 
| 516   next_state_ = STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE; | 517   next_state_ = STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE; | 
| 517 | 518 | 
| 518   if (mime_type_.empty()) | 519   if (mime_type_.empty()) | 
| 519     return CONTINUE; | 520     return CONTINUE; | 
| 520 | 521 | 
| 521   if (mime_util::IsSupportedMimeType(mime_type_)) { | 522   if (mime_util::IsSupportedMimeType(mime_type_)) { | 
| 522     is_filetype_handled_safely_ = true; | 523     is_filetype_handled_safely_ = true; | 
| 523     return CONTINUE; | 524     return CONTINUE; | 
| 524   } | 525   } | 
| 525 | 526 | 
| 526 #if defined(ENABLE_PLUGINS) | 527 #if BUILDFLAG(ENABLE_PLUGINS) | 
| 527   BrowserThread::PostTask( | 528   BrowserThread::PostTask( | 
| 528       BrowserThread::IO, | 529       BrowserThread::IO, | 
| 529       FROM_HERE, | 530       FROM_HERE, | 
| 530       base::Bind( | 531       base::Bind( | 
| 531           &IsHandledBySafePlugin, | 532           &IsHandledBySafePlugin, | 
| 532           GetProfile()->GetResourceContext(), | 533           GetProfile()->GetResourceContext(), | 
| 533           net::FilePathToFileURL(local_path_), | 534           net::FilePathToFileURL(local_path_), | 
| 534           mime_type_, | 535           mime_type_, | 
| 535           RETRY_IF_STALE_PLUGIN_LIST, | 536           RETRY_IF_STALE_PLUGIN_LIST, | 
| 536           base::Bind(&DownloadTargetDeterminer::DetermineIfHandledSafelyDone, | 537           base::Bind(&DownloadTargetDeterminer::DetermineIfHandledSafelyDone, | 
| 537                      weak_ptr_factory_.GetWeakPtr()))); | 538                      weak_ptr_factory_.GetWeakPtr()))); | 
| 538   return QUIT_DOLOOP; | 539   return QUIT_DOLOOP; | 
| 539 #else | 540 #else | 
| 540   return CONTINUE; | 541   return CONTINUE; | 
| 541 #endif | 542 #endif | 
| 542 } | 543 } | 
| 543 | 544 | 
| 544 #if defined(ENABLE_PLUGINS) | 545 #if BUILDFLAG(ENABLE_PLUGINS) | 
| 545 void DownloadTargetDeterminer::DetermineIfHandledSafelyDone( | 546 void DownloadTargetDeterminer::DetermineIfHandledSafelyDone( | 
| 546     bool is_handled_safely) { | 547     bool is_handled_safely) { | 
| 547   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 548   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| 548   DVLOG(20) << "Is file type handled safely: " << is_filetype_handled_safely_; | 549   DVLOG(20) << "Is file type handled safely: " << is_filetype_handled_safely_; | 
| 549   DCHECK_EQ(STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE, next_state_); | 550   DCHECK_EQ(STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE, next_state_); | 
| 550   is_filetype_handled_safely_ = is_handled_safely; | 551   is_filetype_handled_safely_ = is_handled_safely; | 
| 551   DoLoop(); | 552   DoLoop(); | 
| 552 } | 553 } | 
| 553 #endif | 554 #endif | 
| 554 | 555 | 
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 942     const base::FilePath& suggested_path) { | 943     const base::FilePath& suggested_path) { | 
| 943   return base::FilePath(suggested_path.value() + kCrdownloadSuffix); | 944   return base::FilePath(suggested_path.value() + kCrdownloadSuffix); | 
| 944 } | 945 } | 
| 945 | 946 | 
| 946 #if defined(OS_WIN) | 947 #if defined(OS_WIN) | 
| 947 // static | 948 // static | 
| 948 bool DownloadTargetDeterminer::IsAdobeReaderUpToDate() { | 949 bool DownloadTargetDeterminer::IsAdobeReaderUpToDate() { | 
| 949   return g_is_adobe_reader_up_to_date_; | 950   return g_is_adobe_reader_up_to_date_; | 
| 950 } | 951 } | 
| 951 #endif | 952 #endif | 
| OLD | NEW | 
|---|