offline_page_test_archiver.cc 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright 2015 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/offline_pages/core/offline_page_test_archiver.h"
  5. #include <string>
  6. #include <utility>
  7. #include "base/bind.h"
  8. #include "base/files/file_util.h"
  9. #include "base/location.h"
  10. #include "testing/gtest/include/gtest/gtest.h"
  11. #include "url/gurl.h"
  12. namespace offline_pages {
  13. OfflinePageTestArchiver::OfflinePageTestArchiver(
  14. Observer* observer,
  15. const GURL& url,
  16. ArchiverResult result,
  17. const std::u16string& result_title,
  18. int64_t size_to_report,
  19. const std::string& digest_to_report,
  20. const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
  21. : observer_(observer),
  22. url_(url),
  23. create_archive_params_(std::string()),
  24. result_(result),
  25. size_to_report_(size_to_report),
  26. expect_create_archive_called_(false),
  27. create_archive_called_(false),
  28. delayed_(false),
  29. result_title_(result_title),
  30. digest_to_report_(digest_to_report),
  31. task_runner_(task_runner) {}
  32. OfflinePageTestArchiver::~OfflinePageTestArchiver() {
  33. if (expect_create_archive_called_)
  34. EXPECT_TRUE(create_archive_called_);
  35. }
  36. void OfflinePageTestArchiver::CreateArchive(
  37. const base::FilePath& archives_dir,
  38. const CreateArchiveParams& create_archive_params,
  39. content::WebContents* web_contents,
  40. CreateArchiveCallback callback) {
  41. create_archive_called_ = true;
  42. callback_ = std::move(callback);
  43. archives_dir_ = archives_dir;
  44. create_archive_params_ = create_archive_params;
  45. if (!delayed_)
  46. CompleteCreateArchive();
  47. }
  48. void OfflinePageTestArchiver::CompleteCreateArchive() {
  49. DCHECK(!callback_.is_null());
  50. base::FilePath archive_path;
  51. if (filename_.empty()) {
  52. ASSERT_TRUE(base::CreateTemporaryFileInDir(archives_dir_, &archive_path));
  53. } else if (filename_.IsAbsolute()) {
  54. archive_path = filename_;
  55. } else {
  56. archive_path = archives_dir_.Append(filename_);
  57. // This step ensures the file is created and closed immediately.
  58. base::File file(archive_path, base::File::FLAG_OPEN_ALWAYS);
  59. }
  60. if (observer_)
  61. observer_->SetLastPathCreatedByArchiver(archive_path);
  62. task_runner_->PostTask(
  63. FROM_HERE,
  64. base::BindOnce(std::move(callback_), result_, url_, archive_path,
  65. result_title_, size_to_report_, digest_to_report_));
  66. }
  67. } // namespace offline_pages