Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3481)

Unified Diff: chrome/browser/download/download_history_unittest.cc

Issue 230103002: [Downloads] Ask DownloadHistory if a download was from history. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix build Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/download/download_history.cc ('k') | chrome/browser/download/download_item_model.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/download/download_history_unittest.cc
diff --git a/chrome/browser/download/download_history_unittest.cc b/chrome/browser/download/download_history_unittest.cc
index 36cc00b2d320f3f944e9cf4e828e60a9ab7a4ea8..81568b945a30fa8c120f85f5cf57ee273701ab1e 100644
--- a/chrome/browser/download/download_history_unittest.cc
+++ b/chrome/browser/download/download_history_unittest.cc
@@ -5,6 +5,7 @@
#include <set>
#include <vector>
+#include "base/memory/weak_ptr.h"
#include "base/rand_util.h"
#include "base/stl_util.h"
#include "chrome/browser/download/download_history.h"
@@ -193,6 +194,9 @@ class FakeHistoryAdapter : public DownloadHistory::HistoryAdapter {
class DownloadHistoryTest : public testing::Test {
public:
+ // Generic callback that receives a pointer to a StrictMockDownloadItem.
+ typedef base::Callback<void(content::MockDownloadItem*)> DownloadItemCallback;
+
DownloadHistoryTest()
: ui_thread_(content::BrowserThread::UI, &loop_),
manager_(new content::MockDownloadManager()),
@@ -210,6 +214,7 @@ class DownloadHistoryTest : public testing::Test {
content::MockDownloadManager& manager() { return *manager_.get(); }
content::MockDownloadItem& item(size_t index) { return *items_[index]; }
+ DownloadHistory* download_history() { return download_history_.get(); }
void SetManagerObserver(
content::DownloadManager::Observer* manager_observer) {
@@ -219,7 +224,7 @@ class DownloadHistoryTest : public testing::Test {
return manager_observer_;
}
- void ExpectWillQueryDownloads(scoped_ptr<InfoVector> infos) {
+ void CreateDownloadHistory(scoped_ptr<InfoVector> infos) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
CHECK(infos.get());
EXPECT_CALL(manager(), AddObserver(_)).WillOnce(WithArg<0>(Invoke(
@@ -261,7 +266,11 @@ class DownloadHistoryTest : public testing::Test {
void CallOnDownloadCreated(size_t index) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ if (!pre_on_create_handler_.is_null())
+ pre_on_create_handler_.Run(&item(index));
manager_observer()->OnDownloadCreated(&manager(), &item(index));
+ if (!post_on_create_handler_.is_null())
+ post_on_create_handler_.Run(&item(index));
}
void CallOnDownloadCreatedInOrder() {
@@ -317,6 +326,18 @@ class DownloadHistoryTest : public testing::Test {
history_->ExpectDownloadsRemoved(ids);
}
+ void ExpectDownloadsRestoredFromHistory(bool expected_value) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ pre_on_create_handler_ =
+ base::Bind(&DownloadHistoryTest::CheckDownloadWasRestoredFromHistory,
+ base::Unretained(this),
+ expected_value);
+ post_on_create_handler_ =
+ base::Bind(&DownloadHistoryTest::CheckDownloadWasRestoredFromHistory,
+ base::Unretained(this),
+ expected_value);
+ }
+
void InitBasicItem(const base::FilePath::CharType* path,
const char* url_string,
const char* referrer_string,
@@ -437,6 +458,12 @@ class DownloadHistoryTest : public testing::Test {
}
private:
+ void CheckDownloadWasRestoredFromHistory(bool expected_value,
+ content::MockDownloadItem* item) {
+ ASSERT_TRUE(download_history_.get());
+ EXPECT_EQ(expected_value, download_history_->WasRestoredFromHistory(item));
+ }
+
base::MessageLoopForUI loop_;
content::TestBrowserThread ui_thread_;
std::vector<StrictMockDownloadItem*> items_;
@@ -445,12 +472,12 @@ class DownloadHistoryTest : public testing::Test {
scoped_ptr<DownloadHistory> download_history_;
content::DownloadManager::Observer* manager_observer_;
size_t download_created_index_;
+ DownloadItemCallback pre_on_create_handler_;
+ DownloadItemCallback post_on_create_handler_;
DISALLOW_COPY_AND_ASSIGN(DownloadHistoryTest);
};
-} // namespace
-
// Test loading an item from the database, changing it, saving it back, removing
// it.
TEST_F(DownloadHistoryTest, DownloadHistoryTest_Load) {
@@ -464,7 +491,7 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Load) {
{
scoped_ptr<InfoVector> infos(new InfoVector());
infos->push_back(info);
- ExpectWillQueryDownloads(infos.Pass());
+ CreateDownloadHistory(infos.Pass());
ExpectNoDownloadCreated();
}
EXPECT_TRUE(DownloadHistory::IsPersisted(&item(0)));
@@ -482,12 +509,62 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Load) {
ExpectDownloadsRemoved(ids);
}
+// Test that WasRestoredFromHistory accurately identifies downloads that were
+// created from history, even during an OnDownloadCreated() handler.
+TEST_F(DownloadHistoryTest, DownloadHistoryTest_WasRestoredFromHistory_True) {
+ // This sets DownloadHistoryTest to call DH::WasRestoredFromHistory() both
+ // before and after DH::OnDownloadCreated() is called. At each call, the
+ // expected return value is |true| since the download was restored from
+ // history.
+ ExpectDownloadsRestoredFromHistory(true);
+
+ // Construct a DownloadHistory with a single history download. This results in
+ // DownloadManager::CreateDownload() being called for the restored download.
+ // The above test expectation should verify that the value of
+ // WasRestoredFromHistory is correct for this download.
+ history::DownloadRow info;
+ InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
+ "http://example.com/bar.pdf",
+ "http://example.com/referrer.html",
+ &info);
+ scoped_ptr<InfoVector> infos(new InfoVector());
+ infos->push_back(info);
+ CreateDownloadHistory(infos.Pass());
+
+ EXPECT_TRUE(DownloadHistory::IsPersisted(&item(0)));
+}
+
+// Test that WasRestoredFromHistory accurately identifies downloads that were
+// not created from history.
+TEST_F(DownloadHistoryTest, DownloadHistoryTest_WasRestoredFromHistory_False) {
+ // This sets DownloadHistoryTest to call DH::WasRestoredFromHistory() both
+ // before and after DH::OnDownloadCreated() is called. At each call, the
+ // expected return value is |true| since the download was restored from
+ // history.
+ ExpectDownloadsRestoredFromHistory(false);
+
+ // Create a DownloadHistory with no history downloads. No
+ // DownloadManager::CreateDownload() calls are expected.
+ CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+
+ // Notify DownloadHistory that a new download was created. The above test
+ // expecation should verify that WasRestoredFromHistory is correct for this
+ // download.
+ history::DownloadRow info;
+ InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
+ "http://example.com/bar.pdf",
+ "http://example.com/referrer.html",
+ &info);
+ CallOnDownloadCreated(0);
+ ExpectDownloadCreated(info);
+}
+
// Test creating an item, saving it to the database, changing it, saving it
// back, removing it.
TEST_F(DownloadHistoryTest, DownloadHistoryTest_Create) {
// Create a fresh item not from history, OnDownloadCreated, OnDownloadUpdated,
// OnDownloadRemoved.
- ExpectWillQueryDownloads(scoped_ptr<InfoVector>(new InfoVector()));
+ CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
history::DownloadRow info;
InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -516,7 +593,7 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Create) {
// Test that changes to persisted fields in a DownloadItem triggers database
// updates.
TEST_F(DownloadHistoryTest, DownloadHistoryTest_Update) {
- ExpectWillQueryDownloads(scoped_ptr<InfoVector>(new InfoVector()));
+ CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
history::DownloadRow info;
InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -611,7 +688,7 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Update) {
TEST_F(DownloadHistoryTest, DownloadHistoryTest_Temporary) {
// Create a fresh item not from history, OnDownloadCreated, OnDownloadUpdated,
// OnDownloadRemoved.
- ExpectWillQueryDownloads(scoped_ptr<InfoVector>(new InfoVector()));
+ CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
history::DownloadRow info;
InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -654,7 +731,7 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Temporary) {
// Test removing downloads while they're still being added.
TEST_F(DownloadHistoryTest, DownloadHistoryTest_RemoveWhileAdding) {
- ExpectWillQueryDownloads(scoped_ptr<InfoVector>(new InfoVector()));
+ CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
history::DownloadRow info;
InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -707,7 +784,7 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Multiple) {
scoped_ptr<InfoVector> infos(new InfoVector());
infos->push_back(info0);
infos->push_back(info1);
- ExpectWillQueryDownloads(infos.Pass());
+ CreateDownloadHistory(infos.Pass());
ExpectNoDownloadCreated();
}
@@ -727,7 +804,7 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_Multiple) {
TEST_F(DownloadHistoryTest, DownloadHistoryTest_CreateFailed) {
// Create a fresh item not from history, OnDownloadCreated, OnDownloadUpdated,
// OnDownloadRemoved.
- ExpectWillQueryDownloads(scoped_ptr<InfoVector>(new InfoVector()));
+ CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
history::DownloadRow info;
InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -751,7 +828,7 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_CreateFailed) {
TEST_F(DownloadHistoryTest, DownloadHistoryTest_UpdateWhileAdding) {
// Create a fresh item not from history, OnDownloadCreated, OnDownloadUpdated,
// OnDownloadRemoved.
- ExpectWillQueryDownloads(scoped_ptr<InfoVector>(new InfoVector()));
+ CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
history::DownloadRow info;
InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -780,3 +857,5 @@ TEST_F(DownloadHistoryTest, DownloadHistoryTest_UpdateWhileAdding) {
info.opened = true;
ExpectDownloadUpdated(info);
}
+
+} // anonymous namespace
« no previous file with comments | « chrome/browser/download/download_history.cc ('k') | chrome/browser/download/download_item_model.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698