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

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

Issue 10831412: Added some cancel/close tab tests to SavePackage. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporated some comments. Created 8 years, 4 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 | « no previous file | content/browser/download/download_manager_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 92ed9b39dfeeac30cb8f7995808452cd24cff96e..a4096cd00d50955269d32fda08cd9202b68d0fbb 100644
--- a/chrome/browser/download/save_page_browsertest.cc
+++ b/chrome/browser/download/save_page_browsertest.cc
@@ -36,6 +36,7 @@
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/test/test_utils.h"
#include "content/test/net/url_request_mock_http_job.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -65,6 +66,64 @@ static const char* kAppendedExtension =
} // namespace
+// Loosely based on logic in DownloadTestObserver.
+class DownloadItemCreatedObserver : public DownloadManager::Observer {
+ public:
+ explicit DownloadItemCreatedObserver(DownloadManager* manager)
+ : waiting_(false), manager_(manager), created_item_(NULL) {
+ manager->AddObserver(this);
+ }
+
+ ~DownloadItemCreatedObserver() {
+ if (manager_)
+ manager_->RemoveObserver(this);
+ }
+
+ // Wait for the first download item created after object creation.
+ // Note that this class provides no protection against the download
+ // being destroyed between creation and return of WaitForNewDownloadItem();
+ // the caller must guarantee that in some other fashion.
+ DownloadItem* WaitForNewDownloadItem() {
+ if (!manager_) {
+ // The manager went away before we were asked to wait; return
+ // what we have, even if it's null.
+ return created_item_;
+ }
+
+ if (!created_item_) {
+ waiting_ = true;
+ content::RunMessageLoop();
+ waiting_ = false;
+ }
+ return created_item_;
+ }
+
+ private:
+
+ // DownloadManager::Observer
+ void OnDownloadCreated(DownloadManager* manager, DownloadItem* item) {
+ DCHECK_EQ(manager, manager_);
+ if (!created_item_)
+ created_item_ = item;
+
+ if (waiting_)
+ MessageLoopForUI::current()->Quit();
+ }
+
+ void ManagerGoingDownload(DownloadManager* manager) {
+ manager_->RemoveObserver(this);
+ manager_ = NULL;
+ if (waiting_)
+ MessageLoopForUI::current()->Quit();
+ }
+
+ bool waiting_;
+ DownloadManager* manager_;
+ DownloadItem* created_item_;
+
+ DISALLOW_COPY_AND_ASSIGN(DownloadItemCreatedObserver);
+};
+
class SavePageBrowserTest : public InProcessBrowserTest {
public:
SavePageBrowserTest() {}
@@ -232,6 +291,57 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnly) {
full_file_name));
}
+IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnlyCancel) {
+ GURL url = NavigateToMockURL("a");
+ DownloadManager* manager(GetDownloadManager());
+ std::vector<DownloadItem*> downloads;
+ manager->SearchDownloads(string16(), &downloads);
+ ASSERT_EQ(0u, downloads.size());
+
+ FilePath full_file_name, dir;
+ GetDestinationPaths("a", &full_file_name, &dir);
+ DownloadItemCreatedObserver creation_observer(manager);
+ ASSERT_TRUE(GetCurrentTab()->SavePage(full_file_name, dir,
+ content::SAVE_PAGE_TYPE_AS_ONLY_HTML));
+ DownloadItem* item = creation_observer.WaitForNewDownloadItem();
+ item->Cancel(true);
+
+ // TODO(rdsmith): Fix DII::Cancel() to actually cancel the save package.
+ // Currently it's ignored.
+ EXPECT_EQ(url, WaitForSavePackageToFinish());
+
+ EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
+ CheckDownloadHistory(url, full_file_name, 1); // a.htm is 1 file.
+
+ EXPECT_TRUE(file_util::PathExists(full_file_name));
+ EXPECT_FALSE(file_util::PathExists(dir));
+ EXPECT_TRUE(file_util::ContentsEqual(
+ test_dir_.Append(FilePath(kTestDir)).Append(FILE_PATH_LITERAL("a.htm")),
+ full_file_name));
+}
+
+IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnlyTabDestroy) {
+ GURL url = NavigateToMockURL("a");
+ DownloadManager* manager(GetDownloadManager());
+ std::vector<DownloadItem*> downloads;
+ manager->SearchDownloads(string16(), &downloads);
+ ASSERT_EQ(0u, downloads.size());
+
+ FilePath full_file_name, dir;
+ GetDestinationPaths("a", &full_file_name, &dir);
+ DownloadItemCreatedObserver creation_observer(manager);
+ ASSERT_TRUE(GetCurrentTab()->SavePage(full_file_name, dir,
+ content::SAVE_PAGE_TYPE_AS_ONLY_HTML));
+ DownloadItem* item = creation_observer.WaitForNewDownloadItem();
+
+ // Close the tab; does this cancel the download?
+ GetCurrentTab()->Close();
+ EXPECT_TRUE(item->IsCancelled());
+
+ EXPECT_FALSE(file_util::PathExists(full_file_name));
+ EXPECT_FALSE(file_util::PathExists(dir));
+}
+
IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveViewSourceHTMLOnly) {
FilePath file_name(FILE_PATH_LITERAL("a.htm"));
GURL view_source_url = URLRequestMockHTTPJob::GetMockViewSourceUrl(
« no previous file with comments | « no previous file | content/browser/download/download_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698