| Index: content/browser/download/download_item_impl_unittest.cc
|
| diff --git a/content/browser/download/download_item_impl_unittest.cc b/content/browser/download/download_item_impl_unittest.cc
|
| index 502e426aa5417f472f1692991b7df8ed06805d5f..abbd52e75247763268a7d78a4a3db39a2d690b1b 100644
|
| --- a/content/browser/download/download_item_impl_unittest.cc
|
| +++ b/content/browser/download/download_item_impl_unittest.cc
|
| @@ -131,16 +131,42 @@ class DownloadItemTest : public testing::Test {
|
| public:
|
| class MockObserver : public DownloadItem::Observer {
|
| public:
|
| - explicit MockObserver(DownloadItem* item) : item_(item), updated_(false) {
|
| + explicit MockObserver(DownloadItem* item)
|
| + : item_(item),
|
| + removed_(false),
|
| + destroyed_(false),
|
| + updated_(false) {
|
| item_->AddObserver(this);
|
| }
|
| - ~MockObserver() { item_->RemoveObserver(this); }
|
| +
|
| + virtual ~MockObserver() {
|
| + if (item_) item_->RemoveObserver(this);
|
| + }
|
| +
|
| + virtual void OnDownloadRemoved(DownloadItem* download) {
|
| + removed_ = true;
|
| + }
|
|
|
| virtual void OnDownloadUpdated(DownloadItem* download) {
|
| updated_ = true;
|
| }
|
|
|
| - virtual void OnDownloadOpened(DownloadItem* download) { }
|
| + virtual void OnDownloadOpened(DownloadItem* download) {
|
| + }
|
| +
|
| + virtual void OnDownloadDestroyed(DownloadItem* download) {
|
| + destroyed_ = true;
|
| + item_->RemoveObserver(this);
|
| + item_ = NULL;
|
| + }
|
| +
|
| + bool CheckRemoved() {
|
| + return removed_;
|
| + }
|
| +
|
| + bool CheckDestroyed() {
|
| + return destroyed_;
|
| + }
|
|
|
| bool CheckUpdated() {
|
| bool was_updated = updated_;
|
| @@ -150,6 +176,8 @@ class DownloadItemTest : public testing::Test {
|
|
|
| private:
|
| DownloadItem* item_;
|
| + bool removed_;
|
| + bool destroyed_;
|
| bool updated_;
|
| };
|
|
|
| @@ -302,12 +330,21 @@ TEST_F(DownloadItemTest, NotificationAfterDelete) {
|
| ASSERT_TRUE(observer.CheckUpdated());
|
| }
|
|
|
| +TEST_F(DownloadItemTest, NotificationAfterDestroyed) {
|
| + DownloadItemImpl* item = CreateDownloadItem(DownloadItem::IN_PROGRESS);
|
| + MockObserver observer(item);
|
| +
|
| + DestroyDownloadItem(item);
|
| + ASSERT_TRUE(observer.CheckDestroyed());
|
| +}
|
| +
|
| TEST_F(DownloadItemTest, NotificationAfterRemove) {
|
| DownloadItemImpl* item = CreateDownloadItem(DownloadItem::IN_PROGRESS);
|
| MockObserver observer(item);
|
|
|
| item->Remove();
|
| ASSERT_TRUE(observer.CheckUpdated());
|
| + ASSERT_TRUE(observer.CheckRemoved());
|
| }
|
|
|
| TEST_F(DownloadItemTest, NotificationAfterOnContentCheckCompleted) {
|
| @@ -408,73 +445,6 @@ TEST_F(DownloadItemTest, DisplayName) {
|
| item->GetFileNameToReportUser().value());
|
| }
|
|
|
| -static char external_data_test_string[] = "External data test";
|
| -static int destructor_called = 0;
|
| -
|
| -class TestExternalData : public DownloadItem::ExternalData {
|
| - public:
|
| - int value;
|
| - virtual ~TestExternalData() {
|
| - destructor_called++;
|
| - }
|
| -};
|
| -
|
| -TEST_F(DownloadItemTest, ExternalData) {
|
| - DownloadItemImpl* item = CreateDownloadItem(DownloadItem::IN_PROGRESS);
|
| - const DownloadItemImpl* 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;
|
| -
|
| - // Should be able to get back what you set.
|
| - item->SetExternalData(&external_data_test_string, test1);
|
| - TestExternalData* test_result =
|
| - static_cast<TestExternalData*>(
|
| - 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());
|
| - test2->value = 3;
|
| - EXPECT_EQ(0, destructor_called);
|
| - item->SetExternalData(&external_data_test_string, test2);
|
| - EXPECT_EQ(1, destructor_called);
|
| - EXPECT_EQ(static_cast<DownloadItem::ExternalData*>(test2),
|
| - item->GetExternalData(&external_data_test_string));
|
| -
|
| - // Overwriting with the same value shouldn't do anything.
|
| - EXPECT_EQ(1, destructor_called);
|
| - item->SetExternalData(&external_data_test_string, test2);
|
| - EXPECT_EQ(1, destructor_called);
|
| - EXPECT_EQ(static_cast<DownloadItem::ExternalData*>(test2),
|
| - item->GetExternalData(&external_data_test_string));
|
| -
|
| - // Overwriting with NULL should result in destruction.
|
| - item->SetExternalData(&external_data_test_string, NULL);
|
| - EXPECT_EQ(2, destructor_called);
|
| -
|
| - // Destroying the download item should destroy the external data.
|
| -
|
| - TestExternalData* test3(new TestExternalData());
|
| - item->SetExternalData(&external_data_test_string, test3);
|
| - EXPECT_EQ(static_cast<DownloadItem::ExternalData*>(test3),
|
| - item->GetExternalData(&external_data_test_string));
|
| - DestroyDownloadItem(item);
|
| - EXPECT_EQ(3, destructor_called);
|
| -}
|
| -
|
| // Test that the delegate is invoked after the download file is renamed.
|
| // Delegate::DownloadRenamedToIntermediateName() should be invoked when the
|
| // download is renamed to the intermediate name.
|
|
|