Commit 29856945 authored by Julie Jeongeun Kim's avatar Julie Jeongeun Kim Committed by Commit Bot

Convert filesystem::mojom::Directory to new Mojo types

This CL converts filesystem::mojom::DirectoryPtr to
new Mojo types using Remote or PendingRemote.

It also updates Unzip and UnzipWithFilter unzipper.mojom.

Bug: 955171
Change-Id: I1e9bb9beef460722e24cbcf353a715b8c84b6e72
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1819279Reviewed-by: default avatarJoshua Pawlicki <waffles@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Reviewed-by: default avatarMarijn Kruisselbrink <mek@chromium.org>
Commit-Queue: Julie Kim <jkim@igalia.com>
Cr-Commit-Position: refs/heads/master@{#700542}
parent 9c1fbb75
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include "components/services/filesystem/lock_table.h" #include "components/services/filesystem/lock_table.h"
#include "components/services/unzip/public/mojom/unzipper.mojom.h" #include "components/services/unzip/public/mojom/unzipper.mojom.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h"
namespace unzip { namespace unzip {
...@@ -111,10 +111,10 @@ void DoUnzipWithFilter( ...@@ -111,10 +111,10 @@ void DoUnzipWithFilter(
return; return;
} }
filesystem::mojom::DirectoryPtr directory_ptr; mojo::PendingRemote<filesystem::mojom::Directory> directory_remote;
mojo::MakeStrongBinding( mojo::MakeSelfOwnedReceiver(
std::make_unique<filesystem::DirectoryImpl>(output_dir, nullptr, nullptr), std::make_unique<filesystem::DirectoryImpl>(output_dir, nullptr, nullptr),
mojo::MakeRequest(&directory_ptr)); directory_remote.InitWithNewPipeAndPassReceiver());
// |result_callback| is shared between the connection error handler and the // |result_callback| is shared between the connection error handler and the
// Unzip call using a refcounted UnzipParams object that owns // Unzip call using a refcounted UnzipParams object that owns
...@@ -128,7 +128,7 @@ void DoUnzipWithFilter( ...@@ -128,7 +128,7 @@ void DoUnzipWithFilter(
if (filter_callback.is_null()) { if (filter_callback.is_null()) {
unzip_params->unzipper()->Unzip(std::move(zip_file), unzip_params->unzipper()->Unzip(std::move(zip_file),
std::move(directory_ptr), std::move(directory_remote),
base::BindOnce(&UnzipDone, unzip_params)); base::BindOnce(&UnzipDone, unzip_params));
return; return;
} }
...@@ -138,7 +138,7 @@ void DoUnzipWithFilter( ...@@ -138,7 +138,7 @@ void DoUnzipWithFilter(
mojo::MakeRequest(&unzip_filter_ptr), filter_callback)); mojo::MakeRequest(&unzip_filter_ptr), filter_callback));
unzip_params->unzipper()->UnzipWithFilter( unzip_params->unzipper()->UnzipWithFilter(
std::move(zip_file), std::move(directory_ptr), std::move(zip_file), std::move(directory_remote),
std::move(unzip_filter_ptr), base::BindOnce(&UnzipDone, unzip_params)); std::move(unzip_filter_ptr), base::BindOnce(&UnzipDone, unzip_params));
} }
......
...@@ -16,13 +16,14 @@ interface UnzipFilter { ...@@ -16,13 +16,14 @@ interface UnzipFilter {
interface Unzipper { interface Unzipper {
// Unzip |zip_file| into |output_dir|. // Unzip |zip_file| into |output_dir|.
// Returns true on success, false otherwise. // Returns true on success, false otherwise.
Unzip(mojo_base.mojom.File zip_file, filesystem.mojom.Directory output_dir) Unzip(mojo_base.mojom.File zip_file,
pending_remote<filesystem.mojom.Directory> output_dir)
=> (bool result); => (bool result);
// Same as |unzip| but only includes the files for which |filter| returns // Same as |unzip| but only includes the files for which |filter| returns
// true. Note that this incurs one IPC for each file of the archive. // true. Note that this incurs one IPC for each file of the archive.
UnzipWithFilter( UnzipWithFilter(
mojo_base.mojom.File zip_file, mojo_base.mojom.File zip_file,
filesystem.mojom.Directory output_dir, pending_remote<filesystem.mojom.Directory> output_dir,
UnzipFilter filter) => (bool result); UnzipFilter filter) => (bool result);
}; };
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "components/services/filesystem/public/mojom/directory.mojom.h" #include "components/services/filesystem/public/mojom/directory.mojom.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/zlib/google/zip.h" #include "third_party/zlib/google/zip.h"
#include "third_party/zlib/google/zip_reader.h" #include "third_party/zlib/google/zip_reader.h"
...@@ -43,22 +44,20 @@ std::string PathToMojoString(const base::FilePath& path) { ...@@ -43,22 +44,20 @@ std::string PathToMojoString(const base::FilePath& path) {
} }
// Modifies output_dir to point to the final directory. // Modifies output_dir to point to the final directory.
bool CreateDirectory(filesystem::mojom::DirectoryPtr* output_dir, bool CreateDirectory(filesystem::mojom::Directory* output_dir,
const base::FilePath& path) { const base::FilePath& path) {
base::File::Error err = base::File::Error::FILE_OK; base::File::Error err = base::File::Error::FILE_OK;
return (*output_dir) return output_dir->OpenDirectory(PathToMojoString(path), mojo::NullReceiver(),
->OpenDirectory(PathToMojoString(path), mojo::NullReceiver(),
filesystem::mojom::kFlagOpenAlways, &err) && filesystem::mojom::kFlagOpenAlways, &err) &&
err == base::File::Error::FILE_OK; err == base::File::Error::FILE_OK;
} }
std::unique_ptr<zip::WriterDelegate> MakeFileWriterDelegateNoParent( std::unique_ptr<zip::WriterDelegate> MakeFileWriterDelegateNoParent(
filesystem::mojom::DirectoryPtr* output_dir, filesystem::mojom::Directory* output_dir,
const base::FilePath& path) { const base::FilePath& path) {
auto file = std::make_unique<base::File>(); auto file = std::make_unique<base::File>();
base::File::Error err; base::File::Error err;
if (!(*output_dir) if (!output_dir->OpenFileHandle(PathToMojoString(path),
->OpenFileHandle(PathToMojoString(path),
filesystem::mojom::kFlagCreate | filesystem::mojom::kFlagCreate |
filesystem::mojom::kFlagWrite | filesystem::mojom::kFlagWrite |
filesystem::mojom::kFlagWriteAttributes, filesystem::mojom::kFlagWriteAttributes,
...@@ -70,20 +69,19 @@ std::unique_ptr<zip::WriterDelegate> MakeFileWriterDelegateNoParent( ...@@ -70,20 +69,19 @@ std::unique_ptr<zip::WriterDelegate> MakeFileWriterDelegateNoParent(
} }
std::unique_ptr<zip::WriterDelegate> MakeFileWriterDelegate( std::unique_ptr<zip::WriterDelegate> MakeFileWriterDelegate(
filesystem::mojom::DirectoryPtr* output_dir, filesystem::mojom::Directory* output_dir,
const base::FilePath& path) { const base::FilePath& path) {
if (path == path.BaseName()) if (path == path.BaseName())
return MakeFileWriterDelegateNoParent(output_dir, path); return MakeFileWriterDelegateNoParent(output_dir, path);
filesystem::mojom::DirectoryPtr parent; mojo::Remote<filesystem::mojom::Directory> parent;
base::File::Error err; base::File::Error err;
if (!(*output_dir) if (!output_dir->OpenDirectory(PathToMojoString(path.DirName()),
->OpenDirectory(PathToMojoString(path.DirName()), parent.BindNewPipeAndPassReceiver(),
mojo::MakeRequest(&parent),
filesystem::mojom::kFlagOpenAlways, &err) || filesystem::mojom::kFlagOpenAlways, &err) ||
err != base::File::Error::FILE_OK) { err != base::File::Error::FILE_OK) {
return std::make_unique<DudWriterDelegate>(); return std::make_unique<DudWriterDelegate>();
} }
return MakeFileWriterDelegateNoParent(&parent, path.BaseName()); return MakeFileWriterDelegateNoParent(parent.get(), path.BaseName());
} }
bool FilterNoFiles(const base::FilePath& unused) { bool FilterNoFiles(const base::FilePath& unused) {
...@@ -106,22 +104,28 @@ UnzipperImpl::UnzipperImpl(mojo::PendingReceiver<mojom::Unzipper> receiver) ...@@ -106,22 +104,28 @@ UnzipperImpl::UnzipperImpl(mojo::PendingReceiver<mojom::Unzipper> receiver)
UnzipperImpl::~UnzipperImpl() = default; UnzipperImpl::~UnzipperImpl() = default;
void UnzipperImpl::Unzip(base::File zip_file, void UnzipperImpl::Unzip(
filesystem::mojom::DirectoryPtr output_dir, base::File zip_file,
mojo::PendingRemote<filesystem::mojom::Directory> output_dir_remote,
UnzipCallback callback) { UnzipCallback callback) {
DCHECK(zip_file.IsValid()); DCHECK(zip_file.IsValid());
mojo::Remote<filesystem::mojom::Directory> output_dir(
std::move(output_dir_remote));
std::move(callback).Run(zip::UnzipWithFilterAndWriters( std::move(callback).Run(zip::UnzipWithFilterAndWriters(
zip_file.GetPlatformFile(), zip_file.GetPlatformFile(),
base::BindRepeating(&MakeFileWriterDelegate, &output_dir), base::BindRepeating(&MakeFileWriterDelegate, output_dir.get()),
base::BindRepeating(&CreateDirectory, &output_dir), base::BindRepeating(&CreateDirectory, output_dir.get()),
base::BindRepeating(&FilterNoFiles), /*log_skipped_files=*/false)); base::BindRepeating(&FilterNoFiles), /*log_skipped_files=*/false));
} }
void UnzipperImpl::UnzipWithFilter(base::File zip_file, void UnzipperImpl::UnzipWithFilter(
filesystem::mojom::DirectoryPtr output_dir, base::File zip_file,
mojo::PendingRemote<filesystem::mojom::Directory> output_dir_remote,
mojom::UnzipFilterPtr filter, mojom::UnzipFilterPtr filter,
UnzipCallback callback) { UnzipCallback callback) {
DCHECK(zip_file.IsValid()); DCHECK(zip_file.IsValid());
mojo::Remote<filesystem::mojom::Directory> output_dir(
std::move(output_dir_remote));
// Note that we pass a pointer to |filter| below, as it is a repeating // Note that we pass a pointer to |filter| below, as it is a repeating
// callback and transferring its value would cause the callback to fail when // callback and transferring its value would cause the callback to fail when
...@@ -130,8 +134,8 @@ void UnzipperImpl::UnzipWithFilter(base::File zip_file, ...@@ -130,8 +134,8 @@ void UnzipperImpl::UnzipWithFilter(base::File zip_file,
// the method returns. // the method returns.
std::move(callback).Run(zip::UnzipWithFilterAndWriters( std::move(callback).Run(zip::UnzipWithFilterAndWriters(
zip_file.GetPlatformFile(), zip_file.GetPlatformFile(),
base::BindRepeating(&MakeFileWriterDelegate, &output_dir), base::BindRepeating(&MakeFileWriterDelegate, output_dir.get()),
base::BindRepeating(&CreateDirectory, &output_dir), base::BindRepeating(&CreateDirectory, output_dir.get()),
base::BindRepeating(&FilterWithFilterPtr, &filter), base::BindRepeating(&FilterWithFilterPtr, &filter),
/*log_skipped_files=*/false)); /*log_skipped_files=*/false));
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "components/services/unzip/public/mojom/unzipper.mojom.h" #include "components/services/unzip/public/mojom/unzipper.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
namespace unzip { namespace unzip {
...@@ -28,12 +29,14 @@ class UnzipperImpl : public mojom::Unzipper { ...@@ -28,12 +29,14 @@ class UnzipperImpl : public mojom::Unzipper {
private: private:
// unzip::mojom::Unzipper: // unzip::mojom::Unzipper:
void Unzip(base::File zip_file, void Unzip(
filesystem::mojom::DirectoryPtr output_dir, base::File zip_file,
mojo::PendingRemote<filesystem::mojom::Directory> output_dir_remote,
UnzipCallback callback) override; UnzipCallback callback) override;
void UnzipWithFilter(base::File zip_file, void UnzipWithFilter(
filesystem::mojom::DirectoryPtr output_dir, base::File zip_file,
mojo::PendingRemote<filesystem::mojom::Directory> output_dir_remote,
mojom::UnzipFilterPtr filter, mojom::UnzipFilterPtr filter,
UnzipWithFilterCallback callback) override; UnzipWithFilterCallback callback) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment