Index: chrome/browser/download/save_page_browsertest.cc |
diff --git a/chrome/browser/download/save_page_browsertest.cc b/chrome/browser/download/save_page_browsertest.cc |
index bbf65f77c2940b27a49c788b5638a4ae0699ffc0..c2d359a9da792b07b198045162f47b7d8cbb421c 100644 |
--- a/chrome/browser/download/save_page_browsertest.cc |
+++ b/chrome/browser/download/save_page_browsertest.cc |
@@ -17,6 +17,8 @@ |
#include "chrome/browser/download/download_prefs.h" |
#include "chrome/browser/download/download_service.h" |
#include "chrome/browser/download/download_service_factory.h" |
+#include "chrome/browser/history/download_persistent_store_info.h" |
+#include "chrome/browser/history/history_service_factory.h" |
#include "chrome/browser/net/url_request_mock_util.h" |
#include "chrome/browser/prefs/pref_service.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -32,7 +34,6 @@ |
#include "chrome/test/base/ui_test_utils.h" |
#include "content/public/browser/download_item.h" |
#include "content/public/browser/download_manager.h" |
-#include "content/public/browser/download_persistent_store_info.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/notification_types.h" |
#include "content/public/browser/web_contents.h" |
@@ -50,11 +51,49 @@ using content::BrowserContext; |
using content::BrowserThread; |
using content::DownloadItem; |
using content::DownloadManager; |
-using content::DownloadPersistentStoreInfo; |
using content::WebContents; |
namespace { |
+class DownloadPersistedObserver : public DownloadItem::Observer { |
+ public: |
+ DownloadPersistedObserver(DownloadItem* item) |
+ : item_(item) { |
+ item->AddObserver(this); |
+ } |
+ |
+ ~DownloadPersistedObserver() { |
+ if (item_) |
+ item_->RemoveObserver(this); |
+ } |
+ |
+ void WaitForPersisted() { |
+ if (persisted_) |
+ return; |
+ waiting_ = true; |
+ content::RunMessageLoop(); |
+ waiting_ = false; |
+ } |
+ |
+ virtual void OnDownloadDestroyed(DownloadItem* item) { |
+ item_->RemoveObserver(this); |
+ item_ = NULL; |
+ } |
+ |
+ virtual void OnDownloadUpdated(DownloadItem* item) { |
+ CHECK_EQ(item_, item); |
+ persisted_ = true; |
+ if (waiting_) |
+ MessageLoopForUI::current()->Quit(); |
+ } |
+ |
+ private: |
+ DownloadItem* item_; |
+ bool waiting_; |
+ bool persisted_; |
+ DISALLOW_COPY_AND_ASSIGN(DownloadPersistedObserver); |
+}; |
+ |
static const FilePath::CharType* kTestDir = FILE_PATH_LITERAL("save_page"); |
static const char* kAppendedExtension = |
@@ -99,7 +138,6 @@ class DownloadItemCreatedObserver : public DownloadManager::Observer { |
} |
private: |
- |
// DownloadManager::Observer |
void OnDownloadCreated(DownloadManager* manager, DownloadItem* item) { |
DCHECK_EQ(manager, manager_); |
@@ -184,12 +222,12 @@ class SavePageBrowserTest : public InProcessBrowserTest { |
void QueryDownloadHistory() { |
// Query the history system. |
- ChromeDownloadManagerDelegate* delegate = |
- static_cast<ChromeDownloadManagerDelegate*>( |
- GetDownloadManager()->GetDelegate()); |
- delegate->download_history()->Load( |
- base::Bind(&SavePageBrowserTest::OnQueryDownloadEntriesComplete, |
- base::Unretained(this))); |
+ HistoryService* hs = HistoryServiceFactory::GetForProfile( |
+ browser()->profile(), Profile::EXPLICIT_ACCESS); |
+ hs->QueryDownloads(base::Bind( |
+ &SavePageBrowserTest::OnQueryDownloadEntriesComplete, |
+ base::Unretained(this), |
+ MessageLoopForUI::current()->QuitClosure())); |
// Run message loop until a quit message is sent from |
// OnQueryDownloadEntriesComplete(). |
@@ -197,66 +235,42 @@ class SavePageBrowserTest : public InProcessBrowserTest { |
} |
void OnQueryDownloadEntriesComplete( |
- std::vector<DownloadPersistentStoreInfo>* entries) { |
- history_entries_ = *entries; |
- |
- // Indicate thet we have received the history and can continue. |
- MessageLoopForUI::current()->Quit(); |
+ const base::Closure& done_on_ui, |
+ scoped_ptr<std::vector<DownloadPersistentStoreInfo> > entries) { |
+ history_entries_ = entries.Pass(); |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done_on_ui); |
} |
- struct DownloadPersistentStoreInfoMatch |
- : public std::unary_function<DownloadPersistentStoreInfo, bool> { |
- |
- DownloadPersistentStoreInfoMatch(const GURL& url, |
- const FilePath& path, |
- int64 num_files) |
- : url_(url), |
- path_(path), |
- num_files_(num_files) { |
- } |
- |
- bool operator() (const DownloadPersistentStoreInfo& info) const { |
- return info.url == url_ && |
- info.path == path_ && |
- // For non-MHTML save packages, received_bytes is actually the |
- // number of files. |
- ((num_files_ < 0) || |
- (info.received_bytes == num_files_)) && |
- info.total_bytes == 0 && |
- info.state == DownloadItem::COMPLETE; |
- } |
- |
- GURL url_; |
- FilePath path_; |
- int64 num_files_; |
- }; |
- |
void CheckDownloadHistory(const GURL& url, |
const FilePath& path, |
- int64 num_files) { |
+ int64 num_files, |
+ bool expect_found) { |
QueryDownloadHistory(); |
- |
- std::vector<DownloadPersistentStoreInfo>::iterator found = |
- std::find_if(history_entries_.begin(), history_entries_.end(), |
- DownloadPersistentStoreInfoMatch(url, path, num_files)); |
- |
- if (found == history_entries_.end()) { |
- LOG(ERROR) << "Missing url=" << url.spec() |
- << " path=" << path.value() |
- << " received=" << num_files; |
- for (size_t index = 0; index < history_entries_.size(); ++index) { |
- LOG(ERROR) << "History@" << index << ": url=" |
- << history_entries_[index].url.spec() |
- << " path=" << history_entries_[index].path.value() |
- << " received=" << history_entries_[index].received_bytes |
- << " total=" << history_entries_[index].total_bytes |
- << " state=" << history_entries_[index].state; |
+ bool found = false; |
+ for (std::vector<DownloadPersistentStoreInfo>::iterator it = |
+ history_entries_->begin(); |
+ it != history_entries_->end(); ++it) { |
+ if (it->url != url) { |
+ LOG(WARNING) << it->url.spec() << " != " << url.spec(); |
+ } else if (it->path != path) { |
+ LOG(WARNING) << it->path.value() << " != " << path.value(); |
+ } else if ((num_files >= 0) && |
+ (it->received_bytes != num_files)) { |
+ LOG(WARNING) << it->received_bytes << " != " << num_files; |
+ } else if ((num_files >= 0) && |
+ (it->total_bytes != num_files)) { |
+ LOG(WARNING) << it->total_bytes << " != " << num_files; |
+ } else if (it->state != DownloadItem::COMPLETE) { |
+ LOG(WARNING) << it->state << " != " << DownloadItem::COMPLETE; |
+ } else { |
+ found = true; |
+ break; |
} |
- EXPECT_TRUE(false); |
} |
+ EXPECT_EQ(found, expect_found); |
} |
- std::vector<DownloadPersistentStoreInfo> history_entries_; |
+ scoped_ptr<std::vector<DownloadPersistentStoreInfo> > history_entries_; |
// Path to directory containing test data. |
FilePath test_dir_; |
@@ -282,7 +296,7 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnly) { |
EXPECT_EQ(url, WaitForSavePackageToFinish()); |
EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); |
- CheckDownloadHistory(url, full_file_name, 1); // a.htm is 1 file. |
+ CheckDownloadHistory(url, full_file_name, 1, true); // a.htm is 1 file. |
EXPECT_TRUE(file_util::PathExists(full_file_name)); |
EXPECT_FALSE(file_util::PathExists(dir)); |
@@ -311,7 +325,7 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnlyCancel) { |
EXPECT_EQ(url, WaitForSavePackageToFinish()); |
EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); |
- CheckDownloadHistory(url, full_file_name, 1); // a.htm is 1 file. |
+ CheckDownloadHistory(url, full_file_name, 1, true); // a.htm is 1 file. |
EXPECT_TRUE(file_util::PathExists(full_file_name)); |
EXPECT_FALSE(file_util::PathExists(dir)); |
@@ -360,7 +374,7 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveViewSourceHTMLOnly) { |
EXPECT_EQ(actual_page_url, WaitForSavePackageToFinish()); |
EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); |
- CheckDownloadHistory(actual_page_url, full_file_name, 1); // a.htm is 1 file. |
+ CheckDownloadHistory(actual_page_url, full_file_name, 1, true); |
EXPECT_TRUE(file_util::PathExists(full_file_name)); |
EXPECT_FALSE(file_util::PathExists(dir)); |
@@ -380,7 +394,7 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveCompleteHTML) { |
EXPECT_EQ(url, WaitForSavePackageToFinish()); |
EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); |
- CheckDownloadHistory(url, full_file_name, 3); // b.htm is 3 files. |
+ CheckDownloadHistory(url, full_file_name, 3, true); // b.htm is 3 files. |
EXPECT_TRUE(file_util::PathExists(full_file_name)); |
EXPECT_TRUE(file_util::PathExists(dir)); |
@@ -413,7 +427,7 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, FileNameFromPageTitle) { |
EXPECT_EQ(url, WaitForSavePackageToFinish()); |
EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); |
- CheckDownloadHistory(url, full_file_name, 3); // b.htm is 3 files. |
+ CheckDownloadHistory(url, full_file_name, 3, true); // b.htm is 3 files. |
EXPECT_TRUE(file_util::PathExists(full_file_name)); |
EXPECT_TRUE(file_util::PathExists(dir)); |
@@ -439,15 +453,13 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, RemoveFromList) { |
EXPECT_EQ(url, WaitForSavePackageToFinish()); |
EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); |
- CheckDownloadHistory(url, full_file_name, 1); // a.htm is 1 file. |
+ CheckDownloadHistory(url, full_file_name, 1, true); // a.htm is 1 file. |
EXPECT_EQ(GetDownloadManager()->RemoveAllDownloads(), 1); |
// Should not be in history. |
QueryDownloadHistory(); |
- EXPECT_EQ(std::find_if(history_entries_.begin(), history_entries_.end(), |
- DownloadPersistentStoreInfoMatch(url, full_file_name, 1)), |
- history_entries_.end()); |
+ CheckDownloadHistory(url, full_file_name, 1, false); |
EXPECT_TRUE(file_util::PathExists(full_file_name)); |
EXPECT_FALSE(file_util::PathExists(dir)); |
@@ -520,7 +532,7 @@ IN_PROC_BROWSER_TEST_F(SavePageAsMHTMLBrowserTest, SavePageAsMHTML) { |
content::NotificationService::AllSources()); |
chrome::SavePage(browser()); |
observer.Wait(); |
- CheckDownloadHistory(url, full_file_name, -1); |
+ CheckDownloadHistory(url, full_file_name, -1, true); |
EXPECT_TRUE(file_util::PathExists(full_file_name)); |
int64 actual_file_size = -1; |