Commit c68dd427 authored by asanka@chromium.org's avatar asanka@chromium.org

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
parent 2ffd73d9
...@@ -1131,9 +1131,17 @@ void DownloadItemImpl::MockDownloadOpenForTesting() { open_enabled_ = false; } ...@@ -1131,9 +1131,17 @@ void DownloadItemImpl::MockDownloadOpenForTesting() { open_enabled_ = false; }
DownloadItem::ExternalData* DownloadItem::ExternalData*
DownloadItemImpl::GetExternalData(const void* key) { DownloadItemImpl::GetExternalData(const void* key) {
if (!ContainsKey(external_data_map_, key)) // The behavior of the const overload is identical with the exception of the
return NULL; // constness of |this| and the return value.
return external_data_map_[key]; 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( void DownloadItemImpl::SetExternalData(
......
...@@ -209,6 +209,7 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { ...@@ -209,6 +209,7 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem {
virtual std::string DebugString(bool verbose) const OVERRIDE; virtual std::string DebugString(bool verbose) const OVERRIDE;
virtual void MockDownloadOpenForTesting() OVERRIDE; virtual void MockDownloadOpenForTesting() OVERRIDE;
virtual ExternalData* GetExternalData(const void* key) 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; virtual void SetExternalData(const void* key, ExternalData* data) OVERRIDE;
private: private:
......
...@@ -294,9 +294,11 @@ class TestExternalData : public DownloadItem::ExternalData { ...@@ -294,9 +294,11 @@ class TestExternalData : public DownloadItem::ExternalData {
TEST_F(DownloadItemTest, ExternalData) { TEST_F(DownloadItemTest, ExternalData) {
DownloadItem* item = CreateDownloadItem(DownloadItem::IN_PROGRESS); DownloadItem* item = CreateDownloadItem(DownloadItem::IN_PROGRESS);
const DownloadItem* const_item = item;
// Shouldn't be anything there before set. // Shouldn't be anything there before set.
EXPECT_EQ(NULL, item->GetExternalData(&external_data_test_string)); EXPECT_EQ(NULL, item->GetExternalData(&external_data_test_string));
EXPECT_EQ(NULL, const_item->GetExternalData(&external_data_test_string));
TestExternalData* test1(new TestExternalData()); TestExternalData* test1(new TestExternalData());
test1->value = 2; test1->value = 2;
...@@ -308,6 +310,13 @@ TEST_F(DownloadItemTest, ExternalData) { ...@@ -308,6 +310,13 @@ TEST_F(DownloadItemTest, ExternalData) {
item->GetExternalData(&external_data_test_string)); item->GetExternalData(&external_data_test_string));
EXPECT_EQ(test1, test_result); 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 // Destructor should be called if value overwritten. New value
// should then be retrievable. // should then be retrievable.
TestExternalData* test2(new TestExternalData()); TestExternalData* test2(new TestExternalData());
......
...@@ -344,7 +344,8 @@ class CONTENT_EXPORT DownloadItem { ...@@ -344,7 +344,8 @@ class CONTENT_EXPORT DownloadItem {
// If an object is already held by the DownloadItem associated with // If an object is already held by the DownloadItem associated with
// the passed key, it will be destroyed if overwriten by a new pointer // the passed key, it will be destroyed if overwriten by a new pointer
// (overwrites by the same pointer are ignored). // (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 void SetExternalData(const void* key, ExternalData* data) = 0;
virtual std::string DebugString(bool verbose) const = 0; virtual std::string DebugString(bool verbose) const = 0;
......
...@@ -116,6 +116,7 @@ class MockDownloadItem : public content::DownloadItem { ...@@ -116,6 +116,7 @@ class MockDownloadItem : public content::DownloadItem {
MOCK_CONST_METHOD1(DebugString, std::string(bool)); MOCK_CONST_METHOD1(DebugString, std::string(bool));
MOCK_METHOD0(MockDownloadOpenForTesting, void()); MOCK_METHOD0(MockDownloadOpenForTesting, void());
MOCK_METHOD1(GetExternalData, ExternalData*(const void*)); MOCK_METHOD1(GetExternalData, ExternalData*(const void*));
MOCK_CONST_METHOD1(GetExternalData, const ExternalData*(const void*));
MOCK_METHOD2(SetExternalData, void(const void*, ExternalData*)); MOCK_METHOD2(SetExternalData, void(const void*, ExternalData*));
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment