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