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

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

Issue 9426029: Test file errors in downloads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refactored per Chris' comments Created 8 years, 10 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
Index: chrome/browser/download/download_browsertest.cc
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index d3e0f19b564e8f9199c44fae8e5114aab17c18bb..a8c9e60a94f87912d5b6612c83d8aa4f24ca3029 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -55,6 +55,7 @@
#include "content/public/browser/web_contents.h"
#include "content/public/common/context_menu_params.h"
#include "content/public/common/page_transition_types.h"
+#include "content/test/test_file_error_injector.h"
#include "content/test/test_navigation_observer.h"
#include "net/base/net_util.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -306,6 +307,11 @@ class DownloadTest : public InProcessBrowserTest {
bool show_download_item; // True if the download item appears on the shelf.
};
+ struct FileErrorInjectInfo {
+ DownloadInfo download_info;
+ content::TestFileErrorInjector::FileErrorInfo error_info;
+ };
+
DownloadTest() {
EnableDOMAutomation();
}
@@ -736,6 +742,26 @@ class DownloadTest : public InProcessBrowserTest {
}
}
+ void DownloadInsertFileErrorCheckErrors(const FileErrorInjectInfo& info) {
+ // Do initial setup.
+ ASSERT_TRUE(InitialSetup(false));
+
+ // Set up file failures.
+ // |injector| will be owned by the DownloadFileManager (indirectly).
cbentzel 2012/02/28 14:51:41 This comment about ownership is no longer true - i
ahendrickson 2012/03/01 09:17:32 Done.
+ scoped_refptr<content::TestFileErrorInjector> injector(
+ content::TestFileErrorInjector::Create());
+ injector->AddError(info.error_info);
+ injector->InjectErrors();
+
+ DownloadFileCheckErrors(info.download_info);
+
+ ui_test_utils::RunAllPendingInMessageLoop();
cbentzel 2012/02/28 14:51:41 Are you guaranteed that all of the work on the fil
ahendrickson 2012/03/01 09:17:32 Added code to run all pending messages on the FILE
+
+ EXPECT_EQ(1u, injector->FileCreationCount());
+ EXPECT_EQ(false, injector->HasFile(0));
cbentzel 2012/02/28 14:51:41 Do you need this HasFile call? Doesn't the Current
ahendrickson 2012/03/01 09:17:32 Hmm, I guess it's not needed. Removed.
+ EXPECT_EQ(0u, injector->CurrentFileCount());
+ }
+
private:
// Location of the test data.
FilePath test_dir_;
@@ -2081,3 +2107,221 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError400Navigate) {
ASSERT_TRUE(InitialSetup(false));
DownloadFileCheckErrors(download_info);
}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileNoSpaceOpenNavigate) {
Randy Smith (Not in Mondays) 2012/02/28 22:06:13 There's a fair amount of overhead in starting up a
ahendrickson 2012/03/01 09:17:32 Done.
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_NAVIGATE,
+ DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
+ 0,
+ net::ERR_FILE_NO_SPACE
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileNoSpaceOpenDirect) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_DIRECT,
+ DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
+ 0,
+ net::ERR_FILE_NO_SPACE
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileNoSpaceWriteNavigate) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_NAVIGATE,
+ DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_WRITE,
+ 0,
+ net::ERR_FILE_NO_SPACE
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileNoSpaceWriteDirect) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_DIRECT,
+ DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_WRITE,
+ 0,
+ net::ERR_FILE_NO_SPACE
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileFailedOpenNavigate) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_NAVIGATE,
+ DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
+ 0,
+ net::ERR_FAILED
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileFailedOpenDirect) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_DIRECT,
+ DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
+ 0,
+ net::ERR_FAILED
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileFailedWriteNavigate) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_NAVIGATE,
+ DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_WRITE,
+ 0,
+ net::ERR_FAILED
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileFailedWriteDirect) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_DIRECT,
+ DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_WRITE,
+ 0,
+ net::ERR_FAILED
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileNameTooLongOpenNavigate) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_NAVIGATE,
+ DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
+ 0,
+ net::ERR_FILE_PATH_TOO_LONG
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorFileNameTooLongOpenDirect) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_DIRECT,
+ DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
+ 0,
+ net::ERR_FILE_PATH_TOO_LONG
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest,
+ DownloadErrorFileInvalidHandleWriteNavigate) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_NAVIGATE,
+ DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_WRITE,
+ 0,
+ net::ERR_INVALID_HANDLE
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
+
+IN_PROC_BROWSER_TEST_F(DownloadTest,
+ DownloadErrorFileInvalidHandleWriteDirect) {
+ FileErrorInjectInfo error_info = {
+ { "a_zip_file.zip",
+ DOWNLOAD_DIRECT,
+ DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
+ 1
+ },
+ {
+ 0,
+ content::TestFileErrorInjector::FILE_OPERATION_WRITE,
+ 0,
+ net::ERR_INVALID_HANDLE
+ }
+ };
+
+ DownloadInsertFileErrorCheckErrors(error_info);
+}
« no previous file with comments | « no previous file | content/browser/download/download_file_manager.h » ('j') | content/browser/download/download_file_manager.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698