| Index: content/browser/download/base_file_unittest.cc
|
| diff --git a/content/browser/download/base_file_unittest.cc b/content/browser/download/base_file_unittest.cc
|
| index 6d6edc74e1d6efb113358ba0c520ff1c8056ddf8..ce719c8f701d6f11cac9be5c9b30ebed69ee3db0 100644
|
| --- a/content/browser/download/base_file_unittest.cc
|
| +++ b/content/browser/download/base_file_unittest.cc
|
| @@ -44,7 +44,7 @@ class BaseFileTest : public testing::Test {
|
| virtual void SetUp() {
|
| ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| base_file_.reset(
|
| - new BaseFile(FilePath(), GURL(), GURL(), 0, file_stream_));
|
| + new BaseFile(FilePath(), GURL(), GURL(), 0, "", file_stream_));
|
| }
|
|
|
| virtual void TearDown() {
|
| @@ -118,7 +118,7 @@ class BaseFileTest : public testing::Test {
|
| static FilePath CreateTestFile() {
|
| FilePath file_name;
|
| linked_ptr<net::FileStream> dummy_file_stream;
|
| - BaseFile file(FilePath(), GURL(), GURL(), 0, dummy_file_stream);
|
| + BaseFile file(FilePath(), GURL(), GURL(), 0, "", dummy_file_stream);
|
|
|
| EXPECT_EQ(net::OK, file.Initialize(false));
|
| file_name = file.full_path();
|
| @@ -136,7 +136,8 @@ class BaseFileTest : public testing::Test {
|
| static void CreateFileWithName(const FilePath& file_name) {
|
| EXPECT_NE(FilePath::StringType(), file_name.value());
|
| linked_ptr<net::FileStream> dummy_file_stream;
|
| - BaseFile duplicate_file(file_name, GURL(), GURL(), 0, dummy_file_stream);
|
| + BaseFile duplicate_file(
|
| + file_name, GURL(), GURL(), 0, "", dummy_file_stream);
|
| EXPECT_EQ(net::OK, duplicate_file.Initialize(false));
|
| // Write something into it.
|
| duplicate_file.AppendDataToFile(kTestData4, kTestDataLength4);
|
| @@ -252,7 +253,10 @@ TEST_F(BaseFileTest, MultipleWrites) {
|
| // Write data to the file once and calculate its sha256 hash.
|
| TEST_F(BaseFileTest, SingleWriteWithHash) {
|
| ASSERT_EQ(net::OK, base_file_->Initialize(true));
|
| + // Can get partial hash states before Finish() is called.
|
| + EXPECT_STRNE(std::string().c_str(), base_file_->GetSha256HashState().c_str());
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
|
| + EXPECT_STRNE(std::string().c_str(), base_file_->GetSha256HashState().c_str());
|
| base_file_->Finish();
|
|
|
| std::string hash;
|
| @@ -269,7 +273,7 @@ TEST_F(BaseFileTest, MultipleWritesWithHash) {
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData3));
|
| - // no hash before Finish() is called either.
|
| + // No hash before Finish() is called.
|
| EXPECT_FALSE(base_file_->GetSha256Hash(&hash));
|
| base_file_->Finish();
|
|
|
| @@ -278,6 +282,40 @@ TEST_F(BaseFileTest, MultipleWritesWithHash) {
|
| base::HexEncode(hash.data(), hash.size()));
|
| }
|
|
|
| +// Write data to the file multiple times, interrupt it, and continue using
|
| +// another file. Calculate the resulting combined sha256 hash.
|
| +TEST_F(BaseFileTest, MultipleWritesInterruptedWithHash) {
|
| + ASSERT_EQ(net::OK, base_file_->Initialize(true));
|
| + // Write some data
|
| + ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
|
| + ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
|
| + // Get the hash state and file name.
|
| + std::string hash_state;
|
| + hash_state = base_file_->GetSha256HashState();
|
| + // Finish the file.
|
| + base_file_->Finish();
|
| +
|
| + // Create another file
|
| + linked_ptr<net::FileStream> second_stream;
|
| + BaseFile second_file(FilePath(),
|
| + GURL(),
|
| + GURL(),
|
| + base_file_->bytes_so_far(),
|
| + hash_state,
|
| + second_stream);
|
| + ASSERT_EQ(net::OK, second_file.Initialize(true));
|
| + std::string data(kTestData3);
|
| + EXPECT_EQ(net::OK, second_file.AppendDataToFile(data.data(), data.size()));
|
| + second_file.Finish();
|
| +
|
| + std::string hash;
|
| + EXPECT_TRUE(second_file.GetSha256Hash(&hash));
|
| + // This will fail until getting the hash state is supported in SecureHash.
|
| + EXPECT_STREQ(
|
| + "CBF68BF10F8003DB86B31343AFAC8C7175BD03FB5FC905650F8C80AF087443A8",
|
| + base::HexEncode(hash.data(), hash.size()).c_str());
|
| +}
|
| +
|
| // Rename the file after all writes to it.
|
| TEST_F(BaseFileTest, WriteThenRename) {
|
| ASSERT_EQ(net::OK, base_file_->Initialize(false));
|
| @@ -321,7 +359,11 @@ TEST_F(BaseFileTest, RenameWhileInProgress) {
|
| TEST_F(BaseFileTest, MultipleWritesWithError) {
|
| ASSERT_TRUE(OpenMockFileStream());
|
| base_file_.reset(new BaseFile(mock_file_stream_->get_path(),
|
| - GURL(), GURL(), 0, mock_file_stream_));
|
| + GURL(),
|
| + GURL(),
|
| + 0,
|
| + "",
|
| + mock_file_stream_));
|
| EXPECT_EQ(net::OK, base_file_->Initialize(false));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
|
| @@ -359,9 +401,12 @@ TEST_F(BaseFileTest, AppendToBaseFile) {
|
| set_expected_data(kTestData4);
|
|
|
| // Use the file we've just created.
|
| - base_file_.reset(
|
| - new BaseFile(existing_file_name, GURL(), GURL(), kTestDataLength4,
|
| - file_stream_));
|
| + base_file_.reset(new BaseFile(existing_file_name,
|
| + GURL(),
|
| + GURL(),
|
| + kTestDataLength4,
|
| + "",
|
| + file_stream_));
|
|
|
| EXPECT_EQ(net::OK, base_file_->Initialize(false));
|
|
|
| @@ -385,8 +430,12 @@ TEST_F(BaseFileTest, ReadonlyBaseFile) {
|
| EXPECT_TRUE(file_util::MakeFileUnwritable(readonly_file_name));
|
|
|
| // Try to overwrite it.
|
| - base_file_.reset(
|
| - new BaseFile(readonly_file_name, GURL(), GURL(), 0, file_stream_));
|
| + base_file_.reset(new BaseFile(readonly_file_name,
|
| + GURL(),
|
| + GURL(),
|
| + 0,
|
| + "",
|
| + file_stream_));
|
|
|
| expect_in_progress_ = false;
|
|
|
|
|