| Index: content/browser/download/download_file_manager_unittest.cc | 
| diff --git a/content/browser/download/download_file_manager_unittest.cc b/content/browser/download/download_file_manager_unittest.cc | 
| deleted file mode 100644 | 
| index 52ce433e5a85557846cdf965fca167a123c8ed8e..0000000000000000000000000000000000000000 | 
| --- a/content/browser/download/download_file_manager_unittest.cc | 
| +++ /dev/null | 
| @@ -1,413 +0,0 @@ | 
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| -// Use of this source code is governed by a BSD-style license that can be | 
| -// found in the LICENSE file. | 
| - | 
| -#include "content/browser/download/download_file_manager.h" | 
| - | 
| -#include "base/file_path.h" | 
| -#include "base/file_util.h" | 
| -#include "base/message_loop.h" | 
| -#include "base/scoped_temp_dir.h" | 
| -#include "base/string_number_conversions.h" | 
| -#include "content/browser/browser_thread_impl.h" | 
| -#include "content/browser/download/byte_stream.h" | 
| -#include "content/browser/download/download_create_info.h" | 
| -#include "content/browser/download/download_interrupt_reasons_impl.h" | 
| -#include "content/browser/download/download_request_handle.h" | 
| -#include "content/browser/download/mock_download_file.h" | 
| -#include "content/public/browser/download_id.h" | 
| -#include "content/public/test/mock_download_manager.h" | 
| -#include "net/base/io_buffer.h" | 
| -#include "net/base/net_errors.h" | 
| -#include "testing/gmock/include/gmock/gmock.h" | 
| -#include "testing/gtest/include/gtest/gtest.h" | 
| - | 
| -using content::BrowserThread; | 
| -using content::BrowserThreadImpl; | 
| -using content::DownloadId; | 
| -using content::MockDownloadManager; | 
| - | 
| -using ::testing::_; | 
| -using ::testing::AtLeast; | 
| -using ::testing::Mock; | 
| -using ::testing::Return; | 
| -using ::testing::SaveArg; | 
| -using ::testing::StrictMock; | 
| -using ::testing::StrEq; | 
| - | 
| -namespace { | 
| - | 
| -// MockDownloadManager with the addition of a mock callback used for testing. | 
| -class TestDownloadManager : public MockDownloadManager { | 
| - public: | 
| -  MOCK_METHOD3(OnDownloadRenamed, | 
| -               void(int download_id, | 
| -                    content::DownloadInterruptReason reason, | 
| -                    const FilePath& full_path)); | 
| - private: | 
| -  ~TestDownloadManager() {} | 
| -}; | 
| - | 
| -class MockDownloadFileFactory : | 
| -    public DownloadFileManager::DownloadFileFactory { | 
| - | 
| - public: | 
| -  MockDownloadFileFactory() {} | 
| -  virtual ~MockDownloadFileFactory() {} | 
| - | 
| -  virtual content::DownloadFile* CreateFile( | 
| -      DownloadCreateInfo* info, | 
| -      scoped_ptr<content::ByteStreamReader> stream, | 
| -      content::DownloadManager* download_manager, | 
| -      bool calculate_hash, | 
| -      const net::BoundNetLog& bound_net_log) OVERRIDE; | 
| - | 
| -  MockDownloadFile* GetExistingFile(const DownloadId& id); | 
| - | 
| - private: | 
| -  std::map<DownloadId, MockDownloadFile*> files_; | 
| -}; | 
| - | 
| -content::DownloadFile* MockDownloadFileFactory::CreateFile( | 
| -    DownloadCreateInfo* info, | 
| -    scoped_ptr<content::ByteStreamReader> stream, | 
| -    content::DownloadManager* download_manager, | 
| -    bool calculate_hash, | 
| -    const net::BoundNetLog& bound_net_log) { | 
| -  DCHECK(files_.end() == files_.find(info->download_id)); | 
| -  MockDownloadFile* created_file = new StrictMock<MockDownloadFile>(); | 
| -  files_[info->download_id] = created_file; | 
| - | 
| -  ON_CALL(*created_file, GetDownloadManager()) | 
| -      .WillByDefault(Return(download_manager)); | 
| -  EXPECT_CALL(*created_file, Initialize()); | 
| - | 
| -  return created_file; | 
| -} | 
| - | 
| -MockDownloadFile* MockDownloadFileFactory::GetExistingFile( | 
| -    const DownloadId& id) { | 
| -  DCHECK(files_.find(id) != files_.end()); | 
| -  return files_[id]; | 
| -} | 
| - | 
| -class MockDownloadRequestHandle : public DownloadRequestHandle { | 
| - public: | 
| -  MockDownloadRequestHandle(content::DownloadManager* manager) | 
| -      : manager_(manager) {} | 
| - | 
| -  virtual content::DownloadManager* GetDownloadManager() const OVERRIDE; | 
| - | 
| - private: | 
| - | 
| -  content::DownloadManager* manager_; | 
| -}; | 
| - | 
| -content::DownloadManager* MockDownloadRequestHandle::GetDownloadManager() | 
| -    const { | 
| -  return manager_; | 
| -} | 
| - | 
| -void NullCallback() { } | 
| - | 
| -}  // namespace | 
| - | 
| -class DownloadFileManagerTest : public testing::Test { | 
| - public: | 
| -  // State of renamed file. Used with RenameFile(). | 
| -  enum RenameFileState { | 
| -    IN_PROGRESS, | 
| -    COMPLETE | 
| -  }; | 
| - | 
| -  // Whether to overwrite the target filename in RenameFile(). | 
| -  enum RenameFileOverwrite { | 
| -    OVERWRITE, | 
| -    DONT_OVERWRITE | 
| -  }; | 
| - | 
| -  static const char* kTestData1; | 
| -  static const char* kTestData2; | 
| -  static const char* kTestData3; | 
| -  static const char* kTestData4; | 
| -  static const char* kTestData5; | 
| -  static const char* kTestData6; | 
| -  static const int32 kDummyDownloadId; | 
| -  static const int32 kDummyDownloadId2; | 
| -  static const int kDummyChildId; | 
| -  static const int kDummyRequestId; | 
| - | 
| -  // We need a UI |BrowserThread| in order to destruct |download_manager_|, | 
| -  // which has trait |BrowserThread::DeleteOnUIThread|.  Without this, | 
| -  // calling Release() on |download_manager_| won't ever result in its | 
| -  // destructor being called and we get a leak. | 
| -  DownloadFileManagerTest() | 
| -      : last_reason_(content::DOWNLOAD_INTERRUPT_REASON_NONE), | 
| -        ui_thread_(BrowserThread::UI, &loop_), | 
| -        file_thread_(BrowserThread::FILE, &loop_) { | 
| -  } | 
| - | 
| -  ~DownloadFileManagerTest() { | 
| -  } | 
| - | 
| -  virtual void SetUp() { | 
| -    download_manager_ = new TestDownloadManager(); | 
| -    request_handle_.reset(new MockDownloadRequestHandle(download_manager_)); | 
| -    download_file_factory_ = new MockDownloadFileFactory; | 
| -    download_file_manager_ = new DownloadFileManager(download_file_factory_); | 
| -  } | 
| - | 
| -  virtual void TearDown() { | 
| -    // When a DownloadManager's reference count drops to 0, it is not | 
| -    // deleted immediately. Instead, a task is posted to the UI thread's | 
| -    // message loop to delete it. | 
| -    // So, drop the reference count to 0 and run the message loop once | 
| -    // to ensure that all resources are cleaned up before the test exits. | 
| -    download_manager_ = NULL; | 
| -    ui_thread_.message_loop()->RunAllPending(); | 
| -  } | 
| - | 
| -  void ProcessAllPendingMessages() { | 
| -    loop_.RunAllPending(); | 
| -  } | 
| - | 
| -  // Clears all gmock expectations for the download file |id| and the manager. | 
| -  void ClearExpectations(DownloadId id) { | 
| -    MockDownloadFile* file = download_file_factory_->GetExistingFile(id); | 
| -    Mock::VerifyAndClearExpectations(file); | 
| -    Mock::VerifyAndClearExpectations(download_manager_); | 
| -  } | 
| - | 
| -  void OnDownloadFileCreated(content::DownloadInterruptReason reason) { | 
| -    last_reason_ = reason; | 
| -  } | 
| - | 
| -  // Create a download item on the DFM. | 
| -  // |info| is the information needed to create a new download file. | 
| -  // |id| is the download ID of the new download file. | 
| -  void CreateDownloadFile(scoped_ptr<DownloadCreateInfo> info) { | 
| -    // Mostly null out args; they'll be passed to MockDownloadFileFactory | 
| -    // to be ignored anyway. | 
| -    download_file_manager_->CreateDownloadFile( | 
| -        info.Pass(), scoped_ptr<content::ByteStreamReader>(), | 
| -        download_manager_, true, net::BoundNetLog(), | 
| -        base::Bind(&DownloadFileManagerTest::OnDownloadFileCreated, | 
| -                   // The test jig will outlive all download files. | 
| -                   base::Unretained(this))); | 
| - | 
| -    // Anything that isn't DOWNLOAD_INTERRUPT_REASON_NONE. | 
| -    last_reason_ = content::DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED; | 
| -    ProcessAllPendingMessages(); | 
| -    EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, last_reason_); | 
| -  } | 
| - | 
| -  // Renames the download file. | 
| -  // |id|           is the download ID of the download file. | 
| -  // |new_path|     is the new file path. | 
| -  // |unique_path|  is the actual path that the download file will be | 
| -  //                renamed to. If there is an existing file at | 
| -  //                |new_path| and |replace| is false, then |new_path| | 
| -  //                will be uniquified. | 
| -  // |rename_error| is the error to inject.  For no error, | 
| -  //                use content::DOWNLOAD_INTERRUPT_REASON_NONE. | 
| -  // |state|        whether we are renaming an in-progress download or a | 
| -  //                completed download. | 
| -  // |should_overwrite| indicates whether to replace or uniquify the file. | 
| -  void RenameFile(const DownloadId& id, | 
| -                  const FilePath& new_path, | 
| -                  bool should_overwrite) { | 
| -    MockDownloadFile* file = download_file_factory_->GetExistingFile(id); | 
| -    ASSERT_TRUE(file != NULL); | 
| -    content::DownloadFile::RenameCompletionCallback rename_callback; | 
| - | 
| -    EXPECT_CALL(*file, Rename(new_path, should_overwrite, _)) | 
| -        .WillOnce(SaveArg<2>(&rename_callback)); | 
| - | 
| -    content::DownloadFile::RenameCompletionCallback passed_callback( | 
| -        base::Bind(&TestDownloadManager::OnDownloadRenamed, | 
| -                   download_manager_, id.local())); | 
| - | 
| -    download_file_manager_->RenameDownloadFile( | 
| -        id, new_path, should_overwrite, passed_callback); | 
| - | 
| -    EXPECT_TRUE(rename_callback.Equals(passed_callback)); | 
| -  } | 
| - | 
| -  void Complete(DownloadId id) { | 
| -    MockDownloadFile* file = download_file_factory_->GetExistingFile(id); | 
| -    ASSERT_TRUE(file != NULL); | 
| - | 
| -    EXPECT_CALL(*file, AnnotateWithSourceInformation()) | 
| -        .WillOnce(Return()); | 
| -    EXPECT_CALL(*file, Detach()) | 
| -        .WillOnce(Return()); | 
| -    int num_downloads = download_file_manager_->NumberOfActiveDownloads(); | 
| -    EXPECT_LT(0, num_downloads); | 
| -    download_file_manager_->CompleteDownload(id, base::Bind(NullCallback)); | 
| -    EXPECT_EQ(num_downloads - 1, | 
| -              download_file_manager_->NumberOfActiveDownloads()); | 
| -    EXPECT_EQ(NULL, download_file_manager_->GetDownloadFile(id)); | 
| -  } | 
| - | 
| -  void CleanUp(DownloadId id) { | 
| -    // Expected calls: | 
| -    //  DownloadFileManager::CancelDownload | 
| -    //    DownloadFile::Cancel | 
| -    //    DownloadFileManager::EraseDownload | 
| -    //      if no more downloads: | 
| -    //        DownloadFileManager::StopUpdateTimer | 
| -    MockDownloadFile* file = download_file_factory_->GetExistingFile(id); | 
| -    ASSERT_TRUE(file != NULL); | 
| - | 
| -    EXPECT_CALL(*file, Cancel()); | 
| - | 
| -    download_file_manager_->CancelDownload(id); | 
| - | 
| -    EXPECT_EQ(NULL, download_file_manager_->GetDownloadFile(id)); | 
| -  } | 
| - | 
| - protected: | 
| -  scoped_refptr<TestDownloadManager> download_manager_; | 
| -  scoped_ptr<MockDownloadRequestHandle> request_handle_; | 
| -  MockDownloadFileFactory* download_file_factory_; | 
| -  scoped_refptr<DownloadFileManager> download_file_manager_; | 
| - | 
| -  // Error from creating download file. | 
| -  content::DownloadInterruptReason last_reason_; | 
| - | 
| -  // Per-download statistics. | 
| -  std::map<DownloadId, int64> byte_count_; | 
| -  std::map<DownloadId, int> error_count_; | 
| - | 
| - private: | 
| -  MessageLoop loop_; | 
| - | 
| -  // UI thread. | 
| -  BrowserThreadImpl ui_thread_; | 
| - | 
| -  // File thread to satisfy debug checks in DownloadFile. | 
| -  BrowserThreadImpl file_thread_; | 
| -}; | 
| - | 
| -const char* DownloadFileManagerTest::kTestData1 = | 
| -    "Let's write some data to the file!\n"; | 
| -const char* DownloadFileManagerTest::kTestData2 = "Writing more data.\n"; | 
| -const char* DownloadFileManagerTest::kTestData3 = "Final line."; | 
| -const char* DownloadFileManagerTest::kTestData4 = "Writing, writing, writing\n"; | 
| -const char* DownloadFileManagerTest::kTestData5 = "All we do is writing,\n"; | 
| -const char* DownloadFileManagerTest::kTestData6 = "Rawhide!"; | 
| - | 
| -const int32 DownloadFileManagerTest::kDummyDownloadId = 23; | 
| -const int32 DownloadFileManagerTest::kDummyDownloadId2 = 77; | 
| -const int DownloadFileManagerTest::kDummyChildId = 3; | 
| -const int DownloadFileManagerTest::kDummyRequestId = 67; | 
| - | 
| -TEST_F(DownloadFileManagerTest, Cancel) { | 
| -  scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); | 
| -  DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); | 
| -  info->download_id = dummy_id; | 
| - | 
| -  CreateDownloadFile(info.Pass()); | 
| - | 
| -  CleanUp(dummy_id); | 
| -} | 
| - | 
| -TEST_F(DownloadFileManagerTest, Complete) { | 
| -  scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); | 
| -  DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); | 
| -  info->download_id = dummy_id; | 
| - | 
| -  CreateDownloadFile(info.Pass()); | 
| - | 
| -  Complete(dummy_id); | 
| -} | 
| - | 
| -TEST_F(DownloadFileManagerTest, Rename) { | 
| -  scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); | 
| -  DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); | 
| -  info->download_id = dummy_id; | 
| -  ScopedTempDir download_dir; | 
| -  ASSERT_TRUE(download_dir.CreateUniqueTempDir()); | 
| - | 
| -  CreateDownloadFile(info.Pass()); | 
| - | 
| -  FilePath foo(download_dir.path().Append(FILE_PATH_LITERAL("foo.txt"))); | 
| -  RenameFile(dummy_id, foo, true); | 
| - | 
| -  CleanUp(dummy_id); | 
| -} | 
| - | 
| -TEST_F(DownloadFileManagerTest, RenameNoOverwrite) { | 
| -  scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); | 
| -  DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); | 
| -  info->download_id = dummy_id; | 
| -  ScopedTempDir download_dir; | 
| -  ASSERT_TRUE(download_dir.CreateUniqueTempDir()); | 
| - | 
| -  CreateDownloadFile(info.Pass()); | 
| - | 
| -  FilePath foo(download_dir.path().Append(FILE_PATH_LITERAL("foo.txt"))); | 
| -  RenameFile(dummy_id, foo, false); | 
| - | 
| -  CleanUp(dummy_id); | 
| -} | 
| - | 
| -TEST_F(DownloadFileManagerTest, RenameTwice) { | 
| -  scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); | 
| -  DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); | 
| -  info->download_id = dummy_id; | 
| -  ScopedTempDir download_dir; | 
| -  ASSERT_TRUE(download_dir.CreateUniqueTempDir()); | 
| - | 
| -  CreateDownloadFile(info.Pass()); | 
| - | 
| -  FilePath crfoo(download_dir.path().Append( | 
| -      FILE_PATH_LITERAL("foo.txt.crdownload"))); | 
| -  RenameFile(dummy_id, crfoo, true); | 
| - | 
| -  FilePath foo(download_dir.path().Append(FILE_PATH_LITERAL("foo.txt"))); | 
| -  RenameFile(dummy_id, foo, true); | 
| - | 
| -  CleanUp(dummy_id); | 
| -} | 
| - | 
| -TEST_F(DownloadFileManagerTest, TwoDownloads) { | 
| -  // Same as StartDownload, at first. | 
| -  scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); | 
| -  DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); | 
| -  info->download_id = dummy_id; | 
| -  scoped_ptr<DownloadCreateInfo> info2(new DownloadCreateInfo); | 
| -  DownloadId dummy_id2(download_manager_.get(), kDummyDownloadId2); | 
| -  info2->download_id = dummy_id2; | 
| -  ScopedTempDir download_dir; | 
| -  ASSERT_TRUE(download_dir.CreateUniqueTempDir()); | 
| - | 
| -  CreateDownloadFile(info.Pass()); | 
| -  CreateDownloadFile(info2.Pass()); | 
| - | 
| -  FilePath crbar(download_dir.path().Append( | 
| -      FILE_PATH_LITERAL("bar.txt.crdownload"))); | 
| -  RenameFile(dummy_id2, crbar, true); | 
| - | 
| -  FilePath crfoo(download_dir.path().Append( | 
| -      FILE_PATH_LITERAL("foo.txt.crdownload"))); | 
| -  RenameFile(dummy_id, crfoo, true); | 
| - | 
| - | 
| -  FilePath bar(download_dir.path().Append(FILE_PATH_LITERAL("bar.txt"))); | 
| -  RenameFile(dummy_id2, bar, true); | 
| - | 
| -  CleanUp(dummy_id2); | 
| - | 
| -  FilePath foo(download_dir.path().Append(FILE_PATH_LITERAL("foo.txt"))); | 
| -  RenameFile(dummy_id, foo, true); | 
| - | 
| -  CleanUp(dummy_id); | 
| -} | 
| - | 
| -// TODO(ahendrickson) -- A test for download manager shutdown. | 
| -// Expected call sequence: | 
| -//  OnDownloadManagerShutdown | 
| -//    DownloadFile::GetDownloadManager | 
| -//    DownloadFile::CancelDownloadRequest | 
| -//    DownloadFile::~DownloadFile | 
|  |