Merge DownloadItem::SafetyState and DownloadDangerType

[email protected]
[email protected]


Review URL: https://chromiumcodereview.appspot.com/11693011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177304 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc
index 7f54d1c..6a6acba 100644
--- a/content/browser/download/download_item_impl.cc
+++ b/content/browser/download/download_item_impl.cc
@@ -46,6 +46,7 @@
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/download_danger_type.h"
 #include "content/public/browser/download_interrupt_reasons.h"
 #include "content/public/browser/download_url_parameters.h"
 #include "content/public/common/content_switches.h"
@@ -64,20 +65,6 @@
     file_util::Delete(path, false);
 }
 
-const char* DebugSafetyStateString(DownloadItem::SafetyState state) {
-  switch (state) {
-    case DownloadItem::SAFE:
-      return "SAFE";
-    case DownloadItem::DANGEROUS:
-      return "DANGEROUS";
-    case DownloadItem::DANGEROUS_BUT_VALIDATED:
-      return "DANGEROUS_BUT_VALIDATED";
-    default:
-      NOTREACHED() << "Unknown safety state " << state;
-      return "unknown";
-  };
-}
-
 // Classes to null out request handle calls (for SavePage DownloadItems, which
 // may have, e.g., Cancel() called on them without it doing anything)
 // and to DCHECK on them (for history DownloadItems, which should never have
@@ -158,7 +145,6 @@
       auto_resume_count_(0),
       open_when_complete_(false),
       file_externally_removed_(false),
-      safety_state_(SAFE),
       auto_opened_(false),
       is_temporary_(false),
       all_data_saved_(false),
@@ -208,7 +194,6 @@
       auto_resume_count_(0),
       open_when_complete_(false),
       file_externally_removed_(false),
-      safety_state_(SAFE),
       auto_opened_(false),
       is_temporary_(!info.save_info->file_path.empty()),
       all_data_saved_(false),
@@ -262,7 +247,6 @@
       auto_resume_count_(0),
       open_when_complete_(false),
       file_externally_removed_(false),
-      safety_state_(SAFE),
       auto_opened_(false),
       is_temporary_(false),
       all_data_saved_(false),
@@ -308,7 +292,7 @@
 void DownloadItemImpl::DangerousDownloadValidated() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   DCHECK_EQ(IN_PROGRESS, GetState());
-  DCHECK_EQ(DANGEROUS, GetSafetyState());
+  DCHECK(IsDangerous());
 
   VLOG(20) << __FUNCTION__ << " download=" << DebugString(true);
 
@@ -319,12 +303,11 @@
                             GetDangerType(),
                             DOWNLOAD_DANGER_TYPE_MAX);
 
-  safety_state_ = DANGEROUS_BUT_VALIDATED;
+  danger_type_ = DOWNLOAD_DANGER_TYPE_USER_VALIDATED;
 
   bound_net_log_.AddEvent(
       net::NetLog::TYPE_DOWNLOAD_ITEM_SAFETY_STATE_UPDATED,
-      base::Bind(&ItemCheckedNetLogCallback,
-                 GetDangerType(), GetSafetyState()));
+      base::Bind(&ItemCheckedNetLogCallback, GetDangerType()));
 
   UpdateObservers();
 
@@ -590,9 +573,11 @@
   return forced_file_path_;
 }
 
+// TODO(asanka): Get rid of GetUserVerifiedFilePath().  http://crbug.com/134237.
 FilePath DownloadItemImpl::GetUserVerifiedFilePath() const {
-  return (safety_state_ == DownloadItem::SAFE) ?
-      GetTargetFilePath() : GetFullPath();
+  return (IsDangerous() ||
+          danger_type_ == DOWNLOAD_DANGER_TYPE_USER_VALIDATED) ?
+      GetFullPath() : GetTargetFilePath();
 }
 
 FilePath DownloadItemImpl::GetFileNameToReportUser() const {
@@ -617,11 +602,6 @@
   return file_externally_removed_;
 }
 
