Index: content/browser/download/download_manager_impl_unittest.cc |
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc |
index 52adff4010e44aef4d21566bd76fedc0cca3dec8..50f5a42af89341f9831e0e03e7c375902e0989aa 100644 |
--- a/content/browser/download/download_manager_impl_unittest.cc |
+++ b/content/browser/download/download_manager_impl_unittest.cc |
@@ -37,6 +37,7 @@ |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gmock_mutant.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "url/origin.h" |
using ::testing::AllOf; |
using ::testing::DoAll; |
@@ -445,12 +446,17 @@ class DownloadManagerTest : public testing::Test { |
public: |
static const char* kTestData; |
static const size_t kTestDataLen; |
+ std::vector<GURL> download_urls; |
DownloadManagerTest() |
: callback_called_(false), |
ui_thread_(BrowserThread::UI, &message_loop_), |
file_thread_(BrowserThread::FILE, &message_loop_), |
next_download_id_(0) { |
+ download_urls.push_back(GURL("http://www.url1.com")); |
+ download_urls.push_back(GURL("http://www.url2.com")); |
+ download_urls.push_back(GURL("http://www.url3.com")); |
+ download_urls.push_back(GURL("http://www.url4.com")); |
} |
// We tear down everything in TearDown(). |
@@ -521,6 +527,8 @@ class DownloadManagerTest : public testing::Test { |
// in the factory. |
scoped_ptr<DownloadRequestHandleInterface> req_handle; |
item.Start(scoped_ptr<DownloadFile>(), req_handle.Pass()); |
+ DCHECK(id < download_urls.size()); |
+ EXPECT_CALL(item, GetURL()).WillRepeatedly(ReturnRef(download_urls[id])); |
return item; |
} |
@@ -694,4 +702,41 @@ TEST_F(DownloadManagerTest, RemoveAllDownloads) { |
// result in them being removed from the DownloadManager list. |
} |
+// Confirm that a unique origin causes all downloads to be removed. |
+TEST_F(DownloadManagerTest, RemoveAllDownloadsOnUniqueOrigin) { |
+ base::Time now(base::Time::Now()); |
+ for (uint32 i = 0; i < 2; ++i) { |
+ MockDownloadItemImpl& item(AddItemToManager()); |
+ EXPECT_CALL(item, GetStartTime()).WillRepeatedly(Return(now)); |
+ EXPECT_CALL(item, GetState()) |
+ .WillRepeatedly(Return(DownloadItem::COMPLETE)); |
+ EXPECT_CALL(item, Remove()); |
+ } |
+ |
+ url::Origin origin_to_clear; |
+ EXPECT_TRUE(origin_to_clear.unique()); |
+ int remove_count = download_manager_->RemoveDownloadsBetween( |
+ origin_to_clear, base::Time(), base::Time::Max()); |
+ EXPECT_EQ(remove_count, 2); |
+} |
+ |
+// Confirm that only downloads with same origin are removed. |
+TEST_F(DownloadManagerTest, RemoveSameOriginDownloads) { |
+ base::Time now(base::Time::Now()); |
+ for (uint32 i = 0; i < 2; ++i) { |
+ MockDownloadItemImpl& item(AddItemToManager()); |
+ EXPECT_CALL(item, GetStartTime()).WillRepeatedly(Return(now)); |
+ EXPECT_CALL(item, GetState()) |
+ .WillRepeatedly(Return(DownloadItem::COMPLETE)); |
+ } |
+ |
+ EXPECT_CALL(GetMockDownloadItem(0), Remove()); |
+ EXPECT_CALL(GetMockDownloadItem(1), Remove()).Times(0); |
+ |
+ url::Origin origin_to_clear(download_urls[0]); |
+ int remove_count = download_manager_->RemoveDownloadsBetween( |
+ origin_to_clear, base::Time(), base::Time::Max()); |
+ EXPECT_EQ(remove_count, 1); |
+} |
+ |
} // namespace content |