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
5 #include "components/offline_pages/core/offline_page_test_archiver.h"
6
7 #include <string>
8 #include <utility>
9
10 #include "base/bind.h"
11 #include "base/files/file_util.h"
12 #include "base/location.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "url/gurl.h"
15
16 namespace offline_pages {
17
OfflinePageTestArchiver(Observer * observer,const GURL & url,ArchiverResult result,const base::string16 & result_title,int64_t size_to_report,const std::string & digest_to_report,const scoped_refptr<base::SingleThreadTaskRunner> & task_runner)18 OfflinePageTestArchiver::OfflinePageTestArchiver(
19 Observer* observer,
20 const GURL& url,
21 ArchiverResult result,
22 const base::string16& result_title,
23 int64_t size_to_report,
24 const std::string& digest_to_report,
25 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
26 : observer_(observer),
27 url_(url),
28 create_archive_params_(std::string()),
29 result_(result),
30 size_to_report_(size_to_report),
31 expect_create_archive_called_(false),
32 create_archive_called_(false),
33 delayed_(false),
34 result_title_(result_title),
35 digest_to_report_(digest_to_report),
36 task_runner_(task_runner) {}
37
~OfflinePageTestArchiver()38 OfflinePageTestArchiver::~OfflinePageTestArchiver() {
39 if (expect_create_archive_called_)
40 EXPECT_TRUE(create_archive_called_);
41 }
42
CreateArchive(const base::FilePath & archives_dir,const CreateArchiveParams & create_archive_params,content::WebContents * web_contents,CreateArchiveCallback callback)43 void OfflinePageTestArchiver::CreateArchive(
44 const base::FilePath& archives_dir,
45 const CreateArchiveParams& create_archive_params,
46 content::WebContents* web_contents,
47 CreateArchiveCallback callback) {
48 create_archive_called_ = true;
49 callback_ = std::move(callback);
50 archives_dir_ = archives_dir;
51 create_archive_params_ = create_archive_params;
52 if (!delayed_)
53 CompleteCreateArchive();
54 }
55
CompleteCreateArchive()56 void OfflinePageTestArchiver::CompleteCreateArchive() {
57 DCHECK(!callback_.is_null());
58 base::FilePath archive_path;
59
60 if (filename_.empty()) {
61 ASSERT_TRUE(base::CreateTemporaryFileInDir(archives_dir_, &archive_path));
62 } else if (filename_.IsAbsolute()) {
63 archive_path = filename_;
64 } else {
65 archive_path = archives_dir_.Append(filename_);
66 // This step ensures the file is created and closed immediately.
67 base::File file(archive_path, base::File::FLAG_OPEN_ALWAYS);
68 }
69
70 if (observer_)
71 observer_->SetLastPathCreatedByArchiver(archive_path);
72
73 task_runner_->PostTask(
74 FROM_HERE,
75 base::BindOnce(std::move(callback_), result_, url_, archive_path,
76 result_title_, size_to_report_, digest_to_report_));
77 }
78
79 } // namespace offline_pages
80