| 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 166a039ecdbc9a776431f843c5e0bab118418a53..43c87819342105bc19530c3004c9bc05158e362e 100644
|
| --- a/chrome/browser/download/save_page_browsertest.cc
|
| +++ b/chrome/browser/download/save_page_browsertest.cc
|
| @@ -53,6 +53,8 @@ using content::DownloadManager;
|
| using content::URLRequestMockHTTPJob;
|
| using content::WebContents;
|
|
|
| +namespace {
|
| +
|
| // Waits for an item record in the downloads database to match |filter|. See
|
| // DownloadStoredProperly() below for an example filter.
|
| class DownloadPersistedObserver : public DownloadHistory::Observer {
|
| @@ -240,6 +242,37 @@ class DownloadItemCreatedObserver : public DownloadManager::Observer {
|
| DISALLOW_COPY_AND_ASSIGN(DownloadItemCreatedObserver);
|
| };
|
|
|
| +class SavePackageFinishedObserver : public content::DownloadManager::Observer {
|
| + public:
|
| + SavePackageFinishedObserver(content::DownloadManager* manager,
|
| + const base::Closure& callback)
|
| + : download_manager_(manager),
|
| + callback_(callback) {
|
| + download_manager_->AddObserver(this);
|
| + }
|
| +
|
| + virtual ~SavePackageFinishedObserver() {
|
| + if (download_manager_)
|
| + download_manager_->RemoveObserver(this);
|
| + }
|
| +
|
| + // DownloadManager::Observer:
|
| + virtual void OnSavePackageSuccessfullyFinished(
|
| + content::DownloadManager* manager, content::DownloadItem* item) OVERRIDE {
|
| + callback_.Run();
|
| + }
|
| + virtual void ManagerGoingDown(content::DownloadManager* manager) OVERRIDE {
|
| + download_manager_->RemoveObserver(this);
|
| + download_manager_ = NULL;
|
| + }
|
| +
|
| + private:
|
| + content::DownloadManager* download_manager_;
|
| + base::Closure callback_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SavePackageFinishedObserver);
|
| +};
|
| +
|
| class SavePageBrowserTest : public InProcessBrowserTest {
|
| public:
|
| SavePageBrowserTest() {}
|
| @@ -283,14 +316,9 @@ class SavePageBrowserTest : public InProcessBrowserTest {
|
|
|
| // Returns true if and when there was a single download created, and its url
|
| // is |expected_url|.
|
| - bool WaitForSavePackageToFinish(
|
| + bool VerifySavePackageExpectations(
|
| Browser* browser,
|
| const GURL& expected_url) const {
|
| - content::WindowedNotificationObserver observer(
|
| - content::NOTIFICATION_SAVE_PACKAGE_SUCCESSFULLY_FINISHED,
|
| - content::NotificationService::AllSources());
|
| - observer.Wait();
|
| -
|
| // Generally, there should only be one download item created
|
| // in all of these tests. If it's already here, grab it; if not,
|
| // wait for it to show up.
|
| @@ -307,9 +335,7 @@ class SavePageBrowserTest : public InProcessBrowserTest {
|
| return false;
|
| DownloadItem* download_item(items[0]);
|
|
|
| - return ((expected_url == download_item->GetOriginalUrl()) &&
|
| - (expected_url == content::Details<DownloadItem>(
|
| - observer.details()).ptr()->GetOriginalUrl()));
|
| + return (expected_url == download_item->GetOriginalUrl());
|
| }
|
|
|
| // Note on synchronization:
|
| @@ -358,9 +384,15 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, MAYBE_SaveHTMLOnly) {
|
| DownloadPersistedObserver persisted(browser()->profile(), base::Bind(
|
| &DownloadStoredProperly, url, full_file_name, 1,
|
| DownloadItem::COMPLETE));
|
| + scoped_refptr<content::MessageLoopRunner> loop_runner(
|
| + new content::MessageLoopRunner);
|
| + SavePackageFinishedObserver observer(
|
| + content::BrowserContext::GetDownloadManager(browser()->profile()),
|
| + loop_runner->QuitClosure());
|
| ASSERT_TRUE(GetCurrentTab(browser())->SavePage(full_file_name, dir,
|
| content::SAVE_PAGE_TYPE_AS_ONLY_HTML));
|
| - ASSERT_TRUE(WaitForSavePackageToFinish(browser(), url));
|
| + loop_runner->Run();
|
| + ASSERT_TRUE(VerifySavePackageExpectations(browser(), url));
|
| persisted.WaitForPersisted();
|
| EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
|
| EXPECT_TRUE(file_util::PathExists(full_file_name));
|
| @@ -454,9 +486,15 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, MAYBE_SaveViewSourceHTMLOnly) {
|
| DownloadPersistedObserver persisted(browser()->profile(), base::Bind(
|
| &DownloadStoredProperly, actual_page_url, full_file_name, 1,
|
| DownloadItem::COMPLETE));
|
| + scoped_refptr<content::MessageLoopRunner> loop_runner(
|
| + new content::MessageLoopRunner);
|
| + SavePackageFinishedObserver observer(
|
| + content::BrowserContext::GetDownloadManager(browser()->profile()),
|
| + loop_runner->QuitClosure());
|
| ASSERT_TRUE(GetCurrentTab(browser())->SavePage(full_file_name, dir,
|
| content::SAVE_PAGE_TYPE_AS_ONLY_HTML));
|
| - ASSERT_TRUE(WaitForSavePackageToFinish(browser(), actual_page_url));
|
| + loop_runner->Run();
|
| + ASSERT_TRUE(VerifySavePackageExpectations(browser(), actual_page_url));
|
| persisted.WaitForPersisted();
|
|
|
| EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
|
| @@ -482,9 +520,15 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, MAYBE_SaveCompleteHTML) {
|
| DownloadPersistedObserver persisted(browser()->profile(), base::Bind(
|
| &DownloadStoredProperly, url, full_file_name, 3,
|
| DownloadItem::COMPLETE));
|
| + scoped_refptr<content::MessageLoopRunner> loop_runner(
|
| + new content::MessageLoopRunner);
|
| + SavePackageFinishedObserver observer(
|
| + content::BrowserContext::GetDownloadManager(browser()->profile()),
|
| + loop_runner->QuitClosure());
|
| ASSERT_TRUE(GetCurrentTab(browser())->SavePage(
|
| full_file_name, dir, content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML));
|
| - ASSERT_TRUE(WaitForSavePackageToFinish(browser(), url));
|
| + loop_runner->Run();
|
| + ASSERT_TRUE(VerifySavePackageExpectations(browser(), url));
|
| persisted.WaitForPersisted();
|
|
|
| EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
|
| @@ -530,10 +574,16 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest,
|
| // Save the page before completion.
|
| FilePath full_file_name, dir;
|
| GetDestinationPaths("b", &full_file_name, &dir);
|
| + scoped_refptr<content::MessageLoopRunner> loop_runner(
|
| + new content::MessageLoopRunner);
|
| + SavePackageFinishedObserver observer(
|
| + content::BrowserContext::GetDownloadManager(incognito->profile()),
|
| + loop_runner->QuitClosure());
|
| ASSERT_TRUE(GetCurrentTab(incognito)->SavePage(
|
| full_file_name, dir, content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML));
|
|
|
| - ASSERT_TRUE(WaitForSavePackageToFinish(incognito, url));
|
| + loop_runner->Run();
|
| + ASSERT_TRUE(VerifySavePackageExpectations(incognito, url));
|
|
|
| // Confirm download shelf is visible.
|
| EXPECT_TRUE(incognito->window()->IsDownloadShelfVisible());
|
| @@ -566,10 +616,16 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, MAYBE_FileNameFromPageTitle) {
|
| DownloadPersistedObserver persisted(browser()->profile(), base::Bind(
|
| &DownloadStoredProperly, url, full_file_name, 3,
|
| DownloadItem::COMPLETE));
|
| + scoped_refptr<content::MessageLoopRunner> loop_runner(
|
| + new content::MessageLoopRunner);
|
| + SavePackageFinishedObserver observer(
|
| + content::BrowserContext::GetDownloadManager(browser()->profile()),
|
| + loop_runner->QuitClosure());
|
| ASSERT_TRUE(GetCurrentTab(browser())->SavePage(
|
| full_file_name, dir, content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML));
|
|
|
| - ASSERT_TRUE(WaitForSavePackageToFinish(browser(), url));
|
| + loop_runner->Run();
|
| + ASSERT_TRUE(VerifySavePackageExpectations(browser(), url));
|
| persisted.WaitForPersisted();
|
|
|
| EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
|
| @@ -601,10 +657,16 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, MAYBE_RemoveFromList) {
|
| DownloadPersistedObserver persisted(browser()->profile(), base::Bind(
|
| &DownloadStoredProperly, url, full_file_name, 1,
|
| DownloadItem::COMPLETE));
|
| + scoped_refptr<content::MessageLoopRunner> loop_runner(
|
| + new content::MessageLoopRunner);
|
| + SavePackageFinishedObserver observer(
|
| + content::BrowserContext::GetDownloadManager(browser()->profile()),
|
| + loop_runner->QuitClosure());
|
| ASSERT_TRUE(GetCurrentTab(browser())->SavePage(full_file_name, dir,
|
| content::SAVE_PAGE_TYPE_AS_ONLY_HTML));
|
|
|
| - ASSERT_TRUE(WaitForSavePackageToFinish(browser(), url));
|
| + loop_runner->Run();
|
| + ASSERT_TRUE(VerifySavePackageExpectations(browser(), url));
|
| persisted.WaitForPersisted();
|
|
|
| EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
|
| @@ -645,11 +707,13 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, CleanFilenameFromPageTitle) {
|
| ui_test_utils::NavigateToURL(browser(), url);
|
|
|
| SavePackageFilePicker::SetShouldPromptUser(false);
|
| - content::WindowedNotificationObserver observer(
|
| - content::NOTIFICATION_SAVE_PACKAGE_SUCCESSFULLY_FINISHED,
|
| - content::NotificationService::AllSources());
|
| + scoped_refptr<content::MessageLoopRunner> loop_runner(
|
| + new content::MessageLoopRunner);
|
| + SavePackageFinishedObserver observer(
|
| + content::BrowserContext::GetDownloadManager(browser()->profile()),
|
| + loop_runner->QuitClosure());
|
| chrome::SavePage(browser());
|
| - observer.Wait();
|
| + loop_runner->Run();
|
|
|
| EXPECT_TRUE(file_util::PathExists(full_file_name));
|
|
|
| @@ -688,8 +752,14 @@ IN_PROC_BROWSER_TEST_F(SavePageAsMHTMLBrowserTest, SavePageAsMHTML) {
|
| DownloadPersistedObserver persisted(browser()->profile(), base::Bind(
|
| &DownloadStoredProperly, url, full_file_name, -1,
|
| DownloadItem::COMPLETE));
|
| + scoped_refptr<content::MessageLoopRunner> loop_runner(
|
| + new content::MessageLoopRunner);
|
| + SavePackageFinishedObserver observer(
|
| + content::BrowserContext::GetDownloadManager(browser()->profile()),
|
| + loop_runner->QuitClosure());
|
| chrome::SavePage(browser());
|
| - ASSERT_TRUE(WaitForSavePackageToFinish(browser(), url));
|
| + loop_runner->Run();
|
| + ASSERT_TRUE(VerifySavePackageExpectations(browser(), url));
|
| persisted.WaitForPersisted();
|
|
|
| EXPECT_TRUE(file_util::PathExists(full_file_name));
|
| @@ -697,3 +767,6 @@ IN_PROC_BROWSER_TEST_F(SavePageAsMHTMLBrowserTest, SavePageAsMHTML) {
|
| EXPECT_TRUE(file_util::GetFileSize(full_file_name, &actual_file_size));
|
| EXPECT_LE(kFileSizeMin, actual_file_size);
|
| }
|
| +
|
| +} // namespace
|
| +
|
|
|