-// TODO(asanka): Unify GetSafetyState() and IsDangerous().
-DownloadItem::SafetyState DownloadItemImpl::GetSafetyState() const {
-  return safety_state_;
-}
-
 bool DownloadItemImpl::IsDangerous() const {
 #ifdef OS_WIN
   // TODO(noelutz): At this point only the windows views UI supports
@@ -786,7 +766,7 @@
         " paused = %c"
         " resume_mode = %s"
         " auto_resume_count = %d"
-        " safety = %s"
+        " danger = %d"
         " all_data_saved = %c"
         " last_modified = '%s'"
         " etag = '%s'"
@@ -800,7 +780,7 @@
         IsPaused() ? 'T' : 'F',
         DebugResumeModeString(GetResumeMode()),
         auto_resume_count_,
-        DebugSafetyStateString(GetSafetyState()),
+        GetDangerType(),
         AllDataSaved() ? 'T' : 'F',
         GetLastModifiedTime().c_str(),
         GetETag().c_str(),
@@ -1263,7 +1243,7 @@
   // Confirm we're in the proper set of states to be here;
   // have all data, have a history handle, (validated or safe).
   DCHECK_EQ(IN_PROGRESS_INTERNAL, state_);
-  DCHECK_NE(DownloadItem::DANGEROUS, GetSafetyState());
+  DCHECK(!IsDangerous());
   DCHECK(all_data_saved_);
 
   OnDownloadCompleting();
@@ -1280,7 +1260,7 @@
   VLOG(20) << __FUNCTION__ << "()"
            << " " << DebugString(true);
   DCHECK(!GetTargetFilePath().empty());
-  DCHECK_NE(DANGEROUS, GetSafetyState());
+  DCHECK(!IsDangerous());
 
   // TODO(rdsmith/benjhayden): Remove as part of SavePackage integration.
   if (is_save_package_download_) {
@@ -1456,7 +1436,7 @@
 
   // If the download is dangerous, but not yet validated, it's not ready for
   // completion.
-  if (GetSafetyState() == DownloadItem::DANGEROUS)
+  if (IsDangerous())
     return false;
 
   // If the download isn't active (e.g. has been cancelled) it's not
@@ -1553,18 +1533,12 @@
 }
 
 void DownloadItemImpl::SetDangerType(DownloadDangerType danger_type) {
-  danger_type_ = danger_type;
-  // Notify observers if the safety state has changed as a result of the new
-  // danger type.
-  SafetyState updated_value = IsDangerous() ?
-      DownloadItem::DANGEROUS : DownloadItem::SAFE;
-  if (updated_value != safety_state_) {
-    safety_state_ = updated_value;
+  if (danger_type != danger_type_) {
     bound_net_log_.AddEvent(
         net::NetLog::TYPE_DOWNLOAD_ITEM_SAFETY_STATE_UPDATED,
-        base::Bind(&ItemCheckedNetLogCallback, GetDangerType(),
-                   GetSafetyState()));
+        base::Bind(&ItemCheckedNetLogCallback, danger_type));
   }
+  danger_type_ = danger_type;
 }
 
 void DownloadItemImpl::SetFullPath(const FilePath& new_path) {
diff --git a/content/browser/download/download_item_impl.h b/content/browser/download/download_item_impl.h
index fb91db837..b1520741 100644
--- a/content/browser/download/download_item_impl.h
+++ b/content/browser/download/download_item_impl.h
@@ -128,7 +128,6 @@
   virtual const std::string& GetHash() const OVERRIDE;
   virtual const std::string& GetHashState() const OVERRIDE;
   virtual bool GetFileExternallyRemoved() const OVERRIDE;
-  virtual SafetyState GetSafetyState() const OVERRIDE;
   virtual bool IsDangerous() const OVERRIDE;
   virtual DownloadDangerType GetDangerType() const OVERRIDE;
   virtual bool TimeRemaining(base::TimeDelta* remaining) const OVERRIDE;
@@ -450,10 +449,6 @@
   // A flag for indicating if the downloaded file is externally removed.
   bool file_externally_removed_;
 
-  // Indicates if the download is considered potentially safe or dangerous
-  // (executable files are typically considered dangerous).
-  SafetyState safety_state_;
-
   // True if the download was auto-opened. We set this rather than using
   // an observer as it's frequently possible for the download to be auto opened
   // before the observer is added.
diff --git a/content/browser/download/download_item_impl_unittest.cc b/content/browser/download/download_item_impl_unittest.cc
index 0146b1b..85428806 100644
--- a/content/browser/download/download_item_impl_unittest.cc
+++ b/content/browser/download/download_item_impl_unittest.cc
@@ -1005,7 +1005,7 @@
   EXPECT_TRUE(item->IsDangerous());
 
   item->DangerousDownloadValidated();
-  EXPECT_EQ(DownloadItem::DANGEROUS_BUT_VALIDATED, item->GetSafetyState());
+  EXPECT_EQ(DOWNLOAD_DANGER_TYPE_USER_VALIDATED, item->GetDangerType());
   RunAllPendingInMessageLoops();
   EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
 }
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index 32328b4..4b40c27 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -316,8 +316,7 @@
     // associative containers such as sets.
     it++;
 
-    if (download->GetSafetyState() == DownloadItem::DANGEROUS &&
-        download->IsPartialDownload()) {
+    if (download->IsDangerous() && download->IsPartialDownload()) {
       // The user hasn't accepted it, so we need to remove it
       // from the disk.  This may or may not result in it being
       // removed from the DownloadManager queues and deleted
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index 84710fcb..b1c5ac6 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -146,7 +146,6 @@
   MOCK_CONST_METHOD0(GetOpenWhenComplete, bool());
   MOCK_METHOD1(SetOpenWhenComplete, void(bool));
   MOCK_CONST_METHOD0(GetFileExternallyRemoved, bool());
-  MOCK_CONST_METHOD0(GetSafetyState, SafetyState());
   MOCK_CONST_METHOD0(GetDangerType, DownloadDangerType());
   MOCK_CONST_METHOD0(IsDangerous, bool());
   MOCK_METHOD0(GetAutoOpened, bool());
@@ -464,8 +463,8 @@
   virtual void TearDown() {
     while (MockDownloadItemImpl*
            item = mock_download_item_factory_->PopItem()) {
-      EXPECT_CALL(*item, GetSafetyState())
-          .WillOnce(Return(DownloadItem::SAFE));
+      EXPECT_CALL(*item, IsDangerous())
+          .WillOnce(Return(false));
       EXPECT_CALL(*item, IsPartialDownload())
           .WillOnce(Return(false));
     }
diff --git a/content/browser/download/download_net_log_parameters.cc b/content/browser/download/download_net_log_parameters.cc
index 6de2729..22e837e 100644
--- a/content/browser/download/download_net_log_parameters.cc
+++ b/content/browser/download/download_net_log_parameters.cc
@@ -22,25 +22,18 @@
   "HISTORY_IMPORT",
   "SAVE_PAGE_AS"
 };
-static const char* download_safety_names[] = {
-  "SAFE",
-  "DANGEROUS",
-  "DANGEROUS_BUT_VALIDATED"
-};
 static const char* download_danger_names[] = {
   "NOT_DANGEROUS",
   "DANGEROUS_FILE",
   "DANGEROUS_URL",
   "DANGEROUS_CONTENT",
   "MAYBE_DANGEROUS_CONTENT",
-  "UNCOMMON_CONTENT"
+  "UNCOMMON_CONTENT",
+  "USER_VALIDATED"
 };
 
 COMPILE_ASSERT(ARRAYSIZE_UNSAFE(download_type_names) == SRC_SAVE_PAGE_AS + 1,
                download_type_enum_has_changed);
-COMPILE_ASSERT(ARRAYSIZE_UNSAFE(download_safety_names) ==
-                  DownloadItem::DANGEROUS_BUT_VALIDATED + 1,
-               downloaditem_safety_state_enum_has_changed);
 COMPILE_ASSERT(ARRAYSIZE_UNSAFE(download_danger_names) ==
                   DOWNLOAD_DANGER_TYPE_MAX,
                download_danger_enum_has_changed);
@@ -61,8 +54,6 @@
   dict->SetString("file_name", *file_name);
   dict->SetString("danger_type",
                   download_danger_names[download_item->GetDangerType()]);
-  dict->SetString("safety_state",
-                  download_safety_names[download_item->GetSafetyState()]);
   dict->SetString("start_offset",
                   base::Int64ToString(download_item->GetReceivedBytes()));
 
@@ -71,12 +62,10 @@
 
 base::Value* ItemCheckedNetLogCallback(
     DownloadDangerType danger_type,
-    DownloadItem::SafetyState safety_state,
     net::NetLog::LogLevel log_level) {
   DictionaryValue* dict = new DictionaryValue();
 
   dict->SetString("danger_type", download_danger_names[danger_type]);
-  dict->SetString("safety_state", download_safety_names[safety_state]);
 
   return dict;
 }
diff --git a/content/browser/download/download_net_log_parameters.h b/content/browser/download/download_net_log_parameters.h
index c8d63443..fc38e95 100644
--- a/content/browser/download/download_net_log_parameters.h
+++ b/content/browser/download/download_net_log_parameters.h
@@ -32,7 +32,6 @@
 // Returns NetLog parameters when a DownloadItem is checked for danger.
 base::Value* ItemCheckedNetLogCallback(
     DownloadDangerType danger_type,
-    DownloadItem::SafetyState safety_state,
     net::NetLog::LogLevel log_level);
 
 // Returns NetLog parameters when a DownloadItem is renamed.
diff --git a/content/browser/download/download_stats.h b/content/browser/download/download_stats.h
index dcd87e2..282d0e0b 100644
--- a/content/browser/download/download_stats.h
+++ b/content/browser/download/download_stats.h
@@ -92,7 +92,6 @@
   DOWNLOAD_SOURCE_LAST_ENTRY
 };
 
-
 // Increment one of the above counts.
 void RecordDownloadCount(DownloadCountTypes type);