Index: content/browser/download/download_item_impl.cc |
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc |
index 73c3cc9435fd6f40dbc4e7f224812936908a697d..23d20928cc7a94ab9f5c882a875de921470865dd 100644 |
--- a/content/browser/download/download_item_impl.cc |
+++ b/content/browser/download/download_item_impl.cc |
@@ -14,6 +14,7 @@ |
#include "base/i18n/string_search.h" |
#include "base/logging.h" |
#include "base/metrics/histogram.h" |
+#include "base/stl_util.h" |
#include "base/stringprintf.h" |
#include "base/utf_string_conversions.h" |
#include "content/browser/download/download_create_info.h" |
@@ -260,6 +261,8 @@ DownloadItemImpl::~DownloadItemImpl() { |
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
TransitionTo(REMOVING); |
+ STLDeleteContainerPairSecondPointers( |
+ external_data_map_.begin(), external_data_map_.end()); |
delegate_->AssertStateConsistent(this); |
delegate_->Detach(); |
} |
@@ -928,3 +931,23 @@ bool DownloadItemImpl::NeedsRename() const { |
return state_info_.target_name != full_path_.BaseName(); |
} |
void DownloadItemImpl::MockDownloadOpenForTesting() { open_enabled_ = false; } |
+ |
+DownloadItem::ExternalData* |
+DownloadItemImpl::GetExternalData(const void* key) { |
+ if (!ContainsKey(external_data_map_, key)) |
+ return NULL; |
+ return external_data_map_[key]; |
+} |
+ |
+void DownloadItemImpl::SetExternalData( |
+ const void* key, DownloadItem::ExternalData* data) { |
+ std::map<const void*, ExternalData*>::iterator it = |
+ external_data_map_.find(key); |
+ |
+ if (it == external_data_map_.end()) { |
+ external_data_map_[key] = data; |
+ } else if (it->second != data) { |
+ delete it->second; |
+ it->second = data; |
+ } |
+} |