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; }
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(
......
......@@ -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:
......
......@@ -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());
......
......@@ -345,6 +345,7 @@ class CONTENT_EXPORT DownloadItem {
// 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 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;
......
......@@ -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*));
};
......
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