summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorasanka@chromium.org <asanka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-02 17:44:57 +0000
committerasanka@chromium.org <asanka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-02 17:44:57 +0000
commitc68dd427a84abfddbdf2d357b22c955d5cc55372 (patch)
treee6bc23402cc8e30703ec7df4c86fc65aa60fc9cb /content
parent2ffd73d989f9f07df881020d55e2e2e768efda6f (diff)
downloadchromium_src-c68dd427a84abfddbdf2d357b22c955d5cc55372.zip
chromium_src-c68dd427a84abfddbdf2d357b22c955d5cc55372.tar.gz
chromium_src-c68dd427a84abfddbdf2d357b22c955d5cc55372.tar.bz2
Add a const overload to DownloadItem::GetExternalData().
BUG=78085 TEST=unit_tests Review URL: http://codereview.chromium.org/9518008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124678 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/download/download_item_impl.cc14
-rw-r--r--content/browser/download/download_item_impl.h1
-rw-r--r--content/browser/download/download_item_impl_unittest.cc9
-rw-r--r--content/public/browser/download_item.h3
-rw-r--r--content/test/mock_download_item.h1
5 files changed, 24 insertions, 4 deletions
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc
index dd08306..a8341b1 100644
--- a/content/browser/download/download_item_impl.cc
+++ b/content/browser/download/download_item_impl.cc
@@ -1131,9 +1131,17 @@ 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];
+ // The behavior of the const overload is identical with the exception of the
+ // constness of |this| and the return value.
+ return const_cast<DownloadItem::ExternalData*>(
+ static_cast<const DownloadItemImpl&>(*this).GetExternalData(key));
+}
+
+const DownloadItem::ExternalData*
+DownloadItemImpl::GetExternalData(const void* key) const {
+ std::map<const void*, ExternalData*>::const_iterator it =
+ external_data_map_.find(key);
+ return (it == external_data_map_.end()) ? NULL : it->second;
}
void DownloadItemImpl::SetExternalData(
diff --git a/content/browser/download/download_item_impl.h b/content/browser/download/download_item_impl.h
index f034a21..3e00796 100644
--- a/content/browser/download/download_item_impl.h
+++ b/content/browser/download/download_item_impl.h
@@ -209,6 +209,7 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem {
virtual std::string DebugString(bool verbose) const OVERRIDE;
virtual void MockDownloadOpenForTesting() OVERRIDE;
virtual ExternalData* GetExternalData(const void* key) OVERRIDE;
+ virtual const ExternalData* GetExternalData(const void* key) const OVERRIDE;
virtual void SetExternalData(const void* key, ExternalData* data) OVERRIDE;
private:
diff --git a/content/browser/download/download_item_impl_unittest.cc b/content/browser/download/download_item_impl_unittest.cc
index a794d3f..55bad0e 100644
--- a/content/browser/download/download_item_impl_unittest.cc
+++ b/content/browser/download/download_item_impl_unittest.cc
@@ -294,9 +294,11 @@ class TestExternalData : public DownloadItem::ExternalData {
TEST_F(DownloadItemTest, ExternalData) {
DownloadItem* item = CreateDownloadItem(DownloadItem::IN_PROGRESS);
+ const DownloadItem* const_item = item;
// Shouldn't be anything there before set.
EXPECT_EQ(NULL, item->GetExternalData(&external_data_test_string));
+ EXPECT_EQ(NULL, const_item->GetExternalData(&external_data_test_string));
TestExternalData* test1(new TestExternalData());
test1->value = 2;
@@ -308,6 +310,13 @@ TEST_F(DownloadItemTest, ExternalData) {
item->GetExternalData(&external_data_test_string));
EXPECT_EQ(test1, test_result);
+ // Ditto for const lookup.
+ const TestExternalData* test_const_result =
+ static_cast<const TestExternalData*>(
+ const_item->GetExternalData(&external_data_test_string));
+ EXPECT_EQ(static_cast<const TestExternalData*>(test1),
+ test_const_result);
+
// Destructor should be called if value overwritten. New value
// should then be retrievable.
TestExternalData* test2(new TestExternalData());
diff --git a/content/public/browser/download_item.h b/content/public/browser/download_item.h
index 803c6bf..106cfb6 100644
--- a/content/public/browser/download_item.h
+++ b/content/public/browser/download_item.h
@@ -344,7 +344,8 @@ class CONTENT_EXPORT DownloadItem {
// If an object is already held by the DownloadItem associated with
// the passed key, it will be destroyed if overwriten by a new pointer
// (overwrites by the same pointer are ignored).
- virtual ExternalData* GetExternalData(const void* key) = 0;
+ virtual ExternalData* GetExternalData(const void* key) = 0;
+ virtual const ExternalData* GetExternalData(const void* key) const = 0;
virtual void SetExternalData(const void* key, ExternalData* data) = 0;
virtual std::string DebugString(bool verbose) const = 0;
diff --git a/content/test/mock_download_item.h b/content/test/mock_download_item.h
index ad0378d..c91e94c 100644
--- a/content/test/mock_download_item.h
+++ b/content/test/mock_download_item.h
@@ -116,6 +116,7 @@ class MockDownloadItem : public content::DownloadItem {
MOCK_CONST_METHOD1(DebugString, std::string(bool));
MOCK_METHOD0(MockDownloadOpenForTesting, void());
MOCK_METHOD1(GetExternalData, ExternalData*(const void*));
+ MOCK_CONST_METHOD1(GetExternalData, const ExternalData*(const void*));
MOCK_METHOD2(SetExternalData, void(const void*, ExternalData*));
};