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

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

Issue 10915180: Make DownloadHistory observe manager, items (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: @r166680 Created 8 years, 1 month 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
Index: chrome/browser/download/download_browsertest.cc
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index 4241720eae8795a96386064885e051646457a48d..800d192951f73da1011104cc433cbbdc3ebd8800 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -23,11 +23,14 @@
#include "chrome/browser/download/download_history.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/download/download_request_limiter.h"
+#include "chrome/browser/download/download_service.h"
+#include "chrome/browser/download/download_service_factory.h"
#include "chrome/browser/download/download_shelf.h"
#include "chrome/browser/download/download_test_file_chooser_observer.h"
#include "chrome/browser/download/download_util.h"
#include "chrome/browser/extensions/extension_install_prompt.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/history/download_persistent_store_info.h"
#include "chrome/browser/history/history.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/net/url_request_mock_util.h"
@@ -50,7 +53,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/download_save_info.h"
#include "content/public/browser/download_url_parameters.h"
#include "content/public/browser/notification_source.h"
@@ -73,7 +75,6 @@ using content::BrowserContext;
using content::BrowserThread;
using content::DownloadItem;
using content::DownloadManager;
-using content::DownloadPersistentStoreInfo;
using content::DownloadUrlParameters;
using content::URLRequestMockHTTPJob;
using content::URLRequestSlowDownloadJob;
@@ -90,58 +91,6 @@ const FilePath kGoodCrxPath(FILE_PATH_LITERAL("extensions/good.crx"));
const char kLargeThemeCrxId[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf";
const FilePath kLargeThemePath(FILE_PATH_LITERAL("extensions/theme2.crx"));
-// Get History Information.
-class DownloadsHistoryDataCollector {
- public:
- DownloadsHistoryDataCollector(int64 download_db_handle,
- DownloadManager* manager)
- : result_valid_(false),
- download_db_handle_(download_db_handle) {
- HistoryService* hs = HistoryServiceFactory::GetForProfile(
- Profile::FromBrowserContext(manager->GetBrowserContext()),
- Profile::EXPLICIT_ACCESS);
- DCHECK(hs);
- hs->QueryDownloads(
- &callback_consumer_,
- base::Bind(&DownloadsHistoryDataCollector::OnQueryDownloadsComplete,
- base::Unretained(this)));
-
- // TODO(rdsmith): Move message loop out of constructor.
- // Cannot complete immediately because the history backend runs on a
- // separate thread, so we can assume that the RunMessageLoop below will
- // be exited by the Quit in OnQueryDownloadsComplete.
- content::RunMessageLoop();
- }
-
- bool GetDownloadsHistoryEntry(DownloadPersistentStoreInfo* result) {
- DCHECK(result);
- *result = result_;
- return result_valid_;
- }
-
- private:
- void OnQueryDownloadsComplete(
- std::vector<DownloadPersistentStoreInfo>* entries) {
- result_valid_ = false;
- for (std::vector<DownloadPersistentStoreInfo>::const_iterator it =
- entries->begin();
- it != entries->end(); ++it) {
- if (it->db_handle == download_db_handle_) {
- result_ = *it;
- result_valid_ = true;
- }
- }
- MessageLoopForUI::current()->Quit();
- }
-
- DownloadPersistentStoreInfo result_;
- bool result_valid_;
- int64 download_db_handle_;
- CancelableRequestConsumer callback_consumer_;
-
- DISALLOW_COPY_AND_ASSIGN(DownloadsHistoryDataCollector);
-};
-
// Mock that simulates a permissions dialog where the user denies
// permission to install. TODO(skerner): This could be shared with
// extensions tests. Find a common place for this class.
@@ -1406,40 +1355,51 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, NewWindow) {
CheckDownload(browser(), file, file);
}
-// Confirm a download makes it into the history properly.
-IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadHistoryCheck) {
- FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
- GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
- FilePath origin_file(OriginFile(file));
- int64 origin_size;
- file_util::GetFileSize(origin_file, &origin_size);
+class HistoryObserver : public DownloadHistory::Observer {
+ public:
+ explicit HistoryObserver(Profile* profile)
+ : profile_(profile),
+ waiting_(false),
+ seen_stored_(false) {
+ DownloadServiceFactory::GetForProfile(profile_)->
+ GetDownloadHistory()->AddObserver(this);
+ }
- // Download the file and wait. We do not expect the Select File dialog.
- DownloadAndWait(browser(), url);
+ virtual ~HistoryObserver() {
+ DownloadService* service = DownloadServiceFactory::GetForProfile(profile_);
+ if (service && service->GetDownloadManagerDelegate())
Randy Smith (Not in Mondays) 2012/11/09 21:36:39 Why is it relevant whether or not the service has
benjhayden 2012/11/12 18:44:16 Done.
+ service->GetDownloadHistory()->RemoveObserver(this);
+ }
- // Get details of what downloads have just happened.
- std::vector<DownloadItem*> downloads;
- GetDownloads(browser(), &downloads);
- ASSERT_EQ(1u, downloads.size());
- int64 db_handle = downloads[0]->GetDbHandle();
+ virtual void OnDownloadStored(
+ content::DownloadItem* item,
+ const DownloadPersistentStoreInfo& info) OVERRIDE {
+ seen_stored_ = true;
+ if (waiting_)
+ MessageLoopForUI::current()->Quit();
+ }
- // Check state.
- EXPECT_EQ(1, browser()->tab_count());
- CheckDownload(browser(), file, file);
- EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
+ void WaitForStored() {
+ if (seen_stored_)
+ return;
+ waiting_ = true;
+ content::RunMessageLoop();
+ waiting_ = false;
+ }
+
+ private:
+ Profile* profile_;
+ bool waiting_;
+ bool seen_stored_;
+ DISALLOW_COPY_AND_ASSIGN(HistoryObserver);
+};
- // Check history results.
- DownloadsHistoryDataCollector history_collector(
- db_handle,
- DownloadManagerForBrowser(browser()));
- DownloadPersistentStoreInfo info;
- EXPECT_TRUE(history_collector.GetDownloadsHistoryEntry(&info)) << db_handle;
- EXPECT_EQ(file, info.path.BaseName());
- EXPECT_EQ(url, info.url);
- // Ignore start_time.
- EXPECT_EQ(origin_size, info.received_bytes);
- EXPECT_EQ(origin_size, info.total_bytes);
- EXPECT_EQ(DownloadItem::COMPLETE, info.state);
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadHistoryCheck) {
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ GURL download_url(URLRequestMockHTTPJob::GetMockUrl(file));
+ HistoryObserver observer(browser()->profile());
+ DownloadAndWait(browser(), download_url);
+ observer.WaitForStored();
}
// Test for crbug.com/14505. This tests that chrome:// urls are still functional

Powered by Google App Engine
This is Rietveld 408576698